1. ホーム
  2. c#

[解決済み] クライアントから危険な可能性のあるRequest.Pathの値が検出されました(*)

2022-01-31 05:24:54

質問

というエラーが表示されます。

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

この問題は、以下の原因によるものです。 * をリクエスト URL に追加してください。

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

このURLは、'test*'が検索用語で、残りのURLは他の様々なフィルタに関連する検索ページを生成するために使用されます。

URLにこれらの特殊文字を許可する簡単な方法はありますか?私は web.config を、無駄にする。

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

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

解決方法は?

その * 文字は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");