Для HTMLENCODE или нет для HTMLENCODE пользовательского ввода в веб-форме (asp.net vb) - PullRequest
0 голосов
/ 03 июня 2010

У меня есть много параметров, составляющих форму вставки, например:

x.Parameters.AddWithValue("@city", City.Text)

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

Должен ли я добавлять свои входные параметры, как это?

x.Parameters.AddWithValue("@city", HttpUtility.HtmlEncode(City.Text))

Есть ли что-то еще, что я должен рассмотреть, чтобы избежать атак?

Ответы [ 2 ]

5 голосов
/ 03 июня 2010

Не кодировать ввод. Кодировать вывод. В какой-то момент в будущем вы можете решить, что хотите использовать те же данные для создания PDF или документа Word (или чего-то еще), после чего вы не захотите, чтобы это был HTML.

Когда вы принимаете данные, это просто данные.

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

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

… и т. Д.

1 голос
/ 03 июня 2010

Я настоятельно рекомендую ознакомиться с Шпаргалкой по профилактике OWASP XSS . Он помогает классифицировать различные области HTML-документа, который вы можете вставить, и рецепт того, как правильно закодировать вывод для каждого места.

Знайте, что вы не можете просто повсеместно доверять такой функции, как htmlEncode (), и ожидать, что она станет волшебной пилюлей для всех бед. Цитировать из документа OWASP по ссылке:

Почему я не могу просто кодировать недоверенные данные сущностью HTML?

Кодировка сущности HTML подходит для ненадежных данных, которые вы помещаете в тело документа HTML, например внутри тега. Это даже работает для ненадежных данных, которые входят в атрибуты, особенно если вы религиозны в использовании кавычек вокруг ваших атрибутов. Но кодирование сущностей HTML не работает, если вы помещаете ненадежные данные в тег где-либо, или в атрибут обработчика события, например onmouseover, или в CSS, или в URL. Таким образом, даже если вы используете метод кодирования сущностей HTML везде, вы все равно, скорее всего, уязвимы для XSS. Вы ДОЛЖНЫ использовать синтаксис escape для той части HTML-документа, в которую вы помещаете ненадежные данные. Вот что излагаются нижеприведенные правила.

Найдите время, чтобы понять, как именно и почему работает XSS. Тогда просто следуйте этим 7 правилам, и вы будете в безопасности.

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