web-dev-qa-db-ja.com

潜在的に危険なRequest.Form値がクライアントから検出されました

この問題があります。私はすべてを試しました。 ValidateRequest = "false" ..およびhtml ..などのデコードおよびエンコードなど。

必要なのは、ユーザーがxml設定を入力し、[OK]/[キャンセル]ボタンをクリックしてポップアップを閉じて保存できるユーザーに表示するためのポップアップボックスです(ModalPopupExtenderを使用)。

ただし、「クライアントから潜在的に危険な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が表示されます。 [キャンセル]ボタンをクリックすると、エラーが発生します。誰か助けてください

25
user929153

つかいます

<httpRuntime requestValidationMode="2.0" />

web.configで(その要素が既にある場合は、その要素に既にある属性を保持します)。それ以外の場合、ASP.NET4.0はValidateRequestを無視します。

そして、もちろん、本当に危険な要求から保護するために必要な措置を講じていることを確認してください。

編集:これを行う素晴らしい方法は、RequestValidatorから派生した独自のクラスを作成し、4.0の動作を使用することですが、それをチェックするクラスとして使用します。

50
Jon Hanna

ここにあなたを助けるかもしれない解決策があります。このためにサーバー側の構成設定を行います。プロジェクトで選択したページからの入力としてHTML要素を許可する場合は、このページ属性を設定します。

<%@ Page ValidateRequest="false" %>

各ページのこのValidateRequest = "false"。プロジェクト内のすべてのページで必要な場合は、Web.Configファイルを変更します。このタグのInセクションを追加します。

.Net 4.0を使用している場合は、Web.Configファイルをもう1つ変更する必要があります。このタグのInセクションを追加します。

<httpRuntime requestValidationMode="2.0" />

.Net 4.0のすべてのページのリクエストを検証しないための設定は次のとおりです。

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

これの完全な例を次に示します。 ここをクリック...

29
Jayesh Sorathia

まあ、人々はAsp.net 4.0についてのみ話している...他のバージョンにも対処する必要があると思う。今日、AjaxToolkitエディターをTinyMCEに置き換えたときに同じ問題が発生し、ポストバックで同じ問題が見つかりました。

「クライアントから潜在的に危険なRequest.Form値が検出されました」..

そこで、この行をwebconfig内で使用しましたが、うまくいきました。

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

Asp.net 2.0〜3.5で動作するはずです。

PDATE: .net 4.5まで動作します

PDATE: Webサイト全体ではなく、ページレベルでリクエストを検証することもできます。読者が最良の方法を選択できるようにしたかっただけです。これを指摘してくれたDVDに感謝します。

5
KMX

ArticleId列とarticle_content列を持つテーブルアーティクルを作成しました。 article_content列にもhtmlエディターを使用しました。保存しようとしたときに同じエラーが発生しました。 [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

1
Mohamed Rasik

必要に応じて、サーバーに送信する前にJavaScriptを使用して値をエンコードできます

この回答 を参照

0
Peter Kerr

このエラーを削除するには、3つのオプションがあります。

  1. ページディレクティブでvalidateRequest="false"を設定します。
  2. Web.configファイルでvalidateRequest="false"を設定します。
  3. DotNet 4.0を使用している場合、web.configでrequestValidationMode="2.0"を設定します

チェックアウト このリンク 詳細については。

0
user193887

Aspxページからコードビハインドにいくつかのメールテンプレートを送信しているときに、この同じ問題に直面しました。

だから私は追加してこれを解決しようとしました

 <httpRuntime requestValidationMode="2.0" />

私のウェブ設定のenter code here`しかし、それは私がパットしない限り、私を助けませんでした

ValidateRequest="false"

aspxページのページディレクティブのattrribute。

0
Tapan kumar

「クライアントから潜在的に危険なRequest.Form値が検出されました。」.

1)httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\" in 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>
0
shrikant.Shukla