Dalam pemrograman ASP, otentikasi identitas bisa dikatakan umum digunakan. Namun bagaimana kita bisa mencapai keamanan autentikasi?
Halaman pengiriman formulir: sub.htm
<html>
<kepala>
<title>Login administrator</title>
<tubuh>
<form name="form1" method="post" action="sub.asp">
<p>Admin:
<input type="text" name="UserID" size="25" maxlength="20">
kata sandi:
<input type="text" name="Lulus" size="12" maxlength="20">
<input type="kirim" nama="Kirim" value="Kirim">
</p>
</bentuk>
</tubuh>
</html>
program SUB.asp
<%
Menerima data dari formulir
pengguna=permintaan.dari("ID Pengguna")
Periksa apakah data yang dikirimkan oleh formulir kosong (Anda dapat menggunakan JAVASCRIPT atau VBSCRIPT untuk mengontrol halaman formulir, tapi jangan lupa untuk mengontrolnya di sini!
jika pengguna = "" maka
Buka halaman pesan kesalahan!
respon.redirect "err1.htm"
Kalimat ini mungkin tidak berguna, tapi ada baiknya untuk menambahkannya!
respon.akhir
berakhir jika
lulus=permintaan.dari("Lulus")
jika lulus = "" maka
respon.redirect "err2.htm"
respon.akhir
berakhir jika
Bergabunglah dengan basis data
file=server.mappath("database Anda")
setel koneksi=server.buat objek("adodb.koneksi")
dr="driver={driver akses microsoft (*.mdb)};dbq="&file
samb.buka dr
set rs=server.createobject("adodb.recordset")
Kuncinya adalah bahasa SQL di sini
sql="pilih * dari tabel di mana pengguna= "&pengguna&" dan pass= "&pass&" "
rs.open sql
jika bukan rs.eof maka
Jika Anda menemukannya, buka halaman manajemen.
respon.redirect "login.asp"
kalau tidak
Jika tidak ditemukan maka Anda akan masuk ke halaman error.
respon.tulis "err3.htm"
berakhir jika
%>
Semua orang merasa bahwa kode di atas seharusnya baik-baik saja, namun ada risiko keamanan yang serius di sini:
Jika saya ingin masuk ke administrator, saya dapat memasukkannya ke dalam kotak input formulir SUb.htm:
Masukkan di kotak teks pertama: a atau 1 = 1 atau OR =
Masukkan di kotak teks kedua: a atau 1 = 1 atau OR =
Kirim, semua orang akan melihat... "Oh, dengarkan aku, oke, aku akan melempar batunya nanti..."
"a " dan "1" adalah karakter apa saja.
Beberapa orang mungkin bertanya mengapa Anda masuk sebagai administrator saat Anda memasukkan karakter ini? ?
Sebenarnya karakter-karakter tersebut merupakan tipuan dari bahasa SQL di program anda. Bagi yang sudah berhasil masuk
silahkan lihat: Saat memulai program SQL, tabel di-query untuk record yang memenuhi user= "&user&" dan pass= " &pass&" "kondisi
sql="pilih * dari tabel di mana pengguna= "&pengguna&" dan pass= "&pass&" "
Setelah saya memasukkan kode di atas, menjadi:
sql="pilih * dari tabel di mana pengguna= a atau 1 = 1 dan pass= a atau 1 = 1 "
Coba lihat, apakah ada alasan untuk tidak masuk? ? Beri saya alasan untuk tidak masuk!
Hal yang sama juga berlaku jika kolom USER PASS di atas adalah numerik!
Solusi:
1.
Gunakan REPLACE Ganti karakter khusus dalam konten yang dimasukkan oleh pengguna untuk mencapai tujuan kontrol! sql="pilih * dari tabel di mana pengguna= "&replace(user," "," ")&" dan pass= "&replace(pass," "," ")& " "
Cara ini hanya dapat mengganti satu karakter dalam satu waktu. Faktanya, karakter yang berbahaya tidak hanya " ", tetapi juga karakter seperti ">", "<", "&", "%" dan seterusnya, yang mana harus dikontrol sepenuhnya. Namun apa yang harus saya lakukan jika fungsi REPLACE tidak sesuai?
2. Metode kontrol program
menggunakan program untuk mengontrol semua konten yang dimasukkan oleh klien, sehingga kemungkinan karakter atau kode berbahaya yang dimasukkan oleh pengguna dapat dikontrol. dikontrol sepenuhnya. , inilah metode saya!
<%
Menangkap konten formulir yang dikirimkan oleh pengguna
pengguna=permintaan.dari("pengguna")
lulus=permintaan.dari("lulus")
...
Kontrol loop dimulai
untuk i=1 hingga len(pengguna)
Gunakan fungsi MID untuk membaca karakter pada posisi i dalam variabel pengguna
kami=pertengahan(pengguna,i,1)
Bandingkan karakter yang dibaca
jika kita = " " atau kita = "%" atau kita = "<" atau kita = ">" atau kita = "&" maka
Jika berisi karakter di atas, pesan kesalahan akan muncul. Tidak dapat berisi karakter khusus di atas.
respon.redirect "err2.htm"
respon.akhir
berakhir jika
Berikutnya
...
%>