だるろぐ

明日できることは、今日しない。

WebMatrix 3:危険な可能性のある Request.Path 値がクライアント (:) から検出されました。

f:id:daruyanagi:20130420223145p:plain

WebMatrix 3: フィードの購読者数を取得する(1:サーバーサイド編) - だるろぐ の補足。

http://localhost:11330/FeedCount/https://blog.daruyanagi.jp/

このような URL を受け取ると、

危険な可能性のある Request.Path 値がクライアント (:) から検出されました。

というエラーが出てしまいます。これは ASP.NET のセキュリティ機能のようですね。ただ、自分は Web 系のセキュリティにあまり詳しくないので、これがどのように悪用できるのかさっぱりわからないのですが……(SQLインジェクションかなにかかなぁ?)。いい本をご存知でしたら、どなたか教えてください。

とりあえず、今回はこれを解除してしまいます。あとは自己責任で……

Web.config を編集する

<?xml version="1.0" encoding="utf-8"?>

<configuration>
  <system.web>
    <httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,\,?" />
</system.web>
</configuration>

<httpRuntime> の部分を追加すると動きます。

f:id:daruyanagi:20130421142059p:plain

当該部分をコメントアウトするとエラーが発生します。

f:id:daruyanagi:20130421142128p:plain

RequestPathInvalidCharacters プロパティ

f:id:daruyanagi:20130421142432p:plain

HttpRuntimeSection.RequestPathInvalidCharacters プロパティは ASP.NET 4 から追加されたもので(たぶん)、指定された文字が含まれたパスに含まれていないか検証します。初期値は、

<,>,*,%,&,:,\,?

です(コンマ区切り)。Web.config で指定する場合は実態参照にしないと正しい XML にならないので注意。

ASP.NET 2.x → ASP.NET 4.x の間ではセキュリティの強化もあるらしくて、昔から馴染んでる人にとっては地雷みたいですね。

RequestValidationMode プロパティは、どの ASP.NET アプローチを検証に使用するかを指定します。 これは、ASP.NET 4.0 より前のバージョンまたは .NET Framework 4 で使用されているバージョンで使用されているアルゴリズムである場合もあります。 プロパティは次の値に設定できます。

  • 4.0 (既定値)。 HttpRequest オブジェクトは、HTTP 要求データがアクセスされるたびに要求の検証が発生する必要があることを示すフラグを内部的に設定します。 これにより、クッキーなどのデータの前に要求の検証がトリガーされ、URL が要求時にアクセスされることが保証されます。 構成ファイルの pages 要素 (存在する場合) と個々のページの @ Page ディレクティブの要求検証設定は、無視されます。
  • 2.0. 要求検証は、ページに対してのみ有効です。すべての HTTP 要求に対して有効ではありません。 さらに、構成ファイルの pages 要素 (存在する場合) と個々のページの @ Page ディレクティブの要求検証設定は、検証対象のページ要求を決定するのに使用されます。

このプロパティに割り当てる値は、ASP.NET の特定のバージョンと一致するように検証されていません。 4.0 より小さい数値 (たとえば、 3.7、2.9、2.0) は、2.0 として解釈されます。 4.0 より大きい数値は、4.0 として解釈されます。

HttpRuntimeSection.RequestValidationMode Property (System.Web.Configuration) | Microsoft Docs

逆に言えば、それだけ安心になっているということなのですが。