Rumah >hujung hadapan web >tutorial js >Bagaimana untuk berhenti menghalang Pintasan OTP melalui Manipulasi Respons
Catatan blog ini menerangkan cara untuk mencegah serangan pintasan OTP (Kata Laluan Satu Kali) dengan berkesan, memfokuskan pada Node.js dan React.js, tetapi boleh digunakan pada teknologi lain. Ia memperincikan teknik dan amalan terbaik untuk menjamin pelaksanaan OTP anda.
Memahami Serangan Pintasan OTP
Pintas OTP mengeksploitasi kelemahan aplikasi untuk mendapatkan akses tanpa kebenaran tanpa OTP yang sah. Penyerang mungkin menggunakan OTP yang tidak sah atau tamat tempoh, atau memanipulasi respons API (selalunya menggunakan alatan seperti Burp Suite) untuk memintas pengesahan OTP. Serangan biasa melibatkan memintas respons yang sah daripada pengguna yang sah dan menggunakannya semula untuk akses tanpa kebenaran.
Mencegah Manipulasi Tindak Balas
Menyulitkan respons API sahaja tidak mencukupi. Walaupun penyulitan (menggunakan AES atau RSA) melindungi data dalam transit, respons yang sama untuk semua pengguna mewujudkan kelemahan. Walaupun dengan penyulitan, jika kriteria kejayaan/kegagalan hanya berdasarkan kod status HTTP atau mesej kejayaan yang konsisten ("OTP disahkan berjaya"), penyerang masih boleh memintas pengesahan OTP dengan memainkan semula respons berjaya yang ditangkap.
Penyelesaian Teguh: ID Respons Unik
Penyelesaian melibatkan penjanaan pengecam setiap pengguna yang unik untuk setiap permintaan. Ini menghalang serangan ulang tayang tindak balas. Kaedah yang digariskan mengelakkan penggunaan pangkalan data:
Pelaksanaan Bahagian Pelanggan (contoh React.js):
rsid
). Anda boleh menggunakan mana-mana kaedah penjanaan ID rawak yang sesuai.rsid
dalam pengepala permintaan.rsid
ke pelayan.rsid
yang diterima dalam respons dengan yang dihantar dalam pengepala permintaan. Padanan menunjukkan pengesahan yang berjaya; ketidakpadanan menandakan percubaan serangan.<code class="language-javascript">const OnSubmit = async () => { let data = await AesEncrypt(form); let verifyobj = { "encdata": data }; let getid = await makeid(7); let config = { headers: { "rsid": getid } }; let ApiCallverify = await axios.post("http://localhost:4000/api/verifyotp", verifyobj, config); let decryptedData = await Aesdecrypt(ApiCallverify.data.dataenc); if (ApiCallverify && ApiCallverify.data.dataenc && ApiCallverify.status === 200) { if (decryptedData.rsid === getid) { alert(decryptedData.message); } else { alert("Invalid User"); } } else { alert(decryptedData.message); } };</code>
Pelaksanaan Bahagian Pelayan (contoh Node.js):
rsid
.rsid
asal daripada pengepala permintaan.<code class="language-javascript">const OnSubmit = async () => { let data = await AesEncrypt(form); let verifyobj = { "encdata": data }; let getid = await makeid(7); let config = { headers: { "rsid": getid } }; let ApiCallverify = await axios.post("http://localhost:4000/api/verifyotp", verifyobj, config); let decryptedData = await Aesdecrypt(ApiCallverify.data.dataenc); if (ApiCallverify && ApiCallverify.data.dataenc && ApiCallverify.status === 200) { if (decryptedData.rsid === getid) { alert(decryptedData.message); } else { alert("Invalid User"); } } else { alert(decryptedData.message); } };</code>
Keberkesanan yang Ditunjukkan: Catatan blog termasuk tangkapan skrin yang menunjukkan log masuk yang berjaya dan percubaan yang gagal menggunakan Burp Suite untuk memintas dan mengubah suai respons. rsid
unik menghalang serangan ulangan yang berjaya.
Imej kekal dalam kedudukan asalnya. Ambil perhatian bahawa URL imej dipelihara. Untuk memaparkannya dengan betul, sistem perlu boleh mengakses URL tersebut.
Atas ialah kandungan terperinci Bagaimana untuk berhenti menghalang Pintasan OTP melalui Manipulasi Respons. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!