Как использовать C # для очистки ввода на HTML-странице? - PullRequest
27 голосов
/ 09 октября 2008

Есть ли библиотека или приемлемый метод для очистки ввода на html-странице?

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

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

Например:

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

Ответы [ 6 ]

23 голосов
/ 03 октября 2016

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

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

Также на NuGet

9 голосов
/ 10 октября 2008

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

8 голосов
/ 10 октября 2008

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

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

7 голосов
/ 10 ноября 2009

Как насчет использования Microsoft Anti-Cross Site Scripting Library ?

4 голосов
/ 04 октября 2013

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

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

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

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

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

0 голосов
/ 09 октября 2008

Вы ищете класс RegEx и шаблон, подобный этому <(.|\n)*?>.

Вы можете найти лот из экзаменов на Google .

...