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>
<nama formulir=metode formulir1=tindakan posting=sub.asp>
<p>Admin:
<tipe masukan=nama teks=Ukuran ID Pengguna=25 panjang maksimal=20>
kata sandi:
<tipe input=nama teks=Ukuran kartu=12 panjang maksimal=20>
<tipe input=nama kirim=Kirim nilai=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.opensql
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 login sebagai administrator, saya dapat memasukkan di 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 =
Kirimkan, 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 memasukkan karakter ini untuk masuk sebagai administrator? ?
Faktanya, karakter ini digunakan untuk menipu bahasa SQL dalam program Anda dan berhasil masuk.
Seperti yang Anda lihat: di program awal SQL, tabel dikueri untuk catatan yang memenuhi kondisi user= &user& dan pass= &pass&.
sql=pilih * dari tabel di mana pengguna= &pengguna& dan pass= &pass&
Setelah saya masukkan kode di atas, jadinya:
sql=pilih * dari tabel di mana pengguna= a atau 1 = 1 dan lulus= a atau 1 = 1
Mari kita lihat. Apakah ada alasan untuk tidak masuk? ? Beri aku alasan untuk tidak masuk dulu!
Bidang USER PASS di atas adalah tipe karakter dan hal yang sama berlaku jika tipe numerik!
Larutan:
1. Metode substitusi fungsi:
Gunakan REPLACE untuk mengganti karakter khusus yang terdapat dalam konten yang dimasukkan oleh pengguna untuk mencapai tujuan kontrol! sql=pilih * dari tabel di mana pengguna= &ganti(pengguna, , )& dan lulus= &ganti(lulus, , )&
Cara ini hanya dapat mengganti satu karakter dalam satu waktu. Faktanya, tidak hanya karakter berbahaya saja yang harus dikontrol, tetapi juga karakter seperti >, <, &, %, dll. Namun apa yang harus saya lakukan jika sepertinya saya tidak dapat menggunakan fungsi REPLACE? ?
2. Metode pengendalian program
Gunakan program untuk mengontrol semua konten yang dimasukkan oleh klien, sehingga kemungkinan karakter atau kode berbahaya yang dimasukkan oleh pengguna dapat dikontrol sepenuhnya. Ini adalah 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 us= atau us=% atau us=< atau us=> atau us=& 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
...
%>