Атаки с использованием SQL-инъекций вызваны несовершенством операторов нашей программы. Давайте посмотрим, как использовать функцию instr в asp для эффективного предотвращения атак с использованием SQL-инъекций. Конкретно должно быть так.
Если instr(Request(id), )>0 или instr(Request(id),')>0, то ответ.перенаправление index.htm
Конечно, после этого вы также можете написать то, что хотите!
Давайте сначала изучим функцию instr:
грамматика
InStr([начало, ]строка1, строка2[, сравнение])
Синтаксис функции InStr имеет следующие параметры:
Описание параметра
начало не является обязательным. Числовое выражение, определяющее начальную позицию для каждого поиска. Если этот параметр опущен, поиск начнется с первой позиции символа. Если start содержит Null, возникает ошибка. Если указано сравнение, требуется параметр start.
Требуется строка 1. Принимает строковое выражение для поиска.
Строка2
Необходимый. Строковое выражение для поиска.
Сравнивать необязательно. Числовое значение, указывающее тип сравнения, используемое при оценке подстрок. Числовые значения см. в разделе «Настройки». Если этот параметр опущен, будет выполнено двоичное сравнение.
Параметр сравнения может иметь следующие значения:
Описание постоянного значения
vbBinaryCompare 0 Выполняет двоичное сравнение.
vbTextCompare 1 Выполняет сравнение текста.
[возвращаемое значение]
Функция InStr возвращает следующие значения:
Если InStr возвращает
строка1 имеет нулевую длину 0
строка1 равна нулю Нуль
string2 — начало нулевой длины
строка2 равна нулю Нуль
строка2 не найдена 0
Найти строку2 в строке1. Найти позицию соответствующей строки.
начало > Len(string2) 0
В следующем примере используется строка поиска InStr:
Тусклая строка поиска, SearchChar, MyPos
SearchString =XXpXXpXXPXXP ' Строка для поиска.
SearchChar = P ' Ищем P.
MyPos = Instr(4, SearchString, SearchChar, 1) 'Сравнение текста возвращает 6, начиная с четвертого символа.
MyPos = Instr(1, SearchString, SearchChar, 0) 'Двоичное сравнение возвращает 9, начиная с 1-го символа.
MyPos = Instr(SearchString, SearchChar) ' Возврат 9.
' По умолчанию используется двоичное сравнение (последний аргумент опущен).
MyPos = Instr(1, SearchString, W) 'Двоичное сравнение возвращает 0, начиная с символа 1 (W не найден).
Обратите внимание, что функция InStrB использует байтовые данные, содержащиеся в строке, поэтому InStrB возвращает не позицию символа первого вхождения одной строки в другую строку, а позицию байта.
Резюме: Функция instr: Возвращает позицию первого вхождения символа или строки в другую строку. Итак, давайте посмотрим, какой код:
если instr(Request(id), )>0 или instr(Request(id),')>0, то
Значение: сравнить конкретные позиции символов (пробела) и символов (') в запросе (id) (двоичное сравнение). Если символы (пробел) и (') найдены, то это утверждение после then!
Теперь все понимают смысл!
Когда я увидел это в первый раз, я сказал, а что, если это в asp? Не является ли ошибкой допустить ошибку при добавлении символов (; или,) и других символов к Id=90? (Да, ответ — да :)
Может быть, кто-то другой сказал, тогда я добавлю несколько символов в оператор if instr(Request(id), )>0 или instr(Request(id),')>0 then, например, изменю его на: if instr(Request (id ), )>0 или instr(Request(id),')>0 или instr(Request(id),;)>0 или instr(Request(id),, )>0, тогда
Подождите, вы можете добавить это позже, ха-ха! (Это хорошо! Но это хуже:)
Да, после этого он действительно сможет победить некоторых так называемых хакеров!
На самом деле, это не обязательно. Вы забыли предложение instr(Request(id), )>0? Он даже сравнил его с (пробелом)! Пока существует это предложение, не будет ли бесполезно для так называемых хакеров говорить: 1 = 1?