簡體   English   中英

從客戶端檢測到潛在危險的 Request.Form 值

[英]A potentially dangerous Request.Form value was detected from the client

當我嘗試發布任何包含<whatever>我得到

從客戶端檢測到有潛在危險的 Request.Form 值 描述:請求驗證檢測到有潛在危險的客戶端輸入值,請求的處理已中止。 此值可能表示嘗試危害應用程序的安全性,例如跨站點腳本攻擊。 要允許頁面覆蓋應用程序請求驗證設置,請將 httpRuntime 配置部分中的 requestValidationMode 屬性設置為 requestValidationMode="2.0"。 例子: 。 設置此值后,您可以通過在 Page 指令或配置部分中設置 validateRequest="false" 來禁用請求驗證。 但是,強烈建議您的應用程序在這種情況下明確檢查所有輸入。 有關詳細信息,請參閱http://go.microsoft.com/fwlink/?LinkId=153133

異常詳細信息:System.Web.HttpRequestValidationException:從客戶端檢測到潛在危險的 Request.Form 值

我有以下asp.net代碼

 <asp:DetailsView ID="newsDetail" runat="server" DataSourceID="SqlDataSourceNews"
                AutoGenerateRows="False" DataKeyNames="id" 
                OnItemUpdating="NewsDetailItemUpdating" OnItemCreated="NewsDetailItemCreated"
                OnItemDeleted="NewsDetailItemDeleted" OnItemInserted="NewsDetailItemInserted"
                OnItemInserting="NewsDetailItemInserting" OnItemUpdated="NewsDetailItemUpdated"
                DefaultMode="Insert">

                <Fields>
                    <asp:TemplateField FooterText="show at statpage" HeaderText="view" SortExpression="view">
                       ...
                    </asp:TemplateField>
                    <asp:BoundField DataField="headline" HeaderText="Headline" SortExpression="headline">
                    </asp:BoundField>
                    <asp:TemplateField HeaderText="Text">
                        <ItemTemplate>
                            <asp:Label ID="post" runat="Server" Text='<%# Eval("post") %>' OnPreRender="PostLabelPreRender" />
                        </ItemTemplate>
                        <InsertItemTemplate>
                            <asp:TextBox ID="postTextBox" runat="server" Text='<%# Bind("post") %>' TextMode="MultiLine"
                                Width="500px" Height="300px" />
                        </InsertItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="postTextBox" runat="server" Text='<%# Bind("post") %>' TextMode="MultiLine"
                                Width="500px" Height="300px" />
                        </EditItemTemplate>
                    </asp:TemplateField>

和代碼

    protected void NewsDetailItemUpdating(object sender, DetailsViewUpdateEventArgs e)
    {
        // Iterate though the values entered by the user and HTML encode 
        // the values. This helps prevent malicious values from being 
        // stored in the data source.
        for (int i = 0; i < e.NewValues.Count; i++)
            if (e.NewValues[i] != null)
                e.NewValues[i] = Server.HtmlEncode(e.NewValues[i].ToString());
    }

    protected void NewsDetailItemInserting(object sender, DetailsViewInsertEventArgs e)
    {
        for (int i = 0; i < e.Values.Count; i++)
            if (e.Values[i] != null)
                e.Values[i] = Server.HtmlEncode(e.Values[i].ToString());
    }

    protected void NewsDetailItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
    {
        newsList.DataBind();
    }

    protected void NewsDetailItemInserted(object sender, DetailsViewInsertedEventArgs e)
    {
        newsList.DataBind();
    }

    protected void NewsDetailItemDeleted(object sender, DetailsViewDeletedEventArgs e)
    {
        newsList.DataBind();
    }

    protected void NewsDetailItemCreated(object sender, EventArgs e)
    {
        newsList.DataBind();
    }

您遇到的問題是,您在其中一個文本框中放置了 html 標記或僅 < > 符號,而 .net 框架將其作為潛在危險腳本進行跟蹤。 這是為了防止人們在輸入字段中放置惡意腳本標簽。

您可以通過放入您的頁面指令ValidateRequest="false"來解決此問題,您還必須放入您的 web.config <httpRuntime requestValidationMode="2.0" ... />

試試這個 web.config 文件在添加或設置 httpRuntime requestValidationMode 為

<httpRuntime requestValidationMode="2.0"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM