Подтвердить что ты не робот

Потенциально опасное значение Request.Form было обнаружено у клиента

У меня есть эта проблема. Я все пробовал. ValidateRequest = "false".. и декодирование и кодирование html.. и т.д. И т.д.

Мне нужно всплывающее окно (так что я использую ModalPopupExtender), чтобы представить пользователю, где люди могут ввести настройки xml, и нажмите кнопку ok/cancel, чтобы закрыть всплывающее окно и сохранить.

Однако я продолжаю получать эту ошибку "От клиента было обнаружено потенциально опасное значение Request.Form".

Вот мой тестовый код ниже (быстрый пример моего сценария и ошибки).

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1"
    ValidateRequest="false" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <asp:Panel ID="Popup" runat="server" Width="800px" Style="display: none;">
            <asp:LinkButton ID="Display" runat="server" Style="display: none;" OnClick="Display_Click" />
            <cc1:ModalPopupExtender ID="ModalPopupExtender" runat="server" TargetControlID="Display"
                PopupControlID="Popup" DropShadow="false" Y="10" />
            <div id="Item">
                <div class="Item">
                    <table width="100%">
                        <tr>                                
                            <td>
                                <textarea id="txtAreaValue" cols="35" rows="6" style="resize: none;" runat="server" />
                            </td>
                        </tr>
                        <tr>                                
                            <td>
                                <asp:Button ID="btnOk" Text="Ok" SkinID="default" Width="50px" runat="server" />
                                <asp:Button ID="btnCancel" Text="Cancel" SkinID="default" Width="50px" OnClick="BtnCancel_Click"
                                    runat="server" />
                            </td>
                        </tr>
                    </table>
                </div>
            </div>
        </asp:Panel>
    </div>
    </form>
</body>
</html>

Код за:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ModalPopupExtender.Show();
            string str = "<?xml version=\"1.0\" encoding=\"utf-8\"?><XmlConfig xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"> <XmlConfig Type=\"TEST\" DefiningXpath=\"/PERSON/NAME\"><Index Name=\"Name\" XPath=\"/PERSON/NAME/VALUE\" Type=\"String\" /><Index Name=\"Id\" XPath=\"/PERSON/NAME/ID\" Type=\"String\" /> </XmlConfig></XmlConfig>";

            txtAreaValue.InnerText = str;
        }

        protected void Display_Click(object sender, EventArgs e)
        {
            //Shows the Item detail Edit box
            ModalPopupExtender.Show();
        }

        protected void BtnCancel_Click(object sender, EventArgs e)
        {
            ModalPopupExtender.Hide();
        }
    }
}

Чтобы запустить код.. Добавьте ref в AjaxControltoolkit.dll, а затем запустите, и вы увидите, что в textarea заполняется xml. Нажмите кнопку отмены, и это приведет к ошибке. Пожалуйста, помогите мне?

4b9b3361

Ответ 1

Использование

<httpRuntime requestValidationMode="2.0" />

в вашем web.config(сохраняя любые атрибуты, которые у вас уже есть на этом элементе, если он уже существует). ASP.NET4.0 игнорирует ValidateRequest в противном случае.

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

Изменить: отличный способ сделать это - создать свой собственный класс, полученный из RequestValidator, и использовать поведение 4.0, но с этим как класс, выполняющий проверку.

Ответ 2

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

<%@ Page ValidateRequest="false" %>

Это значение ValidateRequest = "false" на каждой странице. Если вы хотите, чтобы на всех страницах проекта вы вносили изменения в файл Web.Config. Добавьте этот тег В разделе.

Если вы используете .Net 4.0, вам нужно сделать еще одно изменение в файле Web.Config. Добавьте этот тег В разделе.

<httpRuntime requestValidationMode="2.0" />

Вот конфигурация для не проверять запрос для всех страниц в .Net 4.0

<configuration>
  <system.web>
     <httpRuntime requestValidationMode="2.0" />
  </system.web>
  <pages validateRequest="false">
  </pages>
</configuration>

Вот полный пример. Нажмите здесь...

Ответ 3

Ну, люди говорят только о Asp.net 4.0... Думаю, нам нужно также обратиться к другим версиям. Сегодня у меня была такая же проблема, когда я заменил свой редактор AjaxToolkit TinyMCE, и после обратной передачи я нашел ту же проблему.

"От клиента было обнаружено потенциально опасное значение Request.Form".

Итак, я использовал эту строку внутри своего webconfig, и это сработало для меня.

<system.web>
    <pages validateRequest="false" />
</system.web>

Он должен работать через Asp.net 2.0 до 3.5.

ОБНОВЛЕНИЕ: Даже работает до .net 4.5

ОБНОВЛЕНИЕ:. Вы также можете попытаться проверить запрос на странице всего сайта целиком. Просто хотел, чтобы читатели выбрали лучший способ. Спасибо DVD за это.

Ответ 4

Я создал таблицу со столбцами articleId и article_content. Я также использовал html-редактор для столбца article_content. Когда я попытался сэкономить, я получил ту же ошибку. Он был разрешен путем добавления [AllowHtml] к свойству article_content в классе.

 [AllowHtml]
 [Required]
 public string article_content { get; set; }

Не забудьте включить пространство имен с помощью System.Web.Mvc. Для получения дополнительной информации: http://www.infinetsoft.com/Post/A-potentially-dangerous-Request-Form-value-was-detected-from-the-client/1246

Ответ 5

Есть 3 варианта удаления этой ошибки.

  • Задайте validateRequest="false" в директивах страницы.
  • Установите validateRequest="false" в файле web.config.
  • Установите requestValidationMode="2.0" в web.config, если вы используете DotNet 4.0

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

Ответ 6

"От клиента было обнаружено потенциально опасное значение Request.Form".

1) установите httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\" в web.config файл

2) установите validateRequest="false" в тег боковых страниц в файле web.config

<system.web>
    <httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\"/>
 <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" validateRequest="false"/>
<system.web>

Ответ 7

Я столкнулся с этой же проблемой при отправке некоторых шаблонов электронной почты из страницы aspx в код позади....

Поэтому я попытался решить эту проблему, добавив

 <httpRuntime requestValidationMode="2.0" />

в моей веб-конфигурации под enter code here `, но это не помогло мне, если я не поставил

ValidateRequest="false"

attrribute в директиве страницы страницы aspx.

Ответ 8

Вы можете использовать JavaScript для кодирования значений перед отправкой на сервер, если это соответствует вашим потребностям

см. этот ответ