Cara Melindungi Permintaan Web dengan Nonces
Isu
Seorang pengguna telah menemui cara untuk mengeksploitasi sistem pengesahan permintaan sistem pemarkahan tapak web dengan menduplikasi permintaan HTTP bernilai tinggi. Ini menjejaskan integriti dan kebolehpercayaan sistem.
Penyelesaian: Melaksanakan Sistem Nonce
Nonces (nombor digunakan sekali) ialah nilai yang menghalang serangan ulang tayang permintaan dengan memastikan permintaan tertentu tidak dilakukan dibuat sebelum ini. Berikut ialah cara biasa dan selamat untuk melaksanakan sistem nonce:
Penjanaan dan Pengesahan Nonce Sebelah Pelayan
Fungsi getNonce()
- Mengenal pasti pelanggan yang membuat permintaan (cth., dengan nama pengguna, session).
- Menghasilkan nonce rawak menggunakan fungsi cincang selamat (cth., SHA512).
- Menyimpan nonce dalam pangkalan data yang dikaitkan dengan ID pelanggan.
- Mengembalikan nonce kepada pelanggan.
verifyNonce() Fungsi
- Mengambil nonce yang disimpan sebelum ini untuk ID klien.
- Mengalih keluar nonce daripada pangkalan data (untuk mengelakkan ia daripada digunakan semula).
- Menghasilkan cincang dengan nonce yang disediakan oleh pelanggan (cnonce), data permintaan dan rahsia garam.
- Membandingkan cincang yang dijana dengan cincang yang disediakan oleh pelanggan.
- Mengembalikan benar jika cincangan sepadan, menunjukkan nonce yang sah.
Pihak Pelanggan Penggunaan Nonce
sendData() Fungsi
- Mengambil nonce daripada pelayan menggunakan fungsi getNonce().
- Menghasilkan nonce khusus pelanggan (cnonce) menggunakan fungsi cincang selamat.
- Menggabungkan pelayan bukan sekali, klien bukan sekali dan permintaan data.
- Menghasilkan cincang daripada nilai yang digabungkan.
- Menghantar permintaan kepada pelayan, termasuk data, cnonce dan cincang.
Pertimbangan Keselamatan
-
Generasi Tanpa Rawak: Fungsi makeRandomString() harus menjana nombor rawak yang sangat tidak dapat diramalkan untuk meningkatkan keselamatan.
-
Fungsi Hash Selamat: Gunakan fungsi cincang yang kuat seperti SHA512 atau bcrypt untuk pengiraan cincang yang tidak berkaitan.
-
Penggunaan Sekali Permintaan: Nonces hanya boleh digunakan sekali dan dialih keluar daripada storan untuk mengelakkan serangan main semula.
Atas ialah kandungan terperinci Bagaimanakah Nonces Boleh Melindungi Permintaan Web Terhadap Serangan Ulangan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!