ASP.NET MVC Проверка скриптовых тегов - PullRequest
0 голосов
/ 13 января 2011

Я хочу запретить пользователю вводить любые теги <script> в поле для текстовой области. Я назвал историю, используя очень похожий код:

if (ArticleToCreate.story.Contains("<script>") == true)
                ModelState.AddModelError("Story", "No script tags allowed!");

К сожалению, это не сработает, потому что он ищет <script> точно так же, как он ищет, а не <script>some code</script> или какой-то код`

Кто-нибудь может помочь? Я хочу использовать очень похожий код, как показано выше, а не какие-либо служебные уровни или сценарии модели. Спасибо

Ответы [ 3 ]

3 голосов
/ 13 января 2011

По умолчанию MVC этого не допустит.Если вы явно разрешите это (например, с помощью [ValidateInput(false)]), то вам нужно использовать инструмент, такой как Библиотека веб-защиты Microsoft , для очистки ввода.

1 голос
/ 13 января 2011

Если вам нужно разрешить пользователям вводить какой-то HTML, но не HTML, я рекомендую изучить Microsoft Web Protection Library , которая включает методы, позволяющие сделать введенные пользователем фрагменты HTML «безопасными».

Я согласен с Мэттом Гриром в том, что пытаться создать собственное решение для распознавания незаконных тегов - плохая идея. Существует так много векторов атак для внедрения скрипта в HTML, что вы не сможете защититься от них всех. (См. Этот Шпаргал XSS для выборки, но он устарел, поэтому, вероятно, есть и другие.)

0 голосов
/ 13 января 2011

Вы можете использовать html-кодировку, чтобы получить то, что вы ищете, что-то вроде этого.

<%: model.story%> <--------- это поможет вам, я предполагаю, что вы используете asp.net mvc 2, если не можете использовать что-то вроде этого: </p>

<% = Html.Encode (Model.story)%> <----- это для asp.net mvc, но для проверки на стороне сервера вы всегда можете добавить свою собственную проверку на стороне клиента. </p>

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