クライアントから潜在的な危険を検出するRequert.From値--ソリューションのメモ
6046 ワード
送信フォームに対して、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ファイルヘッダにこの文を追加します.
MVCではコントローラActionResultメソッドの前に[validateRequest=false]を加える
解決策2:webを修正する.config構成
以前は上記の2つの方法で処理していたが、安全性の考慮を無視して、今日資料を調べて、新しい解決策があった.
XXS攻撃防止、安全な解決策
現在のページにPage_を追加Error()関数は、処理されていないすべてのページ処理中に発生した異常をキャプチャします.その後、ユーザーに合法的なエラーメッセージを送信します.現在のページにPage_がない場合Error()この異常はGlobalに届きます.asaxのApplication_Error()で処理し、そこに共通の異常エラー処理関数を書くこともできます.このデフォルトのエラーページは、両方に例外処理関数が書かれていない場合に表示されます.
現在のページに次の方法を追加します.
これによりH t t p R e q e s t ValidationException異常をキャプチャし、プログラマーの意思に応じて適切なエラーメッセージを与えることができます.
異常処理が必要な場合は、上記のような方法を書くだけでよいので、この安全特性を勝手に禁止しないほうがよい.
RichTextEditorリッチテキストコンパイラのページ処理があります.
マイクロソフトの提案によると、セキュリティ上「デフォルト禁止、明示的許可」と呼ばれる戦略を取らなければならない.
入力内容をHttpUtilityとする.HtmlEncode()コードは、HTMLタグを徹底的に禁止し、興味があり安全なタグをReplace()で置き換えます.
これにより,htmlタグの一部を許可し,不安全なタグを禁止した.
マイクロソフトが提供した提案では、これらのHTMLラベルは、サイト間スクリプト攻撃を引き起こす可能性があるため、以下のHTMLラベルを慎重に許可します.以下に、リファレンスクリップを示します.
#
デフォルトでは、次のテキストのページが返されます.次は参照クリップです.
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("<b>","<b>");
sb.Replace("</b>","");
sb.Replace("<i>","<i>");
sb.Replace("</i>","");
Response.Write(sb.ToString());
}
これにより,htmlタグの一部を許可し,不安全なタグを禁止した.
マイクロソフトが提供した提案では、これらのHTMLラベルは、サイト間スクリプト攻撃を引き起こす可能性があるため、以下のHTMLラベルを慎重に許可します.以下に、リファレンスクリップを示します.
#