クライアント(...)から潜在的危険性を検出したRequest.Form値の処理方法

1827 ワード

クライアントから潜在的な危険性があると検出されたRequest.Form値は.netでRequestにHTMLやJavascriptなどの文字列がある場合、システムは危険性値とみなされます.すぐに上のエラーを報告します.
例えば、ウェブページのTextBox 1にHTMLコードを入力して、ボタンをクリックしたらエラーが発生します.解決策:
ソリューション1:
aspxファイルのヘッダにこの文を追加します.
<%@ Page validateRequest="false"  %>
ソリューション2:
web.co nfigファイルを変更:
<configuration> 
  <system.web> 
   <httpRuntime requestValidationMode="2.0" />
   <pages validateRequest="false" />
  </system.web> 
</configuration>
validateRequestのデフォルト値はtrueです.falseに設定すればいいです.
ソリューション3:
もちろん、このようにするのはインターフェースをきれいにするだけです.注入を抵抗するには、フィルタリングから十分な工夫をしなければなりません.その後、validateRequestを禁止しない方法があります.次のようにvalidateRequest=falseを禁止しません.正しいやり方は現在のページにPage_を追加することです.Errer()関数は、すべてのページ処理中に発生した異常なしに捕獲される.その後、ユーザーに合法的なエラーメッセージを送る.現在のページにPage_がない場合Error()は、この異常をGlobal.asaxのAppplicationに送ります.Err()で処理します.そこには共通の異常エラー処理関数が書いてあります.両方とも異常処理関数が書かれていないと、このデフォルトのエラーページが表示されます.例えば、この異常を処理するには、短いコードだけで十分です.ページのCode-behindページにこのようなコードを追加します.以下は参照フラグメントです.
protected void Page_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        if (ex is HttpRequestValidationException)
        {
            Response.Write("         。");
            Server.ClearError(); //    ClearError()         Application_Error()。
        }
 }
ソリューション4:
Global.asaxファイルのApplication_Errer()は処理に来る.このようにホームページ全体で有効です.
void Application_Error(object sender, EventArgs e)
    {
        //                
        Exception ex = Server.GetLastError();
        if (ex is HttpRequestValidationException)
        {
            Response.Write("         。");
            Server.ClearError(); //    ClearError()         Application_Error()。
        }
    }