Приемлемая безопасность: отключить ValidateRequest с параметризованными строками SQL и HTML?

Я пытаюсь убедиться, что мое приложение ASP.NET для веб-форм максимально безопасно, оно получает и сохраняет данные, вводимые пользователем, в базу данных SQL (обычный материал) только для пользователей с логином, поэтому недоступно для широкой публики.

Отключив ValidateRequest для входных страниц, я понимаю, что существует риск XSS-атак — все SQL-запросы параметризованы, поэтому они защищены от SQL-инъекций (правильно?).

Могу ли я вместо использования библиотеки Anti-XSS просто использовать HTMLencode для входного текста? Затем мне сохранить строку HTMLencoded?

Или я неправильно на это смотрю? Должен ли я сохранять ввод пользователя дословно, а затем HTMLencode или XSS-HTMLencode каждый раз, когда он выводится в браузер?


person RemarkLima    schedule 16.05.2013    source источник


Ответы (2)


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

Несколько хороших комментариев здесь: Что рекомендации по предотвращению атак xss на PHP-сайте

Затем либо кодируйте HTML (кажется уязвимым), либо используйте XSS-библиотеку для кодирования вывода. Как сказано в приведенной выше ссылке, пункт назначения для данных может не быть браузером в какой-то более поздний момент.

Затем на примере XSS-атак здесь: https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet вводят некоторые из них в базу данных и считывают обратно в браузер. При правильной кодировке вы должны видеть текст, а не запускать скрипт.

person RemarkLima    schedule 17.05.2013

Принимая во внимание, что атаки Injection и XSS занимают два первых места в топ-10 OWASP вам нужно быть очень осторожным, а затем отключить проверку проверки в asp.net.

Во-первых, не отключайте проверку запроса, если это действительно не нужно. У вас должна быть причина, чтобы сделать это. Проверка запроса — это встроенный механизм защиты от XSS-атак.

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

В некоторых случаях вам нужно будет пропускать такие символы, как «‹» или «>», что потенциально опасно.

Поэтому вам нужно всегда кодировать вывод, если вы отображаете его на странице. Всегда. Это предотвращает выполнение JavaScript (если он был вставлен во входные данные).

Параметризованные запросы должны использоваться вместе с вышеупомянутой проверкой белого списка и кодированием вывода, чтобы предотвратить атаки с внедрением SQL.

Также не выполняйте построение динамических запросов (динамический sql) внутри хранимой процедуры sql.

И убедитесь, что все пользователи БД и хранимые процедуры sql имеют соответствующий уровень доступа к ресурсам БД (наименее возможный подход прав доступа).

person Georgii Gonchar    schedule 27.05.2013
comment
Я много читал о проверке белого списка, и кажется, что последний выпуск от команды XSS Library от Microsoft просто HTML кодирует все. При этом я использовал все примеры OWASP XSS Injection, и если вы кодируете все это в необработанном HTML, то оно дезинфицируется. Однако, если вашему приложению необходимо отображать введенную пользователем разметку, вам понадобятся белые списки. Спасибо за понимание. - person RemarkLima; 28.05.2013