После ASP.NET 1.1 представлена возможность автоматически проверять, есть ли XSS (атака сценариев поперечного сайта) для подачи форм. Когда пользователь пытается использовать такой вход, чтобы повлиять на страницу, чтобы вернуть результат, двигатель ASP.NET запустит httprequestvalidationExceptionin. По умолчанию страница со следующим текстом будет возвращена:
Это очень важная функция безопасности, предоставленная ASP.NET. Поскольку многие программисты не имеют представления о безопасности, и они даже не знают, как существование таких атак, как XSS, еще меньше людей знают, что инициатива для их защиты. ASP.NET безопасен по умолчанию на данный момент. Это позволяет программистам, которые мало знают о безопасности, по -прежнему писать веб -сайты с определенными возможностями безопасности.
Однако, когда я погуллел поиск httprequestvalidationException или потенциально опасное значение запроса. Форма было обнаружено от клиента, я был удивлен, обнаружив, что решение, данное большинством людей, заключалось в том, чтобы отключить его, установив validateRequest = false на странице ASP.NET. Эта функция не заботится о том, действительно ли веб -сайт программиста не нужна эта функция. Я был так напуган зрением. Осознание безопасности всегда должно быть в уме каждого программиста.
Почему многие программисты хотят запретить ValidateRequest? Не нужно это говорить. Другая часть не заключается в том, что пользователь разрешает ввод символов, которые легко вызывают XSS, но ненавидит эту форму отчетности об ошибках. Не пользователь.
Для программистов, которые хотят хорошо обработать это сообщение об ошибке, не используя сообщение об ошибке исключения ASP.NET по умолчанию, пожалуйста, не отключайте valiSateRequest = false.
Правильным способом является добавление функции page_error () на вашу текущую страницу, чтобы поймать все исключения, которые происходят при обработке страниц без обработки. Затем дайте пользователю юридическое сообщение об ошибке. Если текущая страница не имеет page_error (), это исключение будет отправлено в Global.asax's Application_error () для обработки, и вы также можете написать там общую функцию обработки ошибок исключений. Если в обоих местах не записывается функция обработки исключений, эта страница отчета об ошибках по умолчанию будет отображаться.
Например, для решения этого исключения требуется только очень короткий код. Добавьте этот код на страницу-кодовой страницы:
| Ниже приведен котированный фрагмент: ProtectectVoidPage_Error (ObjectSender, EventArgse) { ExceptionEx = server.getLasterRor (); if (exishtprequestvalidationException) { Response.write (пожалуйста, введите юридическую строку.); Server.clearerror (); // Если clearError () не является clearError (), это исключение будет по -прежнему передаваться в Application_error (). } } |
Таким образом, эта программа может перехватить исключение httprequestvalidationException и может вернуть разумное сообщение об ошибке в соответствии с пожеланиями программиста.
Этот код очень прост, поэтому я надеюсь, что все друзья, которым не разрешается вводить персонажи, такие как пользователи, не запрещают эту функцию безопасности по желанию. . Может.
Для программистов, которые явно запрещают эту функцию, они должны понимать, что они делают, и должны вручную проверить строки, которые должны быть отфильтрованы, в противном случае ваш сайт легко вызовет атаки сценариев поперечного сайта.
Как следует обрабатывать страницы с богатым текстовым редактором?
Если на странице есть элементы управления с богатыми редакторами текста, она неизбежно приведет к представлению HTML -тегов класса. В этом случае мы должны valyateRequest = false. Так как справиться с безопасностью?
Согласно советам Microsoft, мы должны принять политику под названием, основанная на безопасности, явно разрешенную политику.
Во -первых, мы кодируем входную строку с httputility.htmlencode () и полностью запрещаем в ней теги HTML.
Затем мы заменяем теги безопасности, которые нас интересуют, и заменяются reply (). Например, если мы хотим иметь этикетку, мы явно заменим его.
Пример кода заключается в следующем:
| Ниже приведен котированный фрагмент: voidsubmitbtn_click (ObjectSender, EventArgse) ... { // кодирование входной строки, так что все теги HTML будут недействительными. StringBuildersb = NewstringBuilder ( Httputility.htmlencode (htmlinputtxt.text)); // Затем мы избирательно разрешаем <b> и <i> sb.replace (& lt; b & gt;, <b>); sb.replace (& lt;/b & gt;,); sb.replace (& lt; i & gt;, <i>); sb.replace (& lt;/i & gt;,); Response.write (sb.toString ()); } |
Таким образом, мы разрешаем некоторые HTML -теги и запрещать опасные теги.
Согласно совету, предоставленному Microsoft, мы должны тщательно разрешить следующие теги HTML, потому что эти теги HTML могут привести к атакам сценариев поперечного сайте.
Ниже приведен котированный фрагмент:
|
Возможно, самая непостижимая вещь здесь - <img>. Однако, прочитав следующий код, вы должны понять его опасность.
| Ниже приведен котированный фрагмент: <imgsrc = javascript: alert ('hello');> <imgsrc = java 
 script: alert ('hello');> <imgsrc = java 
 script: alert ('hello');> |
Можно вызвать выполнение JavaScript через тег <img>, чтобы злоумышленник мог делать все, что он хочет замаскировать.
То же самое касается <style>:
| Ниже приведен котированный фрагмент: <styletype = text/javascript> ... оповещение («Привет»); </style> |
| Ниже приведен котированный фрагмент: Ошибка сервера в приложении/yourapplicationpath ' Потенциально опасное значение запроса. Форма было обнаружено от клиента (txtname = <b>). Описание: Проверка запроса обнаружила потенциально опасное входное значение клиента, и обработка запроса была прервана. Настройка valiveAteRequest = false в директиве страницы или в разделе конфигурации. Детали исключения: System.web.httprequestvalidationException: потенциально опасное значение запроса. Форма было обнаружено от клиента (txtname = <b>). .... |