Serangan Injeksi SQL mengacu pada mengeksploitasi kerentanan desain, menjalankan perintah SQL pada server target, dan serangan lainnya.
Alasan utama mengapa serangan injeksi SQL berhasil ketika secara dinamis menghasilkan perintah SQL.
Misalnya:
Jika Pernyataan Kueri Anda Pilih * Dari Admin Di mana Nama Pengguna = '"& Pengguna &"' dan Kata Sandi = '"& PWD &"' "
Kemudian, jika nama pengguna saya adalah: 1 'atau' 1 '=' 1
Kemudian, pernyataan kueri Anda akan menjadi:
Pilih * dari admin di mana nama pengguna = '1 atau' 1 '=' 1 'dan kata sandi =' "& pwd &" '"
Dengan cara ini, pernyataan kueri Anda akan disahkan, dan Anda dapat memasukkan antarmuka manajemen Anda.
Karena itu, saat mencegah, Anda perlu memeriksa input pengguna. Karakter khusus khusus, seperti kutipan tunggal, kutipan ganda, titik koma, koma, titik dua, koneksi, dll., Dikonversi atau difilter.
Karakter dan string khusus yang perlu disaring adalah:
pengguna bersih
xp_cmdshell
/menambahkan
exec master.dbo.xp_cmdshell
administrator net localgroup
memilih
menghitung
ASC
arang
pertengahan
'
:
"
menyisipkan
hapus dari
Tabel drop
memperbarui
memotong
dari
%
Di bawah ini adalah dua kode pencegahan yang saya tulis tentang menyelesaikan serangan injeksi untuk referensi pembelajaran Anda!
Versi JS Kode Serangan Injeksi SQL ~:
[Kode Mulai]
<bahasa skrip = "javascript">
<!-
var url = location.search;
var re =/^/? (.*) (pilih%20 | masukkan%20 | hapus%20 dari%20 | count/(| drop%20table | perbarui%20trate%20 | ASC/(| mid/(| char/ (| xp_cmdshell | exec%20master | net%20localgroup%20Administrators |/"|: | net%20User |/'|%20or%20) (.*) $/gi;
var e = re.test (url);
if (e) {
alert ("Alamat berisi karakter ilegal ~");
location.href = "error.asp";
}
//->
<script>
[Kode End]
Versi ASP dari kode untuk mencegah serangan injeksi SQL ~:
[Kode Mulai]
<%
Pada kesalahan resume berikutnya
Redup strtemp
Jika lcase (request.serverVariable ("https")) = "off" lalu
strtemp = "http: //"
Kalau tidak
strtemp = "https: //"
Akhiri jika
strtemp = strtemp & request.serverVariable ("server_name")
Jika request.serverVariable ("server_port") <> 80 maka strtemp = strtemp & ":" & request.serverVariable ("server_port")
strtemp = strtemp & request.serverVariables ("url")
Jika trim (request.querystring) <> "" lalu strtemp = strtemp & "?" & Trim (request.querystring)
strtemp = lcase (strtemp)
Jika instr (strtemp, "pilih%20") atau instr (strtemp, "masukkan%20") atau instr (strtemp, "hapus%20from") atau instr (strtemp, "count (") atau instr (strtemp, "drop %20table ") atau instr (strtemp," perbarui%20 ") atau instr (strtemp," truncate%20 ") atau instr (strtemp," asc (") atau instr (strtemp," mid (") atau instric , "char (") atau instr (strtemp, "xp_cmdshell") atau Instr (strtemp, "exec%20master") atau instr (strtemp, "net%20localgroup%20Administrators") atau instr (strtemp, ":") atau instr (strtemp, "net%20User") atau instr (strtemp, "' ") atau instr (strtemp,"%20 atau%20 ") lalu
Response.write "<bahasa skrip = 'javascript'>"
Response.write "waspada ('alamat ilegal !!');"
Response.write "location.href = 'error.asp';"
Response.write "<script>"
Akhiri jika
%>
[Kode End]
C# periksa string untuk mencegah serangan injeksi SQL
Dalam contoh ini, ini secara sementara ditentukan sebagai = dan 'angka
bool checkparams (objek params [] args)
{
string [] lawlessses = {"=", "'"};
if (lawlessses == null || lawlessses.length <= 0) return true;
// Bangun ekspresi reguler, contoh: lawless adalah tanda = tanda dan 'tanda, ekspresi reguler adalah.* [=}'].* (Untuk konten terkait ekspresi reguler, silakan lihat msdn)
// Selain itu, karena saya ingin melakukan fungsi umum dan mudah untuk memodifikasi, saya memiliki langkah lain dari array karakter ke ekspresi reguler.
string str_regex = ".*[";
untuk (int i = 0; i <lawlessses.length-1; i ++)
str_regex+= lawlessses [i]+"|";
str_regex+= lawlessses [lawlessses.length-1]+"].*";
//
foreach (objek arg dalam args)
{
if (arg is string) // jika itu string, periksa langsung
{
if (regex.matches (arg.tostring (), str_regex) .count> 0)
mengembalikan false;
}
lain jika (arg is icollection) // Jika itu koleksi, periksa apakah elemen dalam koleksi adalah string.
{
foreach (objek obj in (icollection) arg)
{
if (obj adalah string)
{
if (regex.matches (obj.tostring (), str_regex) .count> 0)
mengembalikan false;
}
}
}
}
Kembali Benar;