ASP.net XSS запрос проверки не срабатывает - PullRequest
1 голос
/ 04 ноября 2011

У меня небольшая проблема с приложением ASP.net - проверка запроса XSS (т. Е. Та, которая вызывает исключение «потенциально опасное значение request.form ...»), похоже, работает неправильно для нас.

У меня есть следующая простая тестовая форма на нашем сайте:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Test2.aspx.vb" 
      Inherits="Test2" %>

<form id="form1" runat="server">

    <asp:textbox ID="Textbox1" runat="server" ></asp:textbox>

    <asp:Button ID="btnSubmit" runat="server" Text="Uh oh" />

</form>

И следующее в нашем web.config для элемента httpRuntime:

<httpRuntime maxRequestLength="8192" />

Если явведите в текстовое поле следующий текст:

<script>alert('XSS!');</script>

Форма публикует сообщения без ошибок, где, как я ожидаю, произойдет ошибка с жалобами на «потенциально опасные ... и т. д.».Я вставил обработчик события click для кнопки и вызвал Request.ValidateInputs (), и все еще без проблем.Наблюдая за переменной Request, я вижу вызов свойства ValidateInputCalled, который имеет значение даже до моего явного вызова ...

Мы нацеливаемся на v4.0 платформы, и я обнаружил, что если я отредактирую элемент httpRuntimeвот так:

<httpRuntime maxRequestLength="8192" requestValidationMode="2.0" />

Тогда проверка запроса страницы начинает работать так, как я ожидал (но я не думаю, что это должно быть необходимо).Единственная другая вещь в конфигурации, подобной этой, - это набор правил, таких как этот:

<location path="Admin/News.aspx">
     <system.web>
       <httpRuntime requestValidationMode="2.0"/>
     </system.web>
 </location>

, которые мы используем, чтобы позволить нам отключить проверку для выбранного набора страниц (отключено на уровне страницы), где пользователю разрешено отправлять выбранный набор тегов HTML в своем тексте.

Это определенно работало ранее.Кто-нибудь знает, почему это может не работать сейчас?Я не хочу возвращаться в режим проверки запросов версии 2.0 для всего сайта.


Только что попробовал новый проект веб-сайта, одна страница, такая же, как указано выше, и ошибка проверки запроса ISобжиг.Наш web.config для исходного сайта довольно большой - кто-нибудь знает другие свойства в этом файле, которые могут повлиять на проверку запроса?Узел страниц в файле конфигурации выглядит следующим образом:

<pages enableEventValidation="false" enableSessionState="true" 
     enableViewStateMac="true"
     viewStateEncryptionMode="Always" 
     controlRenderingCompatibilityVersion="3.5" 
     clientIDMode="AutoID">

Ответы [ 4 ]

1 голос
/ 03 октября 2014

Я обнаружил ту же проблему, если вы установили Glimpse

Следующая строка в web.config полностью останавливает проверку запроса - независимо от настроек Glimpse:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <add name="Glimpse" type="Glimpse.AspNet.HttpModule, Glimpse.AspNet" preCondition="integratedMode" />
    </modules>
</system.webServer>
1 голос
/ 21 февраля 2013

У меня тоже была такая же проблема, но в моем случае это была попытка перехвата в global.asax Application_BeginRequest, которая обнаружила ошибку при доступе к HttpContext.Current.Request.Form, а затем просто проглотила.Что-то связанное с исправлением cookie для загрузки

1 голос
/ 23 апреля 2014

Я наткнулся на этот вопрос при поиске аналогичной проблемы.Моим оказался тот факт, что рассматриваемая страница размещала свои данные как JSON, а механизм связывания модели JSON по умолчанию не выполняет проверку запросов ASP.NET.В конце концов я нашел сообщение в блоге Имрана Балоха, описывающее это известное поведение и обходное решение: http://forums.asp.net/t/1682096.aspx?MVC3+JSON+Security.

Я знаю, что это не проблема ОП, но, возможно, другие найдут его полезным.

0 голосов
/ 04 ноября 2011

OK. Мы перенесли наш файл конфигурации на новый сайт с одной страницей и систематически начинали удалять разделы, пока не обнаружили проблему.

Мы используем стороннюю библиотеку для некоторых элементов управления на нашем сайте, и мы обнаружили, что удаление этого раздела:

<httpModules>
    <add name="CallbackManager" 
      type="Dart.PowerWEB.LiveControls.CallbackManager,Dart.PowerWEB.LiveControls"/>
</httpModules>

Исправляет проблему для нас (но дает нам несколько проблем в другом месте).

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