Подтвердить что ты не робот

Классическая ASP-инъекция

Что такое сильный способ защитить от SQL-инъекции для классического приложения asp?

FYI Я использую его с БД доступа. (Я не писал приложение)

4b9b3361

Ответ 1

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

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

Могу ли я защитить от SQL Injection путем экранирования одиночной кавычки и окружающего пользователя с помощью одиночных кавычек?

Улавливание 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, где объекты несут ответственность за свои интерфейсы и не раскрывают все их внутренние работы.)

Ответ 2

Вот несколько скриптов 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

Ответ 3

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

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

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

Здесь ссылка: Анализатор исходного кода Microsoft для инструмента SQL Injection доступен для обнаружения уязвимостей SQL-инъекций в коде ASP

Ответ 4

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

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

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

Ответ 5

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

Ответ 7

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

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

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

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

Хранить procs с проверкой данных вместе с html encode - лучший способ предотвратить атаки SQL Injection.

Ответ 8

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

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