クライアントから潜在的な危険を検出するRequert.From値--ソリューションのメモ


送信フォームに対して、XSS(クロスサイトスクリプト攻撃)の能力があるかどうかを自動的にチェックします.ユーザが入力インパクトページで結果を返そうとすると、ASP.NetのエンジンでH t t p R e q u s t ValidationExceptioin異常が発生します.
デフォルトでは、次のテキストのページが返されます.次は参照クリップです.
ServerErrorin'/YourApplicationPath'Application ApotentiallydangerousRequest.Formvaluewasdetectedfromtheclient (txtName=""). Description:RequestValidationhasdetectedapotentiallydangerousclientinputvalue,andprocessingoftherequesthasbeenaborted.Thisvaluemayindicateanattempttocompromisethesecurityofyourapplication,suchasacrosssitescriptingattack.YoucandisablerequestvalidationbysettingvalidateRequest=falseinthePagedirectiveorintheconfigurationsection.However,itisstronglyrecommendedthatyourapplicationexplicitlycheckallinputsinthiscase. ExceptionDetails:System.Web.HttpRequestValidationException:ApotentiallydangerousRequest.Formvaluewasdetectedfromtheclient(txtName=""). ....
安全を考慮せずに直接アラームをキャンセルする方法:
ソリューション1:aspxファイルヘッダにこの文を追加します.
<%@PagevalidateRequest="false"  %>

MVCではコントローラActionResultメソッドの前に[validateRequest=false]を加える
解決策2:webを修正する.config構成
<configuration>

<system.web>

<pagesvalidateRequest="false"/>

</system.web>

</configuration>

以前は上記の2つの方法で処理していたが、安全性の考慮を無視して、今日資料を調べて、新しい解決策があった.
XXS攻撃防止、安全な解決策
現在のページにPage_を追加Error()関数は、処理されていないすべてのページ処理中に発生した異常をキャプチャします.その後、ユーザーに合法的なエラーメッセージを送信します.現在のページにPage_がない場合Error()この異常はGlobalに届きます.asaxのApplication_Error()で処理し、そこに共通の異常エラー処理関数を書くこともできます.このデフォルトのエラーページは、両方に例外処理関数が書かれていない場合に表示されます.
現在のページに次の方法を追加します.
protected void Page_Error(objectsender,EventArgse)

{

Exceptionex=Server.GetLastError();

if(exisHttpRequestValidationException)

{

Response.Write("");

Server.ClearError();//   ClearError()         Application_Error()。

}

}

これによりH t t p R e q e s t ValidationException異常をキャプチャし、プログラマーの意思に応じて適切なエラーメッセージを与えることができます.
異常処理が必要な場合は、上記のような方法を書くだけでよいので、この安全特性を勝手に禁止しないほうがよい.
RichTextEditorリッチテキストコンパイラのページ処理があります.
マイクロソフトの提案によると、セキュリティ上「デフォルト禁止、明示的許可」と呼ばれる戦略を取らなければならない.
入力内容をHttpUtilityとする.HtmlEncode()コードは、HTMLタグを徹底的に禁止し、興味があり安全なタグをReplace()で置き換えます.
voidsubmitBtn_Click(objectsender,EventArgse)

{

//        ,     HTML      。

StringBuildersb=newStringBuilder(

HttpUtility.HtmlEncode(htmlInputTxt.Text));

//          <b> <i>

sb.Replace("&lt;b&gt;","<b>");

sb.Replace("&lt;/b&gt;","");

sb.Replace("&lt;i&gt;","<i>");

sb.Replace("&lt;/i&gt;","");

Response.Write(sb.ToString());

}

これにより,htmlタグの一部を許可し,不安全なタグを禁止した.
マイクロソフトが提供した提案では、これらのHTMLラベルは、サイト間スクリプト攻撃を引き起こす可能性があるため、以下のHTMLラベルを慎重に許可します.以下に、リファレンスクリップを示します.
# # # # # # # #