Скрипт эксплуатирует в ASP.NET - Является ли установка validateRequest = "true" хорошим советом? - PullRequest
3 голосов
/ 21 августа 2011

Я читал о эксплойтах сценариев ASP.NET , и одно из предложений было следующим:
(акцент мой; предложение №3 в разделе «Защита от использования скриптов» "на веб-странице)

Если вы хотите, чтобы ваше приложение принимало некоторый HTML (например, некоторые инструкции по форматированию от пользователей), вы должны кодировать HTML на клиенте перед его отправкой на сервер . Дополнительные сведения см. В разделе Практическое руководство. Защита от использования сценариев в веб-приложении путем применения кодировки HTML к строкам.

Разве это не действительно плохой совет ? Я имею в виду, что эксплуататор может отправить HTML через curl или что-то подобное, а затем HTML будет отправлен в незашифрованном виде на сервер, что не может быть хорошим (?)

Я что-то здесь упускаю или неверно истолковал утверждение?

Ответы [ 4 ]

5 голосов
/ 21 августа 2011

Microsoft не ошибается в их предложении, но, с другой стороны, далеко не завершено, и их предложение опасно.

Так как по умолчанию validateRequest == true, вам действительно следует кодировать специальные символы HTML в клиенте, чтобы они сначала попали на сервер и обошли validateRequest.

Но - им следовало бы подчеркнуть, что это, безусловно, не замена для фильтрации и проверки на стороне сервера.

В частности, если вы должны принять HTML, самый сильный совет - использовать белый листинг вместо черной фильтрации (то есть разрешить очень специфические теги HTML и исключить все остальные). * Библиотека Microsoft AntiXSS настоятельно рекомендуется для строгой фильтрации пользовательского ввода. Это гораздо лучше, чем «заново изобретать колесо».

3 голосов
/ 21 августа 2011

Я не думаю, что этот совет хороший ...

Исходя из моего опыта, я полностью согласен с вашей мыслью и заменю этот совет следующим:

  • все входные данные должны проверяться на стороне сервера первым делом по прибытии
  • все входные данные, которые могут содержать «активное содержимое» (например, HTML, JavaScript ...), должны бытьсбежал по прибытии и никогда не был отправлен ни одному клиенту, пока полная очистка не состоялась
1 голос
/ 21 августа 2011

Я бы никогда не доверил клиенту отправлять доверенные данные. Как вы заявили, существует слишком много способов представления данных. Даже не злонамеренные пользователи могут обойти систему на клиенте, если у них отключен JavaScript.

Однако по ссылке из этого элемента становится ясно, что они означают с пунктом 3:

Защитить от эксплойтов сценария можно следующими способами:

Выполнение проверки параметров для переменных формы, строки запроса переменные и значения cookie. Эта проверка должна включать два типа проверки: проверка того, что переменные могут быть преобразованы в ожидаемый тип (например, преобразовать в целое число, преобразовать в дата-время и т. д.) и проверка ожидаемых диапазонов или форматирование. Например, переменная поста формы, которая предназначена для целое число должно быть проверено с помощью метода Int32.TryParse для проверки переменная действительно является целым числом. Кроме того, полученное целое число следует проверить, чтобы убедиться, что значение находится в ожидаемом диапазоне значений.

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

Кодировка HTML преобразует элементы HTML, используя зарезервированные символы HTML, что они отображаются, а не выполняются.

Я думаю, что это просто случай неуместного слова, потому что вы не можете выполнить этот уровень проверки на клиенте, и в примерах, содержащихся в ссылке, это явно код серверной части, представляемый без какого-либо упоминания клиент. Edit: У вас также по умолчанию включена проверка запросов, верно? Очевидно, что в центре внимания защиты контента лежит на сервере Microsoft.

0 голосов
/ 21 августа 2011

Я думаю, что автор статьи ошибся. Если вы переходите на связанную веб-страницу, она говорит о кодировании данных до их отправки клиенту, а не наоборот. Я думаю, что это просто ошибка редактирования автора, и он намеревался сказать обратное ... закодировать его перед его возвращением клиенту.

...