3

MVC アプリケーションのセキュリティを確認しようとしています。HTML または JavaScript を入力しようとすると、次のエラーが表示されます:潜在的な危険な要求。

Server Error in '/' Application.
A potentially dangerous Request.Form value was detected from the client (TEKST="<html><b>joo</b></ht...").
Description: Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted. This value may indicate an attempt to compromise the security of your application, such as a cross-site scripting attack. To allow pages to override application request validation settings, set the requestValidationMode attribute in the httpRuntime configuration section to requestValidationMode="2.0". Example: <httpRuntime requestValidationMode="2.0" />. After setting this value, you can then disable request validation by setting validateRequest="false" in the Page directive or in the <pages> configuration section. However, it is strongly recommended that your application explicitly check all inputs in this case. For more information, see http://go.microsoft.com/fwlink/?LinkId=153133.

Exception Details: System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client (TEKST="<html><b>joo</b></ht...").

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

これは良さそうですが、HTML や JavaScript を挿入することはできません。しかし、私が気に入らないのは、ユーザーが私のバージョンの ASP.net とすべてを表示することです。

どうすればこのエラーを取り除き、次のようなメッセージを表示できますか: I don't like your input など。

私はこれをやろうとしましたが、これはうまくいきません:

[Authorize]
public ActionResult Create(int album_id)
{
    ViewBag.album_id = album_id;
    return View();
}

[Authorize]
[HttpPost]
public ActionResult Create(REVIEW model)
{
    string txt = null;
    try
    {
        txt = model.TEKST;
    }
    catch (System.Web.HttpRequestValidationException)
    {
        txt = "errorrr";
    }


    return RedirectToAction("Add", new { tekst = txt, album_id=model.ALBUM_ID});
}

解決策:Nudierの回答を参照してください

4

1 に答える 1

4

次の方法でアプリケーション内のエラーを処理できます

1.アプリケーションの Web.Config ファイルで CustomErros モード セクションを設定する

これは、mode 属性が受け入れることができるオプションのリストです。

RemoteOnly:リモート ユーザーに対して一般的なエラー ページが表示されます。ローカル要求 (現在のコンピューターから行われた要求) については、豊富なエラー ページが表示されます。これがデフォルト設定です。

オフ:リクエストのソースに関係なく、すべてのユーザーに対して豊富なエラー ページが表示されます。この設定は、多くの開発シナリオで役立ちますが、展開されたアプリケーションでは使用しないでください。

オン:要求のソースに関係なく、すべてのユーザーに対して一般的なエラー ページが表示されます。これは最も安全なオプションです。

     <System.Web>
      //map all the erros presented in the application to the error.aspx webpage
     <customErrors mode="RemoteOnly" defaultRedirect ="~/error.aspx" />
    <System.Web>

2. Application_Error 関数で Global.asax ファイルを介して

     //handle all the errors presented in the application
      void Application_Error(object sender, EventArgs e){  
     Server.Tranfer("error.aspx");
    }

これがうまくいくことを願っています。

于 2012-06-17T16:35:46.740 に答える