Saya pernah mendengar bahwa mengekspos ID database (dalam URL, misalnya) adalah risiko keamanan, tetapi saya mengalami kesulitan memahami alasannya.
Adakah pendapat atau tautan tentang mengapa itu berisiko, atau mengapa tidak?
EDIT: tentu saja aksesnya mencakup, misalnya jika Anda tidak dapat melihat sumber daya foo?id=123
Anda akan mendapatkan halaman kesalahan. Kalau tidak, URL itu sendiri harus dirahasiakan.
EDIT: jika URL itu rahasia, itu mungkin akan berisi token yang dihasilkan yang memiliki masa hidup terbatas, misalnya valid untuk 1 jam dan hanya dapat digunakan sekali.
EDIT (berbulan-bulan kemudian): Praktik pilihan saya saat ini untuk ini adalah menggunakan UUIDS untuk ID dan mengeksposnya. Jika saya menggunakan nomor urut (biasanya untuk kinerja pada beberapa DB) sebagai ID saya suka membuat token UUID untuk setiap entri sebagai kunci alternatif, dan memaparkannya.
Meskipun bukan risiko keamanan data, ini benar-benar risiko keamanan intelijen bisnis karena memaparkan ukuran dan kecepatan data. Saya telah melihat bisnis dirugikan oleh ini dan telah menulis tentang anti-pola ini secara mendalam. Kecuali jika Anda hanya membangun eksperimen dan bukan bisnis, saya sangat menyarankan untuk menjaga id pribadi Anda dari perhatian publik. https://medium.com/lightrail/prevent-business-intelligence-leaks-by-using-uuids-instead-of-database-ids-on-urls-and-in-apis-17f15669fd2e
sumber
Tergantung pada apa ID berdiri.
Pertimbangkan sebuah situs yang karena alasan kompetitif tidak ingin mempublikasikan berapa banyak anggota yang mereka miliki tetapi dengan menggunakan ID berurutan tetap mengungkapkannya di URL: http://some.domain.name/user?id=3933
Di sisi lain, jika mereka menggunakan nama login pengguna sebagai gantinya: http://some.domain.name/user?id=some mereka belum mengungkapkan apa pun yang belum diketahui pengguna.
sumber
Pikiran umum sejalan dengan ini: "Ungkapkan sedikit informasi tentang cara kerja aplikasi Anda kepada siapa pun."
Mengekspos ID basis data dianggap sebagai pengungkapan beberapa informasi.
Alasan untuk ini adalah bahwa peretas dapat menggunakan informasi apa pun tentang cara kerja aplikasi Anda untuk menyerang Anda, atau pengguna dapat mengubah URL untuk masuk ke database yang ia seharusnya tidak melihatnya?
sumber
Kami menggunakan GUID untuk id basis data. Membocorkannya jauh lebih tidak berbahaya.
sumber
Jika Anda menggunakan ID integer di db, Anda dapat membuatnya mudah bagi pengguna untuk melihat data yang seharusnya tidak mereka ubah dengan mengubah variabel qs.
Misalnya seorang pengguna dapat dengan mudah mengubah parameter id dalam qs ini dan melihat / memodifikasi data yang seharusnya tidak mereka http: // someurl? Id = 1
sumber
Ketika Anda mengirim id database ke klien Anda, Anda dipaksa untuk memeriksa keamanan dalam kedua kasus. Jika Anda menyimpan id di sesi web Anda, Anda dapat memilih jika Anda ingin / perlu melakukannya, yang berarti pemrosesan berpotensi kurang.
Anda terus-menerus mencoba mendelegasikan hal-hal ke kontrol akses Anda;) Ini mungkin terjadi dalam aplikasi Anda, tetapi saya belum pernah melihat sistem back-end yang konsisten sepanjang karier saya. Sebagian besar dari mereka memiliki model keamanan yang dirancang untuk penggunaan non-web dan beberapa memiliki peran tambahan ditambahkan secara anumerta, dan beberapa di antaranya telah dibaut di luar model keamanan inti (karena peran tersebut ditambahkan dalam konteks operasional yang berbeda, katakanlah sebelum web).
Jadi kami menggunakan id lokal sesi sintetik karena menyembunyikan sebanyak yang kami bisa lolos.
Ada juga masalah bidang kunci non-integer, yang mungkin menjadi kasus untuk nilai yang disebutkan dan sejenisnya. Anda dapat mencoba membersihkan data itu, tetapi kemungkinan Anda akan berakhir seperti bobby drop tables .
sumber