Опасен ли «бросок» в представленном пользователем контенте в классическом ASP? - PullRequest
3 голосов
/ 14 декабря 2010

Унаследованное мной унаследованное веб-приложение, которое было написано специально для Oxfam New Zealand в классическом ASP, выполняет замену строки на вводимых пользователем данных, удаляя строку «cast», предположительно, из-за функции cast.

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

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

Фактическая замена сделана с:

strString = (Replace(strString, "cast", "", 1, -1, vbTextCompare))

Я подумываю просто прокомментировать эту строку, это будет безопасно сделать?

Ответы [ 3 ]

2 голосов
/ 14 декабря 2010

Устаревшее приложение делает это неправильно.

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

0 голосов
/ 21 декабря 2010

Это на самом деле крайне неэффективный способ предотвращения атак с использованием SQL-инъекций.Есть 100 других слов, которые вам нужно заменить.Принятый ответ неверен в том смысле, что это не сохраняет безопасность этого кода, потому что нет никакой безопасности с самого начала.Строка с символом "(" никогда не будет выполнена, если хакер просто добавит пробел между CAST и (.

См. Этот вопрос по параметризованным запросам в классическом asp . Вы никогда не захотите объединитьПользователь предоставил данные для создания строки sql. Есть способы сделать это без конкатенации, которые являются правильными, но код, который у вас есть в данный момент, бесполезен. Вы могли бы просто удалить эту строку.

0 голосов
/ 14 декабря 2010

Я мог бы изменить его на

strString = (Replace(strString, "cast(", "", 1, -1, vbTextCompare))

, таким образом, вы все еще получаете «безопасность» от выхода из SQL, но не ухудшите пользователей с приведением их имен

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