web-dev-qa-db-ja.com

クライアントから潜在的に危険なRequest.Path値が検出されました(*)

私はやや自明のエラーを受けています。

クライアントから潜在的に危険なRequest.Path値が検出されました(*)。

問題はリクエストURLの*が原因です。

https://stackoverflow.com/Search/test*/0/1/10/1

このURLは、「test *」が検索語で、残りのURLが他のさまざまなフィルタに関連する検索ページに入力するために使用されます。

URLでこれらの特殊文字を許可する簡単な方法はありますか?私はweb.configを無駄に変更しようとしました。

特殊文字を手動でエンコード/デコードする必要がありますか?または、これを行うためのベストプラクティスがありますか、私はクエリ文字列を使用しないようにしたいと思います。 - しかしそれはオプションかもしれません。

アプリケーション自体は、ルーティングを使用して上記のNice URLを生成するc# asp.net webformsアプリケーションです。

198
user336245

*文字はURLのパスには使用できませんが、クエリ文字列で使用しても問題ありません。

http://localhost:3286/Search/?q=test*

これはエンコーディングの問題ではありません、*文字はURLの中で特別な意味を持たないので、あなたがそれをURLエンコードしてもしなくても問題ありません。別のスキームを使ってそれをエンコードしてからデコードする必要があります。

たとえば、エスケープ文字として任意の文字を使用します。

query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy");

そしてデコード:

query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x");
91
Guffa

.NET 4.0を使用している場合は、web.configを介してこれらのURLを許可できるはずです。

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

注意、アスタリスク(*)を削除したところです。元のデフォルトの文字列は次のとおりです。

<httpRuntime 
          requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?" />

詳細については この質問 をご覧ください。

295
Dave Transom

経路値をエンコードしてから(必要に応じて)検索前に値をデコードする必要があります。

5
Tejs

私のために、私はWeb API 2.0で.net 4.5.2に取り組んでいます、私は同じエラーがあります、私はrequestPathInvalidCharacters = ""をrequestPathInvalidCharactersに追加することによってそれを設定しますこの問題を引き起こします。

<system.web>
     <httpRuntime targetFramework="4.5.2" requestPathInvalidCharacters="" />
     <pages  >
      <namespaces>
     ....
 </namespaces>
    </pages> 
  </system.web>

**これは良い習慣ではないことに注意してください。オブジェクトの属性が優れているか、特殊文字をエンコードするようにしてください。 - 残りのapiを設計するためのベストプラクティスを検索した後、検索、ソート、およびページネーションで、次のようなクエリパラメータを処理する必要があることがわかりました。

/companies?search=Digital%26Mckinsey

これにより、&をエンコードしてURL上のいずれかの方法で%26で置き換えたときに、サーバー上で正しいパラメーターDigital&Mckinseyを受け取ることで問題が解決します。

このリンクは残りのWeb APIの設計のベストプラクティスに役立つかもしれません https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9

4
MNF

WebプロジェクトのサーバープロパティをIIS Expressの場合はLocal IISに設定します。プロジェクトのURLが正しいかどうかを確認し、仮想ディレクトリを作成します。

0
Burk

Uniform Resource Locator(URL)を扱うときには 構文標準 がありますが、この特定の状況では予約文字を扱います

RFC 3986 まで、予約文字は、一般的な構文、各方式固有の構文、またはURIの間接参照アルゴリズムの実装固有の構文また、アスタリスク(*)は予約文字です。

ベストプラクティスは、URLに 予約されていない文字 を使用することです。または、エンコードしてみることもできます。

掘り下げてください:

0

この例外は私のアプリケーションで発生し、やや誤解を招きました。

JSON配列オブジェクトを渡して、ajaxメソッド呼び出しを使用して.aspxページのWebメソッドを呼び出すときにスローされました。 Webページのメソッドシグネチャには、厳密に型指定された.NETオブジェクトOrderDetailsの配列が含まれていました。 Actual_Qtyプロパティはintとして定義され、JSONオブジェクトのActual_Qtyプロパティには "4"(余分なスペース文字)が含まれていました。余分なスペースを削除した後、変換が可能になり、Web Pageメソッドがajax呼び出しによって正常に到達しました。

0
Bertha

私にとっては、URLを入力するときに、ユーザーが誤って/ではなく/を使用しました。クエリパラメータを開始するには

例えば。:

url.com/endpoint/parameter=SomeValue&otherparameter=Another+value

あるべきだった:

url.com/endpoint?parameter=SomeValue&otherparameter=Another+value

0
trykyn