[
https://issues.apache.org/jira/browse/WICKET-1303?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12577069#action_12577069
]
Mika Salminen commented on WICKET-1303:
---------------------------------------
Solution I decided to use in production was to replace all '%' with '*' so that
the URL is not touched by the framework encoder/decoder. This leaves the URL
nice-looking and works with Tomcat 6.0.10 >=:
Encoding:
// encode the URL with url encoder
String encodedText = URLEncoder.encode(text, "UTF-8");
// replace all '*' (which is not encoded by URLEncoder) with corresponding
entity code
encodedText = encodedText.replaceAll("\\*", "%2A");
// Replace all occurences of '%' with '*'
encodedText = encodedText.replace('%', '*');
Decoding:
// replace all occurences of '*' with '%'
String decodedText = encodedText.replace('*', '%');
// decode with URLDecoder (decodes also occurences of "%2A' to '*'
decodedText = URLDecoder.decode(decodedText, "UTF-8");
> Slash separated URL's cannot have URL parameters with value containing
> forward slash '/'
> ----------------------------------------------------------------------------------------
>
> Key: WICKET-1303
> URL: https://issues.apache.org/jira/browse/WICKET-1303
> Project: Wicket
> Issue Type: Bug
> Components: wicket
> Affects Versions: 1.3.0-final
> Environment: Tomcat 6.0.14, Firefox 2.0.0.11, Windows XP SP2
> Reporter: Mika Salminen
> Priority: Minor
>
> There seems to be an issue with URL parameters encoded into path in form
> "/page/param1/val1" with handling parameter values with forward slash ('/').
> The slash is correctly URL-encoded to entity '%2F' so that for example
> parameter key/value pair 'foo' => 'b/a/r' is encoded into url like:
> '/page/foo/b%2Fa%2Fr'. The problem is that Tomcat returns error or empty page
> with this url.
> I tested and researched a little bit and found out that this is Tomcat
> related issue. In versions >= 6.0.10 Tomcat does not allow entities '%2F' and
> '%5C in path by default so it responds with error (or empty page) when it
> encounters one of them in URL's path part. More information can be found on
> http://tomcat.apache.org/security-6.html, under header "Fixed in Apache
> Tomcat 6.0.10". I tried according to the document to turn system property
> org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH to true, to allow
> encoded slashes in path, and got the request with '%2F' in path through.
> I think that PageParameters in wicket should be easy to use, so that user
> does not have to worry about the contents of the parameter, so something
> should be done to this issue.
> I managed to get around this issue by double encoding the parameter values
> with URLEncoder. I encoded the PageParameter map parameter values with
> URLEncoder and replaced all occurences of '%' in resulting text with '='
> before passing it forward. So only entity that is left to be encoded by the
> framework (AbstractRequestTargetUrlCodingStrategy) is '=' which becomes "%3D"
> so "foo" => "b/a/r" becomes encoded in URL like: "/page/foo/b%3D2Fa%3D2Fr".
> Decoding of URL is done by opposite operation sequence: framework decodes the
> parameter for me to form b=2Fa=2Fr and after that I replace '=' with '%' and
> the replaced string is further decoded with URLDecoder. Not very beautiful
> solution but seems to work as a quick fix and leaves non-special characters
> unaffected. As a little downside two extra characters are needed to encode
> every special character.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.