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