2

リクエストがあります。ブラウザのアドレス バーに次のように入力します。

http://localhost:8888/cmens-tops-outwear/t-b-f-a-c-s-fLoose-p-g-e-i-o.htm?'"--></style></script><script>netsparker(0x0000E1)</script>=

Tomcat6.0.35私は設定しましたURIEncoding="UTF-8"

request.getQueryString()サーブレットで使用:

もしchrome、私が得る

'%22--%3E%3C/style%3E%3C/script%3E%3Cscript%3Enetsparker(0x0000E1)%3C/script%3E=

もしie、私は得る

'"--></style></script><script>netsparker(0x0000E1)</script>=

なんで?

追加

request.getQueryString()uriを作成したい

URI uri = URI.create(url)

つまり:

java.net.URISyntaxException: Illegal character in query at index 36: /cmens/t-b-f-a-c-s-f-p-g-e-i-o.htm?'"--></style></script><script>netsparker(0x0000E1)</script>
    at java.net.URI$Parser.fail(URI.java:2809)
    at java.net.URI$Parser.checkChars(URI.java:2982)
    at java.net.URI$Parser.parseHierarchical(URI.java:3072)
    at java.net.URI$Parser.parse(URI.java:3024)
    at java.net.URI.<init>(URI.java:578)
    at java.net.URI.create(URI.java:840)

queryString がエンコードされているかどうかを判断する方法は?

4

4 に答える 4

5

は、HttpServletRequest#getQueryString()定義ごとにデコードされていません。javadoc(私の強調)も参照してください。

戻り値:

クエリ文字列を含む文字列。URLにクエリ文字列が含まれていない場合はnull。値はコンテナによってデコードされません。

getParameterXxx()基本的に、何らかの理由でメソッドを使用するのではなく、手動で解析する場合は、自分でURLデコードする必要があります(パラメーターを暗黙的にデコードします!)。

String decodedQueryString = URLDecoder.decode(request.getQueryString(), "UTF-8");

ChromeがIEをエンコードせずにエンコードして送信する理由については、ChromeがHTTPリクエストを安全/適切な方法で処理するためのより良い仕事をしているためです。これはあなたのコントロールを超えています。何らかの理由で手動で解析する場合は、常にクエリ文字列を自分でURLデコードしてください。構成は、GET要求中のメソッドにURIEncoding="UTF-8"のみ影響します。getParameterXxx()

于 2013-02-21T14:29:23.400 に答える
0

ChromeはURLエンコード方式を使用していますが、IEは文字列を使用しています。

例: "はURLエンコードで%22です。

<は%3E、>は%3C

Chromeはそれを「正しい方法」で実行していますが、IEは他のすべての方法と同じように実行することはできません。

URL文字の完全なリストはここにあります:http ://www.w3schools.com/tags/ref_urlencode.asp

于 2013-02-21T14:28:32.810 に答える
0

ChromeはエンコードされたURLを送信します。を使用してクエリ文字列をデコードしてみてください

URLDecoder.decode(queryString, "UTF-8");

javadocで述べられているように、クエリ文字列はコンテナによってデコードされません。

クエリ文字列を含む文字列を返します。URLにクエリ文字列が含まれていない場合はnullを返します。値はコンテナによってデコードされません。

javadoc

于 2013-02-21T14:29:37.043 に答える
0

IE文字列がデコードされている間、ChromeバージョンはURLEncodedです。

このツールを使用して、URLエンコードバージョンとデコードバージョンを比較します:http://meyerweb.com/eric/tools/dencoder/

于 2013-02-21T14:24:57.093 に答える