Проблема в ASP.Net c A potentially dangerous Request.Form value was detected from the client при PostBack и как отключить ValidateRequest

При разработке очередного ASP.Net приложения, столкнулись с проблемой "A potentially dangerous Request.Form value was detected from the client" при вызове PostBack на странице.

В предисловии: есть очень простой приложение, в левой части строится дерево при клике на вершину которого, в правой части отображается необходимая информация.

Проблема как раз и возникла в клиентском обработчике события при клике на вершину дерева. В данном обработчике записывается необходимое значение в скрытое поле:
 <asp:HiddenField ID="ID1" runat="server" /> 


и инициализируется срабатывание клике по скрытой скрытой кнопки:
<asp:Button ID="Button1" runat="server" style="display:none;" OnClick="ButtonSurvey_Click" />


сам js-скрипт выглядит так:
function clickTree(Target, Event) {
$("#ID1").val(Event.TreeNode.getValue());
$("#Button1").click();
}
При этом в Page_Load у данных двух компонентов установлено:
ID1.ClientIDMode = System.Web.UI.ClientIDMode.Static;
Button1.ClientIDMode = System.Web.UI.ClientIDMode.Static;
С первой точки зрения, код вроде как верный и никаких угроз безопасности не несет, но вот при выполнении js-скрипта выдается сообщение "A potentially dangerous Request.Form value was detected from the client".

После долгих разбирательств, выяснилось, что сам компонент дерева генерирует скрытое поле (HiddenField) и в него пишет xml, и именно на это ругается ValidateRequest (подробное описание как это происходит можно почитать в MSDN)

После интенсивных поисков в просторах интернета, поняли что надо отключить данную проверку и добавили в заголовок страницы директиву ValidateRequest="false" и в web.config секцию:
<configuration> <system.web> <pages validateRequest="false" /> </system.web> </configuration>
Но никакого этого результат не дало, и пришлось мучить поисковые машины еще. В итоге оказалось всего навсего в web.config не хватало строчки:
<httpRuntime requestValidationMode="2.0"/>
после добавления которой, валидация отключилась и все заработало.

3 комментария:

  1. Спасибо, ставлю плюс за помощь

    ОтветитьУдалить
  2. requestValidationMode="2.0" !!!
    Спасибо, друг! Я то тут мучаюсь...

    ОтветитьУдалить
  3. Не забываем ставить +1 (и совсем суппер, если твитните)

    ОтветитьУдалить