2008-09-29 2 views

ответ

26

хранимых процедур и/или подготовленные заявления:

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

Can I protect against SQL Injection by escaping single-quote and surrounding user input with single-quotes?

Catching SQL Injection and other Malicious Web Requests

С DB доступа, вы можете это сделать, но если вы уже беспокоитесь о SQL Injection, я думаю, что вам все равно нужно выйти из Access.

Вот ссылка на технику в Access:

http://www.asp101.com/samples/storedqueries.asp

Обратите внимание, что, как правило, защищает от инъекции не сам хранимая процедура, но тот факт, что это параметризованное и не является динамическим. Помните, что даже SP, которые создают динамический код, могут быть уязвимы для инъекций, если они используют определенные параметры для создания динамического кода. В целом, я предпочитаю SP, потому что они образуют уровень интерфейса, который приложения получают в базе данных, поэтому приложениям даже не разрешается выполнять произвольный код в первую очередь.

Кроме того, точка выполнения хранимой процедуры может быть уязвимой, если вы не используете команду и параметры, например. это по-прежнему уязвимы, потому что она строится динамически и может быть мишенью для инъекций:

Conn.Execute("EXEC usp_ImOnlySafeIfYouCallMeRight '" + param1 + "', '" + param2 + "'") ; 

Помните, что ваша база данных должна защитить свой периметр, и если различные логины имеют права INSERT/UPDATE/DELETE в таблицах, любой код в этих приложениях (или скомпрометированные приложения) может быть потенциальной проблемой. Если логины имеют права на выполнение хранимых процедур, это формирует последовательность, через которую вы можете намного легче обеспечить правильное поведение. (Подобно концепциям OO, где объекты несут ответственность за свои интерфейсы и не подвергают их внутренней работе).

3

Используя параметризованные запросы, вам необходимо создать объект команды, присвоить ему параметры с именем и значением, если вы так вам не придется беспокоиться о что-нибудь еще (отсылая к SQL-инъекции, конечно;))

http://prepared-statement.blogspot.com/2006/02/asp-prepared-statements.html

И не доверяют хранимые процедуры, они могут стал атаки вектор тоже, если вы не Использовать подготовленные заявления.

+0

хранимые процедуры не ответ (даже если он не использует Access), потому что вы все еще можете напишите инъекционный код с помощью SP (я его видел). Это параметры, которые защищают вас. – Flory 2008-09-29 19:49:15

1

если хранимые процедуры не вариант - и даже если они - проверить все входы тщательно

-2

Переключение в SQL Express, по крайней мере, это отличный вариант. Это сделает вещи намного более безопасными. Даже при том, что использование параметров и хранимых процедур может значительно помочь. Я также рекомендую вам тщательно проверить входные данные, чтобы убедиться, что они соответствуют ожидаемым.

Для таких значений, как числа, довольно просто извлечь число, чтобы убедиться, что это действительно просто число. Удалите все специальные символы для SQL. Это предотвратит работу попытки атаки.

4

«Сильный способ защиты от SQL-инъекции для классического приложения asp» - это безжалостно проверять все входные данные. Период.

Сохраненные процедуры в одиночку и/или различные системы баз данных не обязательно равны хорошей безопасности.

MS недавно выпустил инструмент инспектирования SQL, который ищет неутвержденный ввод, который используется в запросе. Это то, что вам нужно искать.

Вот ссылка: The Microsoft Source Code Analyzer for SQL Injection tool is available to find SQL injection vulnerabilities in ASP code

1

Эй, любая база данных, как хорошо, как разработчик, который использует его.

Ничего больше, кроме как ничего.

Если вы хороший разработчик, вы можете создать сайт электронной коммерции, используя текстовые файлы в качестве базы данных. Да, это будет не так хорошо, как веб-сайт, основанный на Oracle, но он будет отлично подходит для малого бизнеса, например, для домашнего производства, изготовленного по индивидуальному заказу.

И если вы хороший разработчик, вы не будете использовать встроенные операторы SQL на своих страницах ASP. Даже в Access у вас есть возможность создавать и использовать запросы.

Магазин procs с проверкой данных, а также html encode - лучший способ предотвратить любые атаки SQL Injection.

8

Вот несколько sqlinject скриптов я сделал давно простую версию и расширенную версию:

function SQLInject(strWords) 
dim badChars, newChars, i 
badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_") 
newChars = strWords 
for i = 0 to uBound(badChars) 
newChars = replace(newChars, badChars(i), "") 
next 
newChars = newChars 
newChars= replace(newChars, "'", "''") 
newChars= replace(newChars, " ", "") 
newChars= replace(newChars, "'", "|") 
newChars= replace(newChars, "|", "''") 
newChars= replace(newChars, "\""", "|") 
newChars= replace(newChars, "|", "''") 
SQLInject=newChars 
end function 


function SQLInject2(strWords) 
dim badChars, newChars, tmpChars, regEx, i 
badChars = array(_ 
"select(.*)(from|with|by){1}", "insert(.*)(into|values){1}", "update(.*)set", "delete(.*)(from|with){1}", _ 
"drop(.*)(from|aggre|role|assem|key|cert|cont|credential|data|endpoint|event|f ulltext|function|index|login|type|schema|procedure|que|remote|role|route|sign| stat|syno|table|trigger|user|view|xml){1}", _ 
"alter(.*)(application|assem|key|author|cert|credential|data|endpoint|fulltext |function|index|login|type|schema|procedure|que|remote|role|route|serv|table|u ser|view|xml){1}", _ 
"xp_", "sp_", "restore\s", "grant\s", "revoke\s", _ 
"dbcc", "dump", "use\s", "set\s", "truncate\s", "backup\s", _ 
"load\s", "save\s", "shutdown", "cast(.*)\(", "convert(.*)\(", "execute\s", _ 
"updatetext", "writetext", "reconfigure", _ 
"/\*", "\*/", ";", "\-\-", "\[", "\]", "char(.*)\(", "nchar(.*)\(") 
newChars = strWords 
for i = 0 to uBound(badChars) 
Set regEx = New RegExp 
regEx.Pattern = badChars(i) 
regEx.IgnoreCase = True 
regEx.Global = True 
newChars = regEx.Replace(newChars, "") 
Set regEx = nothing 
next 
newChars = replace(newChars, "'", "''") 
SqlInject2 = newChars 
end function 
Смежные вопросы