...
This noncompliant code example takes a user input query string and build a URL. Because the URL is not properly encoded, the URL returned is may not be valid because if it contains non-URL-safe characters characters, as per RFC 1738.
Code Block | ||
---|---|---|
| ||
String buildUrl(String q) { //user inputs the argument "#YOLO2018" String url = "https://example.com?query=" + q; return url; } |
The For example, if the user supplies the input string "#YOLO2018
", the url
returned is "https://example.com?query=#YOLO2018"
which is not a valid URL.
Compliant Solution (Java 8)
Use java.util.Base64
to encode and decode data when transferring binary data over mediums that only allow printable characters like URLs, filenames, and MIME.
Code Block | ||
---|---|---|
| ||
String buildEncodedUrl(String q) { String origUrl = "https://example.com?query=" + q; String encodedUrl = Base64.getUrlEncoder().encodeToString(origUrl.getBytes()); return encodedUrl; } |
The encodedUrl
If the user supplies the input string "#YOLO2018
", the url
returned is "https%3A%2F%2Fexample.com%3Fquery%3D%23YOLO2018"
which is a valid URL. Use java.util.Base64
to encode and decode when transferring binary data over mediums that only allow printable characters like URLs, filenames, and MIME.
Applicability
Failure to encode or escape output before it is displayed or passed across a trust boundary can result in the execution of arbitrary code.
...