Атака инъекции SQL относится к использованию уязвимостей дизайна, выполнении команд SQL на целевых серверах и других атаках.
Основная причина, по которой атака инъекции SQL успешна при динамическом генерации команд SQL.
например:
Если ваш оператор запроса выберите * из администратора, где username = '"& user &" и password =' "& pwd &" ""
Затем, если мое имя пользователя: 1 'или' 1 '=' 1
Тогда ваше заявление запроса станет:
Выберите * из администратора, где username = '1 или' 1 '=' 1 'и password =' "& pwd &" ""
Таким образом, ваш заявление о запросе будет передано, и вы можете ввести свой интерфейс управления.
Поэтому при предотвращении вам необходимо проверить ввод пользователя. Специальные персонажи, такие как отдельные цитаты, двойные цитаты, полуколоны, запятые, колоны, соединения и т. Д., Преобразуются или отфильтрованы.
Специальные символы и струны, которые необходимо отфильтровать:
Чистый пользователь
xp_cmdshell
/добавлять
exec Master.dbo.xp_cmdshell
Чистые локальные администраторы
выбирать
считать
Аскет
девчонка
середина
'
:
"
вставлять
Удалить из
капля стола
обновлять
усечь
от
%
Ниже приведены два профилактических кода, которые я написал о решении инъекционных атак для вашей ссылки на обучение!
JS -версия кода атаки SQL -инъекции ~:
[Начало кода]
<script language = "javascript">
<!-
var url = location.search;
var re =/^/? (.*) (Select%20 | INSERT%20 | DELETE%20 FROM%20 | COUNT/(| DROP%20Table | Update%20Trate%20 | ASC/(| Mid/(| char/ (| xp_cmdshell | exec%20master | net%20localgroup%20Administrators |/"|: | net%20User |/'|%20OR%20) (.*) $/gi;
var e = re.test (url);
if (e) {
оповещение («Адрес содержит незаконные символы ~»);
location.href = "error.asp";
}
//->
<Скрипт>
[Код кода]
ASP версия кода для предотвращения атак SQL -инъекций ~:
[Начало кода]
<%
При ошибке резюме следующим
Dim Strtemp
Если lcase (request.servervariables ("https")) = "off"
strtemp = "http: //"
Еще
strtemp = "https: //"
Конец, если
strtemp = strtemp & request.servervariables ("server_name")
Если запрос.servervariables ("server_port") <> 80, то strtemp = strtemp & ":" & request.servervariables ("server_port")
strtemp = strtemp & request.servervariables ("url")
Если trim (request.querystring) <> "" Тогда strtemp = strtemp & "" & trim (request.querystring)
strtemp = lcase (strtemp)
Если instr (strtemp, "select%20") или instr (strtemp, "insert%20") или instr (strtemp, "delete%20 -й") или instr (strtemp, "count (") или instr (strtemp ", Drop %20table ") или instr (strtemp," Обновление%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,"%20Or%20 ") тогда
Ответ.
Response.Write "Alert ('незаконной адрес !!');"
Response.write "location.href = 'error.asp';"
Response.write "<cript>"
Конец, если
%>
[Код кода]
C# Проверьте строки, чтобы предотвратить атаки впрыска SQL
В этом примере он предварительно указан как = и «числа
Bool Checkparams (Params Object [] args)
{
String [] Lawlesses = {"=", "''"};
if (Lawless == null || lawless.length <= 0) вернуть true;
// Создание регулярных выражений, пример: Lawlesses - это знак и знак ', тогда регулярное выражение.
// Кроме того, поскольку я хочу выполнять общие и легко изменять функции, у меня есть еще один шаг от массива символов до регулярных выражений.
string str_regex = ".*["; ";
для (int i = 0; i <lawless.length-1; i ++)
str_regex+= Lawless [i]+"|";
str_regex+= Lawlesses [lawless.length-1]+"].*";
//
Foreach (объект arg в Args)
{
if (arg is string) // Если это строка, проверьте напрямую
{
if (regex.matches (arg.toString (), str_regex) .count> 0)
вернуть ложь;
}
else if (arg Icollection) // Если это коллекция, проверьте, является ли элемент в коллекции.
{
Foreach (объект obj в (icollection) arg)
{
if (obj - это строка)
{
if (regex.matches (obj.toString (), str_regex) .count> 0)
вернуть ложь;
}
}
}
}
вернуть истину;