Package org.glassfish.grizzly.http.util
Class HttpRequestURIDecoder
- java.lang.Object
-
- org.glassfish.grizzly.http.util.HttpRequestURIDecoder
-
public class HttpRequestURIDecoder extends Object
Utility class that make sure an HTTP url defined inside aMessageBytesis normalized, converted and valid. It also makes sure there is no security hole. Mainly, this class can be used by doing:HttpRequestURIDecoder.decode(decodedURI, urlDecoder, encoding, b2cConverter);- Author:
- Jeanfrancois Arcand
-
-
Field Summary
Fields Modifier and Type Field Description protected static booleanALLOW_BACKSLASH
-
Constructor Summary
Constructors Constructor Description HttpRequestURIDecoder()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static booleancheckNormalize(CharChunk uriCC)Check that the URI is normalized following character decoding.protected voidconvertMB(MessageBytes mb)Character conversion of the a US-ASCII MessageBytes.static voidconvertToChars(DataChunk decodedURI, Charset encoding)Converts the normalized the HTTP request represented by the bytes insideDataChunkto chars representation, using the passed encoding.protected static voidcopyBytes(byte[] b, int dest, int src, int len)Copy an array of bytes to a different position.static voiddecode(DataChunk decodedURI)Decode the HTTP request represented by the bytes insideDataChunk.static voiddecode(DataChunk decodedURI, boolean isSlashAllowed)Decode the HTTP request represented by the bytes insideDataChunk.static voiddecode(DataChunk decodedURI, boolean isSlashAllowed, Charset encoding)Decode the HTTP request represented by the bytes insideDataChunk.static voiddecode(DataChunk originalURI, DataChunk targetDecodedURI, boolean isSlashAllowed, Charset encoding)Decode the HTTP request represented by the bytes insideDataChunk.static voiddecode(MessageBytes decodedURI, UDecoder urlDecoder)Decode the http request represented by the bytes insideMessageBytesusing anUDecoder.static voiddecode(MessageBytes decodedURI, UDecoder urlDecoder, String encoding, B2CConverter b2cConverter)Decode the HTTP request represented by the bytes insideMessageBytesusing anUDecoder, using the specified encoding, using the specified [@link B2CConverter} to decode the request.protected voidlog(String message)Log a message on the Logger associated with our Container (if any)protected voidlog(String message, Throwable throwable)Log a message on the Logger associated with our Container (if any)static booleannormalize(DataChunk dataChunk)Normalize URI.static booleannormalize(MessageBytes uriMB)Normalize URI.static booleannormalizeBuffer(BufferChunk bc)static booleannormalizeBytes(ByteChunk bc)static booleannormalizeChars(CharChunk uriCC)
-
-
-
Field Detail
-
ALLOW_BACKSLASH
protected static final boolean ALLOW_BACKSLASH
- See Also:
- Constant Field Values
-
-
Method Detail
-
decode
public static void decode(MessageBytes decodedURI, UDecoder urlDecoder) throws Exception
Decode the http request represented by the bytes insideMessageBytesusing anUDecoder.- Parameters:
decodedURI- - The bytes to decodeurlDecoder- - The urlDecoder to use to decode.- Throws:
Exception
-
decode
public static void decode(MessageBytes decodedURI, UDecoder urlDecoder, String encoding, B2CConverter b2cConverter) throws Exception
Decode the HTTP request represented by the bytes insideMessageBytesusing anUDecoder, using the specified encoding, using the specified [@link B2CConverter} to decode the request.- Parameters:
decodedURI- - The bytes to decodeurlDecoder- - The urlDecoder to use to decode.encoding- the encoding value, default is UTF-8.b2cConverter- the Bytes to Char Converter.- Throws:
Exception
-
decode
public static void decode(DataChunk decodedURI) throws CharConversionException
Decode the HTTP request represented by the bytes insideDataChunk.- Parameters:
decodedURI- - The bytes to decode- Throws:
CharConversionException
-
decode
public static void decode(DataChunk decodedURI, boolean isSlashAllowed) throws CharConversionException
Decode the HTTP request represented by the bytes insideDataChunk.- Parameters:
decodedURI- - The bytes to decodeisSlashAllowed- allow encoded slashes- Throws:
CharConversionException
-
decode
public static void decode(DataChunk decodedURI, boolean isSlashAllowed, Charset encoding) throws CharConversionException
Decode the HTTP request represented by the bytes insideDataChunk.- Parameters:
decodedURI- - The bytes to decodeisSlashAllowed- allow encoded slashesencoding- the encoding value, default is UTF-8.- Throws:
CharConversionException
-
decode
public static void decode(DataChunk originalURI, DataChunk targetDecodedURI, boolean isSlashAllowed, Charset encoding) throws CharConversionException
Decode the HTTP request represented by the bytes insideDataChunk.- Parameters:
originalURI- - The bytes to decodetargetDecodedURI- the targetDataChunkURI will be decoded toisSlashAllowed- is '/' an allowable characterencoding- the encoding value, default is UTF-8- Throws:
CharConversionException
-
convertToChars
public static void convertToChars(DataChunk decodedURI, Charset encoding) throws CharConversionException
Converts the normalized the HTTP request represented by the bytes insideDataChunkto chars representation, using the passed encoding.- Parameters:
decodedURI- - The bytes to decodeencoding- the encoding value, default is UTF-8.- Throws:
CharConversionException
-
normalize
public static boolean normalize(MessageBytes uriMB)
Normalize URI.This method normalizes "\", "//", "/./" and "/../". This method will return false when trying to go above the root, or if the URI contains a null byte.
- Parameters:
uriMB- URI to be normalized- Returns:
- true if normalization was successful, or false otherwise
-
normalize
public static boolean normalize(DataChunk dataChunk)
Normalize URI.This method normalizes "\", "//", "/./" and "/../". This method will return false when trying to go above the root, or if the URI contains a null byte.
- Parameters:
dataChunk- URI to be normalized- Returns:
- true if normalization was successful, or false otherwise
-
checkNormalize
public static boolean checkNormalize(CharChunk uriCC)
Check that the URI is normalized following character decoding.This method checks for "\", 0, "//", "/./" and "/../". This method will return false if sequences that are supposed to be normalized are still present in the URI.
- Parameters:
uriCC- URI to be checked (should be chars)- Returns:
- true if the uriCC represents a normalized URI, or false otherwise
-
normalizeChars
public static boolean normalizeChars(CharChunk uriCC)
-
copyBytes
protected static void copyBytes(byte[] b, int dest, int src, int len)Copy an array of bytes to a different position. Used during normalization.
-
log
protected void log(String message)
Log a message on the Logger associated with our Container (if any)- Parameters:
message- Message to be logged
-
log
protected void log(String message, Throwable throwable)
Log a message on the Logger associated with our Container (if any)- Parameters:
message- Message to be loggedthrowable- Associated exception
-
convertMB
protected void convertMB(MessageBytes mb)
Character conversion of the a US-ASCII MessageBytes.
-
normalizeBytes
public static boolean normalizeBytes(ByteChunk bc)
-
normalizeBuffer
public static boolean normalizeBuffer(BufferChunk bc)
-
-