Как использовать C # для дезинфекции ввода на странице html?

Есть ли библиотека или приемлемый метод для дезинфекции входа на страницу html?

В этом случае у меня есть форма с указанием имени, номера телефона и адреса электронной почты.

Код должен быть C #.

Например:

"John Doe" должен стать "John Doe"

Это более старый, но все же актуальный вопрос.

Мы используем библиотеку HtmlSanitizer .Net, которая:

  • является открытым исходным кодом (MIT) – ссылка GitHub
  • активно поддерживается
  • не имеет таких проблем, как библиотека Microsoft Anti-XSS ,
  • Проверено ли устройство с помощью обходного листа OWASP XSS Filter Evasion
  • специально разработан для этого (в отличие от HTML Agility Pack , который является парсером – не дезинфицирующим средством)
  • Не использует регулярные выражения (HTML не является обычным языком!)

Также на NuGet

Если путем дезинфекции вы имеете в виду УДАЛИТЬ tags полностью, пример RegEx, на который ссылается Bryant, – это тип решения, которое вы хотите.

Если вы просто хотите убедиться, что код НЕ вовлекается в ваш дизайн и визуализирует пользователя. Вы можете использовать метод HttpUtility.HtmlEncode, чтобы предотвратить это!

Основываясь на комментариях к этому ответу, вы можете найти полезную информацию в этом вопросе:
https://stackoverflow.com/questions/72394/what-should-a-developer-know-before-building-a-public-web-site

Вот пример с параметризованным запросом. Вместо этого:

 string sql = "UPDATE UserRecord SET FirstName='" + txtFirstName.Text + "' WHERE UserID=" + UserID; 

Сделай это:

 SqlCommand cmd = new SqlCommand("UPDATE UserRecord SET FirstName= @FirstName WHERE UserID= @UserID"); cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 50).Value = txtFirstName.Text; cmd.Parameters.Add("@UserID", SqlDbType.Integer).Value = UserID; 

Изменить: поскольку инъекции не было, я удалил часть ответа, связанного с этим. Я оставил основной пример с параметризованным запросом, так как это может быть полезно для всех, кто читает вопрос.
–Joel

Как использовать библиотеку скриптов Microsoft Anti-Cross Site ?

Похоже, у вас есть пользователи, которые отправляют контент, но вы не можете полностью доверять им, и все же вы по-прежнему хотите отображать контент, который они предоставляют, как супербезопасный HTML. Вот три метода: HTML кодирует все, HTML кодирует и / или удаляет только злые части, или использует DSL, который компилируется в HTML, с которым вам удобно.

  1. Должна ли она стать «Джоном Доу»? Я бы кодировал HTML эту строку и позволял пользователю «John Doe» (если это действительно его настоящее имя …), иметь глупое имя . Он не должен был завертывать свое имя в тегах сценариев или любых тегах в первую очередь. Это подход, который я использую во всех случаях, если нет действительно хорошего бизнес-примера для одного из других методов.

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

  3. Другой подход – использовать DSL, который «компилирует» HTML. Удостоверьтесь в том, что ваш DSL-компилятор должен выполнить whitehat, потому что некоторые (например, MarkdownSharp ) позволят произвольный HTML- код, например tags и злые атрибуты через unencoded (что, кстати, вполне разумно, но может и не быть тем, что вам нужно или ожидать). Если это так, вам нужно будет использовать технику № 2 и дезинфицировать то, что выдает ваш компилятор.

Заключительные мысли:

  • Если нет сильного бизнес-кейса для техники № 2 или № 3, тогда уменьшите риск и сэкономьте усилия и используйте заботы, пойдите с техникой № 1.
  • Не считайте свой сейф, потому что вы использовали DSL. Например: оригинальная реализация Markdown позволяет использовать HTML, unencoded. «Для любой разметки, которая не охвачена синтаксисом Markdown, вы просто используете сам HTML. Нет необходимости предисловие к ней или ее разграничение, чтобы указать, что вы переключаетесь с Markdown на HTML, вы просто используете tags».
  • Кодировка при выходе. Вы также можете кодировать ввод, но это может привести к связыванию. Если вы неправильно закодировали и сохранили это, как вы получите исходный вход обратно, чтобы вы могли повторно кодировать после исправления неисправного кодировщика?

Вы ищете class RegEx и для шаблона типа <(.|\n)*?> .

Вы можете найти много примеров в Google .

  • Перенаправление по опции выбора в поле выбора
  • Файл открывается вместо загрузки в Internet Explorer в href-ссылке
  • Rip веб-сайт через HTTP для загрузки изображений, HTML и CSS
  • HTML + CSS: нумерованный список с номерами внутри кругов
  • Как получить доступ к localHost от VMware
  • Предотвратить преобразование значений Excel в даты при открытии файлов HTML
  • Какие рекомендации для дизайна электронной почты HTML существуют?
  • Как добавить элемент в DOM и выполнить его код?
  • Что делать & lt; и & gt; стоять?
  • Установите HTML-страницу в качестве обоев на Linux
  • .class конкретный поиск и замена
  • Давайте будем гением компьютера.