Что такое сильный способ защиты от SQL-инъекции для классического приложения asp?Классический ASP SQL Защита от инъекций
FYI Я использую его с БД доступа. (Я не пишу приложение)
Что такое сильный способ защиты от SQL-инъекции для классического приложения asp?Классический ASP SQL Защита от инъекций
FYI Я использую его с БД доступа. (Я не пишу приложение)
хранимых процедур и/или подготовленные заявления:
https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks
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, где объекты несут ответственность за свои интерфейсы и не подвергают их внутренней работе).
Используя параметризованные запросы, вам необходимо создать объект команды, присвоить ему параметры с именем и значением, если вы так вам не придется беспокоиться о что-нибудь еще (отсылая к SQL-инъекции, конечно;))
http://prepared-statement.blogspot.com/2006/02/asp-prepared-statements.html
И не доверяют хранимые процедуры, они могут стал атаки вектор тоже, если вы не Использовать подготовленные заявления.
если хранимые процедуры не вариант - и даже если они - проверить все входы тщательно
Переключение в SQL Express, по крайней мере, это отличный вариант. Это сделает вещи намного более безопасными. Даже при том, что использование параметров и хранимых процедур может значительно помочь. Я также рекомендую вам тщательно проверить входные данные, чтобы убедиться, что они соответствуют ожидаемым.
Для таких значений, как числа, довольно просто извлечь число, чтобы убедиться, что это действительно просто число. Удалите все специальные символы для SQL. Это предотвратит работу попытки атаки.
«Сильный способ защиты от SQL-инъекции для классического приложения asp» - это безжалостно проверять все входные данные. Период.
Сохраненные процедуры в одиночку и/или различные системы баз данных не обязательно равны хорошей безопасности.
MS недавно выпустил инструмент инспектирования SQL, который ищет неутвержденный ввод, который используется в запросе. Это то, что вам нужно искать.
Microsoft Source Code Analyzer for SQL Injection tool доступен для поиска уязвимостей для инъекций SQL в ASP коде
Эй, любая база данных, как хорошо, как разработчик, который использует его.
Ничего больше, кроме как ничего.
Если вы хороший разработчик, вы можете создать сайт электронной коммерции, используя текстовые файлы в качестве базы данных. Да, это будет не так хорошо, как веб-сайт, основанный на Oracle, но он будет отлично подходит для малого бизнеса, например, для домашнего производства, изготовленного по индивидуальному заказу.
И если вы хороший разработчик, вы не будете использовать встроенные операторы SQL на своих страницах ASP. Даже в Access у вас есть возможность создавать и использовать запросы.
Магазин procs с проверкой данных, а также html encode - лучший способ предотвратить любые атаки SQL Injection.
Вот несколько 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
хранимые процедуры не ответ (даже если он не использует Access), потому что вы все еще можете напишите инъекционный код с помощью SP (я его видел). Это параметры, которые защищают вас. – Flory 2008-09-29 19:49:15