1545

ユーザーが私のWebアプリケーションのページを含む<、またはページに何かを投稿するたびに、この例外がスローされます。>

誰かがテキストボックスに文字を入力したために、例外をスローしたり、Webアプリケーション全体をクラッシュさせたりすることの賢さについては議論したくありませんが、これを処理するためのエレガントな方法を探しています。

例外をトラップして表示する

エラーが発生しました。戻ってフォーム全体を再入力してください。ただし、今回は<を使用しないでください。

私には十分に専門的ではないようです。

事後検証(validateRequest="false")を無効にすると、このエラーは確実に回避されますが、ページは多くの攻撃に対して脆弱なままになります。

理想的には:HTML制限文字を含むポストバックが発生すると、フォームコレクションに投稿された値は自動的にHTMLエンコードされます。したがって、.Text私のテキストボックスのプロパティは次のようになりますsomething & lt; html & gt;

ハンドラーからこれを行う方法はありますか?

4

47 に答える 47

1124

投稿されたすべてのデータをエンコードしようとすることで、間違った角度から攻撃していると思います。

<" " は、データベース フィールド、構成、ファイル、フィードなど、他の外部ソースからも取得される可能性があることに注意してください。

さらに、「<」は本質的に危険ではありません。特定のコンテキストでのみ危険です: HTML 出力にエンコードされていない文字列を書き込む場合 (XSS のため)。

他のコンテキストでは、さまざまな部分文字列が危険です。たとえば、ユーザー提供の URL をリンクに書き込む場合、部分文字列 " javascript:" が危険な場合があります。一方、一重引用符は、SQL クエリで文字列を補間する場合は危険ですが、フォームから送信された名前やデータベース フィールドから読み取られた名前の一部である場合は完全に安全です。

要するに、危険な文字のランダムな入力をフィルタリングすることはできません。適切な状況下では、どの文字も危険である可能性があるからです。特定の文字が特別な意味を持つ別のサブ言語に交差するために危険になる可能性があるポイントでエンコードする必要があります。文字列を HTML に書き込むときは、Server.HtmlEncode を使用して、HTML で特別な意味を持つ文字をエンコードする必要があります。文字列を動的 SQL ステートメントに渡す場合は、さまざまな文字をエンコードする必要があります (または、準備済みステートメントなどを使用して、フレームワークにエンコードさせてください)。

文字列を HTML に渡すすべての場所で HTML エンコードを行っていることが確実な場合はファイルのディレクティブに設定ValidateRequest="false"します。<%@ Page ... %>.aspx

.NET 4 では、もう少し作業が必要になる場合があります。場合によっては<httpRuntime requestValidationMode="2.0" />、web.config にも追加する必要があります (参照)。

于 2008-09-17T11:26:23.030 に答える
524

ASP.NET MVC を使用している場合、このエラーには別の解決策があります。

C# サンプル:

[HttpPost, ValidateInput(false)]
public ActionResult Edit(FormCollection collection)
{
    // ...
}

Visual Basic のサンプル:

<AcceptVerbs(HttpVerbs.Post), ValidateInput(False)> _
Function Edit(ByVal collection As FormCollection) As ActionResult
    ...
End Function
于 2009-10-08T22:56:30.173 に答える
433

ASP.NET MVC (バージョン 3 以降) ではAllowHtml、モデルのプロパティに属性を追加できます。

プロパティのリクエスト検証をスキップすることで、モデル バインディング中にリクエストに HTML マークアップを含めることができます。

[AllowHtml]
public string Description { get; set; }
于 2011-09-05T09:33:36.187 に答える
218

.NET 4.0 を使用している場合は、タグ内のweb.configファイルにこれを追加してください。<system.web>

<httpRuntime requestValidationMode="2.0" />

.NET 2.0 では、要求の検証は要求にのみ適用されましたaspx。.NET 4.0 では、これが拡張され、すべての要求が含まれるようになりました。以下を指定して、処理時に XSS 検証のみを実行するように戻すことができます。.aspx

requestValidationMode="2.0"

以下を指定することで、リクエストの検証を完全に無効にすることができます。

validateRequest="false"
于 2010-07-30T04:51:29.697 に答える
118

ASP.NET 4.0 では、すべての要素を 1 つの要素に入れることで、サイト全体ではなく、特定のページの入力としてマークアップを許可できます<location>。これにより、他のすべてのページが安全であることを確認できます。ValidateRequest="false".aspx ページに入れる必要はありません。

<configuration>
...
  <location path="MyFolder/.aspx">
    <system.web>
      <pages validateRequest="false" />
      <httpRuntime requestValidationMode="2.0" />
    </system.web>
  </location>
...
</configuration>

マークアップを入力として許可するページをサイト レベルで確認できるため、web.config 内でこれを制御する方が安全です。

リクエストの検証が無効になっているページでは、入力をプログラムで検証する必要があります。

于 2012-11-27T17:22:15.530 に答える
73

前の回答はすばらしいものですが、HTML/JavaScript インジェクションの検証から単一のフィールドを除外する方法については誰も述べていません。以前のバージョンについてはわかりませんが、MVC3 ベータ版では次のことができます。

[HttpPost, ValidateInput(true, Exclude = "YourFieldName")]
public virtual ActionResult Edit(int id, FormCollection collection)
{
    ...
}

これにより、除外されたフィールドを除くすべてのフィールドが検証されます。これの良いところは、検証属性が引き続きフィールドを検証することですが、「潜在的に危険な Request.Form 値がクライアントから検出されました」という例外が発生しないことです。

これを正規表現の検証に使用しました。正規表現が有効かどうかを確認するために、独自の ValidationAttribute を作成しました。正規表現にはスクリプトのように見えるものを含めることができるため、上記のコードを適用しました。正規表現が有効かどうかはまだチェックされていますが、スクリプトや HTML が含まれているかどうかはチェックされていません。

于 2010-11-06T14:58:46.003 に答える
53

ASP.NET MVC では、web.config で requestValidationMode="2.0" および validateRequest="false" を設定し、コントローラー アクションに ValidateInput 属性を適用する必要があります。

<httpRuntime requestValidationMode="2.0"/>

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

[Post, ValidateInput(false)]
public ActionResult Edit(string message) {
    ...
}
于 2010-11-30T12:56:45.707 に答える
50

テキストボックスのコンテンツをHTMLエンコードすることはできますが、残念ながら、例外の発生を止めることはできません。私の経験では、回避策はなく、ページの検証を無効にする必要があります。そうすることで、あなたは「気をつけます、約束します」と言っているのです。

于 2008-09-17T11:20:03.653 に答える
43

You can catch that error in Global.asax. I still want to validate, but show an appropriate message. On the blog listed below, a sample like this was available.

    void Application_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();

        if (ex is HttpRequestValidationException)
        {
            Response.Clear();
            Response.StatusCode = 200;
            Response.Write(@"[html]");
            Response.End();
        }
    }

Redirecting to another page also seems like a reasonable response to the exception.

http://www.romsteady.net/blog/2007/06/how-to-catch-httprequestvalidationexcep.html

于 2009-10-13T22:37:18.767 に答える
43

MVC の場合、追加して入力検証を無視します

[ValidateInput(偽)]

コントローラの各アクションの上。

于 2014-01-29T09:40:05.307 に答える
35

一部の .NET コントロールは、出力を自動的に HTML エンコードすることに注意してください。たとえば、TextBox コントロールに .Text プロパティを設定すると、自動的にエンコードされます。具体的には、 、 、 、に変換すること<を意味します。だから、これを行うには用心してください...&lt;>&gt;&&amp;

myTextBox.Text = Server.HtmlEncode(myStringFromDatabase); // Pseudo code

ただし、HyperLink、Literal、および Label の .Text プロパティは HTML エンコードを行わないため、Server.HtmlEncode(); をラップします。<script> window.location = "http://www.google.com"; </script>ページに出力されてから実行されるのを防ぎたい場合は、これらのプロパティに設定されているものは必須です。

少し実験して、何がエンコードされ、何がエンコードされないかを確認してください。

于 2008-09-17T14:40:25.717 に答える
29

web.configファイルのタグ内に、属性requestValidationMode="2.0"を持つhttpRuntime要素を挿入します。また、pages要素にvalidateRequest="false"属性を追加します。

例:

<configuration>
  <system.web>
   <httpRuntime requestValidationMode="2.0" />
  </system.web>
  <pages validateRequest="false">
  </pages>
</configuration>
于 2012-03-14T22:20:43.247 に答える
24

ValidateRequest を無効にしたくない場合は、例外を回避するために JavaScript 関数を実装する必要があります。これは最良のオプションではありませんが、機能します。

function AlphanumericValidation(evt)
{
    var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode :
        ((evt.which) ? evt.which : 0));

    // User type Enter key
    if (charCode == 13)
    {
        // Do something, set controls focus or do anything
        return false;
    }

    // User can not type non alphanumeric characters
    if ( (charCode <  48)                     ||
         (charCode > 122)                     ||
         ((charCode > 57) && (charCode < 65)) ||
         ((charCode > 90) && (charCode < 97))
       )
    {
        // Show a message or do something
        return false;
    }
}

次に、コード ビハインドの PageLoad イベントで、次のコードを使用して属性をコントロールに追加します。

Me.TextBox1.Attributes.Add("OnKeyPress", "return AlphanumericValidation(event);")
于 2009-01-12T17:35:03.980 に答える
21

以下についてはまだ誰も言及していないようですが、問題は解決しました。そして、誰かがそう言う前に、それは Visual Basic です... うん。

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Example.aspx.vb" Inherits="Example.Example" **ValidateRequest="false"** %>

欠点があるかどうかはわかりませんが、私にとってはこれが驚くほどうまくいきました。

于 2012-01-27T15:01:37.053 に答える
21

別の解決策は次のとおりです。

protected void Application_Start()
{
    ...
    RequestValidator.Current = new MyRequestValidator();
}

public class MyRequestValidator: RequestValidator
{
    protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex)
    {
        bool result = base.IsValidRequestString(context, value, requestValidationSource, collectionKey, out validationFailureIndex);

        if (!result)
        {
            // Write your validation here
            if (requestValidationSource == RequestValidationSource.Form ||
                requestValidationSource == RequestValidationSource.QueryString)

                return true; // Suppress error message
        }
        return result;
    }
}
于 2013-12-08T05:39:56.990 に答える
15

フレームワーク 4.0 を使用している場合は、web.config のエントリ (<pages validateRequest="false" />)

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

フレームワーク 4.5 を使用している場合は、web.config のエントリ (requestValidationMode="2.0")

<system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" requestValidationMode="2.0"/>
</system.web>

単一ページのみが必要な場合は、aspx ファイルで最初の行を次のように配置する必要があります。

<%@ Page EnableEventValidation="false" %>

すでに <%@ Page のようなものがある場合は、残りを追加するだけです => EnableEventValidation="false"%>

しないことをお勧めします。

于 2015-12-10T07:35:47.357 に答える
14

モジュールでそれを行うことができると思います。しかし、それにはいくつかの疑問が残されています。入力をデータベースに保存したい場合はどうしますか? エンコードされたデータをデータベースに保存しているため、突然、データベースからの入力を信頼することになりますが、これはおそらく悪い考えです。理想的には、生のエンコードされていないデータをデータベースに保存し、毎回エンコードします。

ページ レベルごとに保護を無効にしてから、毎回エンコードすることをお勧めします。

Server.HtmlEncode を使用するのではなく、Microsoft ACE チームが提供する、より完全な新しいAnti-XSS ライブラリを参照する必要があります。

于 2008-09-17T11:26:53.433 に答える
14

ASP.NET では、例外をキャッチして、わかりやすいメッセージを表示したり、別のページにリダイレクトしたりできます。また、検証を自分で処理できる可能性もあります。

わかりやすいメッセージを表示:

protected override void OnError(EventArgs e)
{
    base.OnError(e);
    var ex = Server.GetLastError().GetBaseException();
    if (ex is System.Web.HttpRequestValidationException)
    {
        Response.Clear();
        Response.Write("Invalid characters."); //  Response.Write(HttpUtility.HtmlEncode(ex.Message));
        Response.StatusCode = 200;
        Response.End();
    }
}
于 2012-07-17T20:19:11.183 に答える
12

JavaScript を使用してデータをエンコードするソリューションを見つけました。これは .NET でデコードされます (jQuery は必要ありません)。

  • テキスト ボックスを ASP ではなく HTML 要素 (テキストエリアなど) にします。
  • 非表示フィールドを追加します。
  • 次の JavaScript 関数をヘッダーに追加します。

    function boo() { targetText = document.getElementById("HiddenField1"); sourceText = document.getElementById("userbox"); targetText.value = escape(sourceText.innerText); }

テキストエリアに、boo() を呼び出す onchange を含めます。

<textarea id="userbox"  onchange="boo();"></textarea>

最後に、.NET で次を使用します。

string val = Server.UrlDecode(HiddenField1.Value);

これが一方向であることは承知しています。双方向が必要な場合は工夫が必要ですが、web.config を編集できない場合はこれで解決できます。

私 (MC9000) が思いつき、jQuery 経由で使用する例を次に示します。

$(document).ready(function () {

    $("#txtHTML").change(function () {
        var currentText = $("#txtHTML").text();
        currentText = escape(currentText); // Escapes the HTML including quotations, etc
        $("#hidHTML").val(currentText); // Set the hidden field
    });

    // Intercept the postback
    $("#btnMyPostbackButton").click(function () {
        $("#txtHTML").val(""); // Clear the textarea before POSTing
                               // If you don't clear it, it will give you
                               // the error due to the HTML in the textarea.
        return true; // Post back
    });


});

そしてマークアップ:

<asp:HiddenField ID="hidHTML" runat="server" />
<textarea id="txtHTML"></textarea>
<asp:Button ID="btnMyPostbackButton" runat="server" Text="Post Form" />

これはうまくいきます。ハッカーが JavaScript をバイパスして投稿しようとすると、エラーが表示されます。このすべてのデータをエンコードしてデータベースに保存し、(サーバー側で) エスケープを解除し、解析して攻撃をチェックしてから、他の場所に表示することもできます。

于 2014-09-16T15:31:21.020 に答える
12

原因

ASP.NET は既定で、クロスサイト スクリプティング(XSS) やSQL インジェクションにつながる可能性のある、安全でない可能性のあるコンテンツのすべての入力コントロールを検証します。したがって、上記の例外をスローすることにより、そのようなコンテンツを許可しません。デフォルトでは、ポストバックごとにこのチェックを実行できるようにすることをお勧めします。

解決

多くの場合、リッチ テキスト ボックスまたはリッチ テキスト エディターを介して HTML コンテンツをページに送信する必要があります。その場合、@Pageディレクティブの ValidateRequest タグを false に設定することで、この例外を回避できます。

<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest = "false" %>

これにより、ValidateRequest フラグを false に設定したページのリクエストの検証が無効になります。これを無効にしたい場合は、Web アプリケーション全体を確認してください。web.config <system.web> セクションで false に設定する必要があります

<pages validateRequest ="false" />

.NET 4.0 以降のフレームワークでは、上記を機能させるために <system.web> セクションに次の行も追加する必要があります。

<httpRuntime requestValidationMode = "2.0" />

それでおしまい。これが上記の問題を取り除くのに役立つことを願っています。

参照元: ASP.Net エラー: 潜在的に危険な Request.Form 値がクライアントから検出されました

于 2015-06-15T06:44:17.133 に答える
10

ここでの他の解決策は素晴らしいですが、特にまともなサイズのサイトに100を超えるモデルがある場合は、すべてのモデルプロパティに [AllowHtml] を適用する必要があるのは少し面倒です。

私のように、この (IMHO はかなり無意味な) 機能をオフサイト全体で有効にしたい場合は、ベース コントローラーの Execute() メソッドをオーバーライドできます (ベース コントローラーをまだ持っていない場合は、ベース コントローラーを作成することをお勧めします。一般的な機能を適用するのに非常に便利です)。

    protected override void Execute(RequestContext requestContext)
    {
        // Disable requestion validation (security) across the whole site
        ValidateRequest = false;
        base.Execute(requestContext);
    }

ユーザー入力から来たビューに送り出されるすべてを HTML エンコードしていることを確認してください (とにかく、Razor を使用した ASP.NET MVC 3 のデフォルトの動作であるため、何らかの奇妙な理由で Html.Raw() を使用していない限り、この機能は必要ありません。

于 2012-03-16T14:34:52.413 に答える
9

私もこのエラーが発生していました。

私の場合、ユーザーはá(ASP.NETメンバーシッププロバイダーに関して)ロール名にアクセント付きの文字を入力しました。

ユーザーにそのロールを付与するメソッドにロール名を渡しましたが、$.ajaxPOSTリクエストが無残に失敗していました...

私は問題を解決するためにこれを行いました:

それ以外の

data: { roleName: '@Model.RoleName', users: users }

これを行う

data: { roleName: '@Html.Raw(@Model.RoleName)', users: users }

@Html.Rawトリックをしました。

ロール名をHTML値として取得していましたroleName="Cadastro b&#225;s"。HTMLエンティティのこの値&#225;は、ASP.NETMVCによってブロックされていました。roleNameこれで、パラメーター値を本来あるべき方法で取得できroleName="Cadastro Básico"ます。ASP.NETMVCエンジンは要求をブロックしなくなります。

于 2012-08-14T15:27:07.107 に答える
9

>、 、 などの特殊文字が本当に必要な場合は、ページ検証を無効にします<。次に、ユーザー入力が表示されるときに、データが HTML エンコードされていることを確認します。

ページの検証にはセキュリティ上の脆弱性があるため、バイパスされる可能性があります。また、ページの検証だけに頼るべきではありません。

参照: http://web.archive.org/web/20080913071637/http://www.procheckup.com:80/PDFs/bypassing-dot-NET-ValidateRequest.pdf

于 2008-09-17T11:32:43.297 に答える
8

JavaScriptのescape(string)関数を使用して、特殊文字を置き換えることもできます。次に、サーバー側はサーバーを使用します。URLDecode(string)を使用して元に戻します。

このようにすると、入力検証をオフにする必要がなくなり、他のプログラマーにとって、文字列にHTMLコンテンツが含まれている可能性があることがより明確になります。

于 2012-02-11T02:33:11.943 に答える
7

各ポストバックの前にJavaScriptを使用して、次のような不要な文字をチェックすることになりました。

<asp:Button runat="server" ID="saveButton" Text="Save" CssClass="saveButton" OnClientClick="return checkFields()" />

function checkFields() {
    var tbs = new Array();
    tbs = document.getElementsByTagName("input");
    var isValid = true;
    for (i=0; i<tbs.length; i++) {
        if (tbs(i).type == 'text') {
            if (tbs(i).value.indexOf('<') != -1 || tbs(i).value.indexOf('>') != -1) {
                alert('<> symbols not allowed.');
                isValid = false;
            }
        }
    }
    return isValid;
}

私のページはほとんどがデータ入力であり、ポストバックを行う要素はほとんどありませんが、少なくともそれらのデータは保持されます.

于 2012-08-03T15:22:12.793 に答える
6

次のようなものを使用できます。

var nvc = Request.Unvalidated().Form;

後で、nvc["yourKey"]動作するはずです。

于 2013-05-31T22:55:36.583 に答える
4

これらが"<" と ">" (二重引用符自体ではない) 文字のみであり、<input value=" this " /> のようなコンテキストで使用している限り、安全です (<textarea の場合) >これは </textarea> もちろん脆弱です)。それはあなたの状況を単純化するかもしれませんが、それ以上の場合は、他の投稿された解決策のいずれかを使用してください.

于 2008-09-17T11:28:22.807 に答える
4

カスタム Model Binder でフィールドを自動的に HTML エンコードできます。私の解決策はいくつか異なります。ModelState にエラーを入力し、フィールドの近くにエラー メッセージを表示します。このコードを自動的にエンコードするように変更するのは簡単です

 public class AppModelBinder : DefaultModelBinder
    {
        protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
        {
            try
            {
                return base.CreateModel(controllerContext, bindingContext, modelType);
            }
            catch (HttpRequestValidationException e)
            {
                HandleHttpRequestValidationException(bindingContext, e);
                return null; // Encode here
            }
        }
        protected override object GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext,
            PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder)
        {
            try
            {
                return base.GetPropertyValue(controllerContext, bindingContext, propertyDescriptor, propertyBinder);
            }
            catch (HttpRequestValidationException e)
            {
                HandleHttpRequestValidationException(bindingContext, e);
                return null; // Encode here
            }
        }

        protected void HandleHttpRequestValidationException(ModelBindingContext bindingContext, HttpRequestValidationException ex)
        {
            var valueProviderCollection = bindingContext.ValueProvider as ValueProviderCollection;
            if (valueProviderCollection != null)
            {
                ValueProviderResult valueProviderResult = valueProviderCollection.GetValue(bindingContext.ModelName, skipValidation: true);
                bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueProviderResult);
            }

            string errorMessage = string.Format(CultureInfo.CurrentCulture, "{0} contains invalid symbols: <, &",
                     bindingContext.ModelMetadata.DisplayName);

            bindingContext.ModelState.AddModelError(bindingContext.ModelName, errorMessage);
        }
    }

Application_Start:

ModelBinders.Binders.DefaultBinder = new AppModelBinder();

フォーム フィールドに対してのみ機能することに注意してください。危険な値はコントローラー モデルに渡されませんが、ModelState に格納され、エラー メッセージと共にフォームに再表示される可能性があります。

URL の危険な文字は、次の方法で処理できます。

private void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    HttpContext httpContext = HttpContext.Current;

    HttpException httpException = exception as HttpException;
    if (httpException != null)
    {
        RouteData routeData = new RouteData();
        routeData.Values.Add("controller", "Error");
        var httpCode = httpException.GetHttpCode();
        switch (httpCode)
        {
            case (int)HttpStatusCode.BadRequest /* 400 */:
                if (httpException.Message.Contains("Request.Path"))
                {
                    httpContext.Response.Clear();
                    RequestContext requestContext = new RequestContext(new HttpContextWrapper(Context), routeData);
                    requestContext.RouteData.Values["action"] ="InvalidUrl";
                    requestContext.RouteData.Values["controller"] ="Error";
                    IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
                    IController controller = factory.CreateController(requestContext, "Error");
                    controller.Execute(requestContext);
                    httpContext.Server.ClearError();
                    Response.StatusCode = (int)HttpStatusCode.BadRequest /* 400 */;
                }
                break;
        }
    }
}

エラーコントローラー:

public class ErrorController : Controller
 {
   public ActionResult InvalidUrl()
   {
      return View();
   }
}   
于 2016-02-25T08:17:06.400 に答える
4

< と > を使用しないことをユーザーに伝えたいだけの場合は、事前にフォーム全体を処理/ポストバック (およびすべての入力を失う) したくありません。それらの(そしておそらく他の潜在的に危険な)文字をスクリーニングするためのフィールドの周りのバリデーター?

于 2008-09-17T11:41:07.597 に答える
4

どの提案も私にとってはうまくいきませんでした。99% の確率で、ユーザーが Web フォームに HTML を配置したくないため、Web サイト全体でこの機能を無効にしたくありませんでした。この特定のアプリケーションを使用しているのは私だけなので、独自の回避策を作成しました。コード ビハインドで入力を HTML に変換し、データベースに挿入します。

于 2013-02-17T19:40:01.127 に答える
3

危険な入力からサイトを保護するには、Server.HtmlEncodeメソッドを使用する必要があります。

詳細はこちら

于 2008-09-17T11:21:33.230 に答える
1

使用Server.HtmlEncode("yourtext");

于 2016-04-19T14:27:05.170 に答える
0

通常のケースである.Net 4.0以降では、次の設定をsystem.webに入れます

<system.web>
     <httpRuntime requestValidationMode="2.0" />
于 2018-03-15T19:16:55.987 に答える
0

ASP.NET 4.6.2 で AjaxExtControls のこの問題を修正する方法:

AjaxExtControls リッチ テキスト エディターでも同じ問題が発生しました。この問題は、.NET 2.0 から .NET 4.5 にアップグレードした直後に発生しました。すべての SOF の回答を確認しましたが、.NET 4.5 が提供するセキュリティを損なわないソリューションを見つけることができませんでした。

修正 1 (アプリケーションのセキュリティが低下する可能性があるため、お勧めしません) : この属性を変更してテストした requestValidationMode = "2.0ところ、機能しましたが、セキュリティ機能が心配でした。したがって、この修正は、アプリケーション全体のセキュリティを低下させるようなものです。

修正 2 (推奨):この問題は AjaxExtControl の 1 つだけで発生していたため、以下の簡単なコードを使用して最終的にこの問題を解決することができました。

editorID.value = editorID.value.replace(/>/g, "&gt;");
editorID.value = editorID.value.replace(/</g, "&lt;");

このコードは、リクエストをサーバーに送信する前にクライアント側 (javascript) で実行されます。editorID は、html/aspx ページにある ID ではなく、AjaxExtControl が内部的に使用するリッチ テキスト エディターの ID であることに注意してください。

于 2020-05-06T16:33:48.407 に答える