Подтвердить что ты не робот

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

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

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

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

Например:

"<script src='bobs.js'>John Doe</script>" должен стать "John Doe"

4b9b3361

Ответ 1

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

Также на NuGet

Ответ 2

Основываясь на комментарии к этому ответу, вы можете найти полезную информацию в этом вопросе:
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

Ответ 3

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

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

Ответ 5

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

  • Должно ли оно стать "Джоном Доу"? Я бы HTML кодировал эту строку и позволял пользователю "John Doe" (если это действительно его настоящее имя...), иметь глупое название <script src='bobs.js'>John Doe</script>. Он не должен был завернуть свое имя в теги script или любые теги в первую очередь. Это подход, который я использую во всех случаях, если для одного из других методов не существует действительно хорошего бизнеса.

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

  • Еще один подход - использовать DSL, который "компилирует" HTML. Удостоверьтесь whitehat ваш компилятор DSL, потому что некоторые (например MarkdownSharp) позволит произвольный HTML, как теги <script>, и злые атрибуты через unencoded (что, кстати, вполне разумно, но может и не быть тем, что вам нужно или ожидать). Если это так, вам нужно будет использовать технику №2 и дезинформировать то, что выдает ваш компилятор.

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