Классическая ASP SQL-инъекция - PullRequest
8 голосов
/ 06 октября 2009

Я недавно унаследовал классический веб-сайт asp с множеством встроенных операторов вставки SQL, которые уязвимы для атак SQL-инъекцией.

Эти операторы вставки выполняются через объект команды ADO.

Установит ли свойство Prepared объекта ADO Command Object значение true, чтобы обеспечить параметризацию запроса перед его выполнением, что снизит риск внедрения SQL-кода?

Ответы [ 5 ]

6 голосов
/ 06 октября 2009

Эта ссылка должна оказаться полезной.

Классическая защита SQL-инъекций ASP

6 голосов
/ 06 октября 2009

Нет, если вы строите строку SQL со значениями, которые вы получаете напрямую "извне", то "подготовленный оператор" вам не поможет.

a

sSQL = "SELECT * from mytable where mycolumn = '" + querystring("value") + "'"

все еще напрашивается на неприятности. Единственный способ решить эту проблему - использовать параметры в вашем запросе.

2 голосов
/ 17 ноября 2009

Вы также можете посмотреть на классический проект с открытым исходным кодом asp под названием «Owasp stinger». Это не только помогает с внедрением SQL, но и с заголовком и множеством других проблем безопасности, общих для всех веб-приложений.

http://www.owasp.org/index.php/Classic_ASP_Security_Project

0 голосов
/ 14 января 2010

Вот еще одна хорошая ссылка и пример.

http://blogs.iis.net/nazim/archive/2008/04/28/filtering-sql-injection-from-classic-asp.aspx

В прошлом мы только что создали пару функций для обработки любого внешнего ввода для SQL-инъекций и XSS. Затем медленно мы преобразовали весь встроенный SQL в хранимые процедуры.

0 голосов
/ 23 октября 2009

Я бы посоветовал вам написать функцию для очистки пользовательского ввода, а затем пропустить через нее все переменные запроса. Когда я писал свой, я делал такие вещи, как:

  • экранировать одинарные кавычки,
  • удалить; и другие специальные символы и
  • убедитесь, что вы не можете - (комментарий) в конце утверждения.

Большинство SQL-инъекций будет пытаться что-то вроде ' or 1=1 or a=' поэтому код SQL будет:

SELECT * from mytable where mycolumn = '' or 1=1 or a=''

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...