[ 
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.

Reply via email to