Атаки с использованием SQL-инъекций подразумевают использование уязвимостей конструкции для запуска команд Sql на целевом сервере и выполнения других атак для динамического создания команд Sql без проверки данных, введенных пользователем. Это основная причина успеха атак с использованием SQL-инъекций.
например:
Если ваш оператор запроса выбирает * from admin, где username=''"&user&"'' и пароль=''"&pwd&"''"
Итак, если мое имя пользователя: 1'' или ''1''=''1
Тогда ваш запрос будет выглядеть следующим образом:
выберите * от администратора, где имя пользователя=''1 или ''1''=''1'' и пароль=''"&pwd&"''"
Таким образом, ваш оператор запроса пройдет, и вы сможете войти в интерфейс управления.
Поэтому вводимые пользователем данные необходимо проверять при принятии мер предосторожности. Преобразуйте или отфильтруйте некоторые специальные символы, такие как одинарные и двойные кавычки, точки с запятой, запятые, двоеточия, номера соединений и т. д.
Специальные символы и строки, которые необходимо фильтровать:
сетевой пользователь
xp_cmdshell
/добавлять
exec master.dbo.xp_cmdshell
администраторы сетевых локальных групп
выбирать
считать
по возрастанию
голец
середина
''
:
"
вставлять
удалить из
отбросить таблицу
обновлять
обрезать
от
%
Ниже приведены два кода предотвращения атак, которые я написал для решения инъекционных атак!
js-версия кода для предотвращения атак с использованием SQL-инъекций:
<script Language="****">
<!--
вар URL = location.search;
var re=/^?(.*)(select%20|insert%20|delete%20from%20|count(|drop%20table|update%20truncate%20|asc(|mid(|char (|xp_cmdshell|exec%20master|net%20localgroup%20administrators|"|../../image/bbs3000/whatchutalkingabout_smile.gifnet%20user|''|%20or%20)(.*)$/gi;
вар е = re.test(url);
если (е) {
alert("Адрес содержит недопустимые символы~");
location.href="error.asp";
}
//-->
<скрипт>
[КОНЕЦ]
ASP-версия кода для предотвращения атак SQL-инъекцией~:
[НАЧАЛО КОДА]
<%
При ошибке Возобновить Далее
Dim strTemp
Если LCase(Request.ServerVariables("HTTPS")) = "выключено" Тогда
стрТемп = "http://"
Еще
стрТемп = "https://"
End If
strTemp = strTemp & Request.ServerVariables("SERVER_NAME")
If Request.ServerVariables("SERVER_PORT") <> 80 Тогда strTemp = strTemp & ":" & Request.ServerVariables("SERVER_PORT")
strTemp = strTemp & Request.ServerVariables("URL")
If Trim(Request.QueryString) <> "" Тогда strTemp = strTemp & "?" & Trim(Request.QueryString)
strTemp = LCase(strTemp)
Если Instr(strTemp,"select%20") или Instr(strTemp,"insert%20") или Instr(strTemp, "delete%20from") или Instr(strTemp,"count() или Instr(strTemp,"drop%20table") или Instr(strTemp,"update%20") или Instr(strTemp,"truncate%20") или Instr(strTemp,"asc() или Instr(strTemp,"mid() или Instr(strTemp,"char()) или Instr(strTemp,"xp_cmdshell") или Instr(strTemp,"exec%20master") или Instr(strTemp,"net%20localgroup%20administrators") или Instr(strTemp,":") или Instr(strTemp,"net%20user") или Instr(strTemp,"''") или Instr(strTemp,"%20или %20"), тогда
Response.Write "<script Language=''****''>"
Response.Write "alert(''Незаконный адрес!!'');"
Response.Write "location.href=''error.asp'';"
Response.Write "<script>"
Конец, если
%>
Ниже приведены относительно простые методы профилактики. Это методы, с которыми все знакомы. Я только что их опубликовал. Надеюсь, я смогу вам помочь~
В основном для передачи числовых переменных:
идентификатор = Request.QueryString("id")
Если нет(isNumeric(id)) Тогда
Ответ. Напишите «Незаконный адрес~».
Ответ.Конец
Конец, если