概要
「危険な可能性のある Request.From値がクライアント(TextBoxコントロール)=(無効な値)から検出されましたエラー」または、
「危険な可能性のある Request.QueryString 値がクライアント ([パラメーター]=[無効な値]) から検出されました。 」の対策方法を紹介します。
現象
ASP.NETアプリケーションで、次のエラーメッセージが表示されます。
よくあるケースでは、テキストボックスの中に"<"文字を入れて、ボタンコントロールをクリックしてポストバックやリダイレクトをした場合に発生します。
エラーメッセージ
危険な可能性のある Request.Form 値がクライアント (TextBoxコントロール)=(無効な値) から検出されました。
エラーメッセージ
危険な可能性のある Request.QueryString 値がクライアント ([パラメーター]=[無効な値]) から検出されました。
原因
テキストボックスコントロールやURLのパラメーターに<文字が入ることによりHTMLタグの入力を受け付けてしまうため、セキュリティの脆弱性(javascriptのコードやインラインフレームのコードをポストできてしまう)が発生するため、デフォルトの設定ではエラーが発生します。
対策
以下の対策があります。
対策1:入力フォームに<を入力しないで済む仕様にする
HTMLタグを入力する必要があるときに<文字ではなく別のマクロコードを使う方法("{"文字を<とみなす)や、あらかじめ決められたタグをマクロ化しておく("~"を"<BR/>とみなす)方法があります。
対策2:<を入力してもエラーにならない設定に変える
<を入力した場合にアプリケーション側で独自に検証をする場合は以下の設定を変更します
複数のWebフォームで"<"が送信される可能性がある場合
Web.configファイルの<system.web>セクションに以下の記述を追加します。
<httpRuntime requestValidationMode="2.0" />
例
<system.web>
<compilation debug="true" targetFramework="4.0">
</compilation>
<httpRuntime requestValidationMode="2.0" />
<authentication mode="Windows"/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>
また、<文字が送信されるWebフォーム画面のPageディレクティブに次のコードを追加します。
例
<%@ Page Title="" Language="C#" MasterPageFile="~/SiteManage.Master"
validateRequest="false" AutoEventWireup="true" CodeBehind="ConvertUtil.aspx.cs"
Inherits="iPentecDocument.manage.ConvertUtil" %>
特定のページのみで"<"が送信される可能性がある場合
Web.configファイルの<location path="(Webフォームファイル名)">内の<system.web>セクションに以下の記述を追加します。
<httpRuntime requestValidationMode="2.0" />
例
<configuration>
<appSettings>
</appSettings>
<system.web>
....(system.webの設定内容)
</system.web>
<location path="manage/ConvertUtil.aspx">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
</configuration>
また、<文字が送信されるWebフォーム画面のPageディレクティブに次のコードを追加します。
例
<%@ Page Title="" Language="C#" MasterPageFile="~/SiteManage.Master"
validateRequest="false" AutoEventWireup="true" CodeBehind="ConvertUtil.aspx.cs"
Inherits="iPentecDocument.manage.ConvertUtil" %>
以上の設定を追加すると、textBoxコントロールなどを使ったWebフォームで<文字を送信した場合でもエラーが発生しません。ただしアプリケーション側で入力文字の検証をする必要があります。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2021-08-24
作成日: 2011-01-17