質問者
HttpRequestValidationExceptionを引き起こすケースについて

質問
-
ASP .NETを使用したWebアプリケーションを開発、使用しています。
サーバにWindows Server 2008+SQL Server 2008 Expressを使用していた時は、
フォームに "&#"や "<NA>"といった文字列を使用することができていましたが、今回サーバを更新してWindows Server 2016+SQL Server 2014 Expressに変更したところ
HttpRequestValidationException例外を引き起こすようになり、
アプリケーションからDBへの登録ができない、エラー画面が出るといった不具合が発生するようになりました。
web.configの設定は変更しておらず、
<pages validateRequest=”false” /> の設定も入れていません。
このような現象が発生するのは、サーバ または データベースの変更が原因なのでしょうか?
また、スクリプトなどの危険な文字列の入力を禁止したいのですが、
どのような文字列を入れてはいけないのか、例などはありますでしょうか?
- 編集済み mate_gai 2019年12月13日 7:27
すべての返信
-
以下の記事に書いてある話ではないのでしょうか?
ASP.NET 4 の要求の検証
http://surferonwww.info/BlogEngine/post/2012/02/19/ASPNET-4-Request-Validation.aspx -
mate_gaiさん、こんにちは。フォーラムオペレーターのHarukaです。
MSDNフォーラムにご投稿くださいましてありがとうございます。
>このような現象が発生するのは、サーバ または データベースの変更が原因なのでしょうか?
→はい、これは2008バージョンでは検証されません。これは新しい機能です。
>危険な可能性のあるRequest.Form値が検出されました。
→このエラーは、入力されたテキスト内で HTML ステートメントのように見えるものが .NET によって検出されたためです。
validateRequest =” false”を設定したくない場合は、TextBoxに値を割り当てるとき、HTML.Encodeメソッドを使用してみてください。
このメソッドは、安全でない可能性のある文字をHTMLエンコードされた同等の文字に変換します。
HTML.Encodeの詳細については、次のリンクを参照してください。
https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms525347(v=vs.90)?redirectedfrom=MSDN
どうぞよろしくお願いいたします。MSDN/ TechNet Community Support Haruka
~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~ -
Haruka6002 さん>
> →はい、これは2008バージョンでは検証されません。これは新しい機能です。
それ、間違っていると思いますよ。何を根拠にそう言ってますか?
念のため、自分の開発環境の Visual Studio 2008 Pro ASP.NET 3.5 で以下の単純なソースで確認しましたが、
TextBox に <NA> と入力してポストバックすると、以下の通り質問者さんと同じエラーを再現できます。
Microsoft の人の発言は重いですよ。何か根拠があれば、それを裏付ける Microsoft の公式文書を提示していただけますか。
- 編集済み SurferOnWww 2019年12月17日 13:54
-
> Visual Studio 2008 でなくて Windows Server 2008 の話では?
どちらにも直接の関係はありません。
サポートしている ASP.NET の問題で、ASP.NET 2.0 以降であれば要求の検証はデフォルトで有効です。
Haruka6002 さんが書かれた、
> >このような現象が発生するのは、サーバ または データベースの変更が原因なのでしょうか?
> →はい、これは2008バージョンでは検証されません。これは新しい機能です。が何を意味しているのかイマイチはっきりしませんが、何にせよ Visual Studio または Windows Server のバージョンとは関係なくて、ASP.NET 2.0 以降であれば上の私のレスに書いたようにエラーとなるということです。
私の一番最初のレスで紹介した記事にある通り、ASP.NET 3.5 以前と ASP.NET 4 以降では違いがありますが、それは機能の強化であって、要求の検証の機能自体は ASP.NET 2.0 からデフォルトで有効です。
-
> たしか 3.5 で ASP.NET に改修が入っているので 3.5 が入っている今の OS では、動作が違っている可能性があります。
ASP.NET 2.0, 3.0, 3.5 で要求の検証に関する動作が違うと言ってます? 何を根拠に?
自分は Windows Server 2008 は持っていませんで調べることはできませんし、ASP.NET 2.0 ~ 3.5 で違いがあるとは思ってませんので 2.0, 3.0 では検証していませんが、違いがあると思われるのであれば KOZ6.0 さんの方で検証して結果を教えていただけると幸いです。
- 編集済み SurferOnWww 2019年12月19日 2:02 追記
-
> mate_gai さんの 2008 Server に入っている .NET と、SurferOnWww さんの検証環境に入っている .NET とでは動きが違っているかもしれないと言っています。
それはあなたが「違っているかもしれない」と想像しただけですよね。
私も、「mate_gai さんの 2008 Server」上で検証できない以上、その部分は想像するしかないですが、質問の状況から私が想像したことを裏付ける Microsoft の文書はあって、それは私の一番最初のレスで紹介した記事のとおりです。
> 事実、違っていたのでは?
何が違っていたと言ってますか?
質問者さんは私の最初のレスで紹介した記事を読んで、以下の通りフィードバックを返しており、結局は私が紹介した記事の内容に納得していると思いますけど。
> まさにこの状況で、以前のサーバではクロスサイトスクリプティング対策がされていなかったのだと思っています。requestValidationModeの設定を変えるか、例外発生を捉えて別ページに飛ばすか、検討したいと思います。 -
> 私は、2008 は Server のことでしょうし、否定するための材料としては弱いのではないかと述べているだけです。
決して弱くはないと思います。何故弱いと思うのですか? 何と比較して弱いのですか? そう言われる理由が分かりませんが。
私のレスの内容が間違っている場合の指摘は有り難いですが、それなら間違っているという根拠を具体的に書いていただければと思います。
2008 が Windows Server を意味していようと、Visual Studio を意味していようと、2008 年を意味していようと、その他何を意味していようと ASP.NET の「要求の検証」とは直接関係ありません。
Haruka6002 さんは「新しい機能」と書かれてますが、ASP.NET の「要求の検証」は ASP.NET 1.1 から利用できるようになった機能ということで決して新しくはないです。
先のレスではオブラートに包んだ言い方にしましたが、はっきり言わせてもらえれば、
> →はい、これは2008バージョンでは検証されません。これは新しい機能です。
完全に間違ってます。
ちなみに、その後の Haruka6002 さんのレス、
> validateRequest =” false”を設定したくない場合は、TextBoxに値を割り当てるとき、HTML.Encodeメソッドを使用してみてください。
もピント外れです。ASP.NET Web Forms アプリのことを分かって言っているとは思えません。
なので、このスレッドの閲覧者がフォーラムオペレータのレスということで頭から信じてしまわないようにコメントしたというのが上の私のレスです。