2

ユーザーが次のようにクエリを送信できるようにする必要があります。

/search/"my search string"

しかし、次の 2 つの質問で概説されているように、リクエストの検証が原因で失敗しています。

ルートパラメータとして引用符を含める方法は? 「パスに不正な文字があります」というメッセージが表示される

リクエストの検証を変更するには?

現在、引用文字のリクエスト検証を無効にする方法を見つけようとしていますが、これを無効にして実際にサイトを公開する前にリスクを知りたいですか? 引用文字に対してのみ無効にできない限り、リクエストの検証を無効にすることはありません。そのため、現在許可されていない他のすべての文字を禁止するつもりです。

4

1 に答える 1

3

URIの一般的な構文仕様(RFC 2396)によると、二重引用符は明示的に除外され、エスケープする必要があります(つまり%22)。セクション2.4.3を参照してください。仕様に記載されている理由:

山かっこ"<"および">"と二重引用符( ")文字は、テキストドキュメントおよびプロトコルフィールドのURIの区切り文字としてよく使用されるため、除外されます。

これが当てはまる理由を簡単に理解できます。HTMLでURLへのリンクを作成しようとしていると想像してみてください。

<a href="http://somesite/search/"my search string""/>

これはHTMLの解析に失敗します(また、SOの構文の強調表示も壊れます)。また、URLを誰かに電子メールで送信する(電子メールクライアントはURLを正しく解析しない)、掲示板に投稿する、インスタントメッセージで送信するなど、URLを使用して基本的なことを行うのに問題があります。

価値があるので、スペースも明示的に除外されます(RFCの同じセクションで理由が説明されています)。

于 2010-11-02T12:28:06.257 に答える