Rumah >hujung hadapan web >tutorial js >Bagaimana untuk berhenti menghalang Pintasan OTP melalui Manipulasi Respons

Bagaimana untuk berhenti menghalang Pintasan OTP melalui Manipulasi Respons

Linda Hamilton
Linda Hamiltonasal
2025-01-22 22:45:14862semak imbas

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):

  1. Sulitkan Muatan: Sulitkan data OTP sebelum menghantarnya ke pelayan.
  2. Jana ID Unik: Buat ID 7 aksara yang unik (UID, rsid). Anda boleh menggunakan mana-mana kaedah penjanaan ID rawak yang sesuai.
  3. Hantar UID dalam Pengepala: Sertakan rsid dalam pengepala permintaan.
  4. Panggilan API: Hantar data yang disulitkan dan rsid ke pelayan.
  5. Pengesahan Balasan: Nyahsulit respons pelayan.
  6. Padanan UID: Yang penting, bandingkan 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):

  1. Permintaan Pengesahan: Sahkan badan permintaan (data yang disulitkan) dan kehadiran pengepala rsid.
  2. Penyahsulitan: Nyahsulit badan permintaan.
  3. Pengesahan OTP: Sahkan OTP terhadap maklumat pengguna (menggunakan pangkalan data atau storan selamat yang lain).
  4. Penjanaan Respons: Jika pengesahan berjaya, sulitkan respons dan masukkan rsid asal daripada pengepala permintaan.
  5. Penghantaran Balasan: Hantar respons yang disulitkan.
<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.

How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn