public class DefaultHTTPUtilities extends Object implements HTTPUtilities
To simplify the interface, some methods use the current request and response that are tracked by ThreadLocal variables in the Authenticator. This means that you must have called ESAPI.authenticator().setCurrentHTTP(request, response) before calling these methods.
Typically, this is done by calling the Authenticator.login() method, which calls setCurrentHTTP() automatically. However if you want to use these methods in another application, you should explicitly call setCurrentHTTP() in your own code. In either case, you *must* call ESAPI.clearCurrent() to clear threadlocal variables before the thread is reused. The advantages of having identity everywhere outweigh the disadvantages of this approach.
HTTPUtilities
COOKIE, CSRF_TOKEN_NAME, ESAPI_STATE, HEADER, MAX_COOKIE_LEN, MAX_COOKIE_PAIRS, PARAMETER, REMEMBER_TOKEN_COOKIE_NAME
Constructor and Description |
---|
DefaultHTTPUtilities()
No arg constructor.
|
Modifier and Type | Method and Description |
---|---|
void |
addCookie(javax.servlet.http.Cookie cookie)
Calls addCookie with the *current* request.
|
void |
addCookie(javax.servlet.http.HttpServletResponse response,
javax.servlet.http.Cookie cookie)
Add a cookie to the response after ensuring that there are no encoded or
illegal characters in the name and name and value.
|
String |
addCSRFToken(String href)
Adds the current user's CSRF token (see User.getCSRFToken()) to the URL for purposes of preventing CSRF attacks.
|
void |
addHeader(javax.servlet.http.HttpServletResponse response,
String name,
String value)
Add a header to the response after ensuring that there are no encoded or
illegal characters in the name and name and value.
|
void |
addHeader(String name,
String value)
Calls addHeader with the *current* request.
|
void |
assertSecureChannel()
Calls assertSecureChannel with the *current* request.
|
void |
assertSecureChannel(javax.servlet.http.HttpServletRequest request)
Ensures the use of SSL to protect any sensitive parameters in the request and
any sensitive data in the response.
|
void |
assertSecureRequest()
Calls assertSecureRequest with the *current* request.
|
void |
assertSecureRequest(javax.servlet.http.HttpServletRequest request)
Ensures that the request uses both SSL and POST to protect any sensitive parameters
in the querystring from being sniffed, logged, bookmarked, included in referer header, etc...
|
javax.servlet.http.HttpSession |
changeSessionIdentifier()
Calls changeSessionIdentifier with the *current* request.
|
javax.servlet.http.HttpSession |
changeSessionIdentifier(javax.servlet.http.HttpServletRequest request)
Invalidate the existing session after copying all of its contents to a newly created session with a new session id.
|
void |
clearCurrent()
Clears the current HttpRequest and HttpResponse associated with the current thread.
|
String |
decryptHiddenField(String encrypted)
Decrypts an encrypted hidden field value and returns the cleartext.
|
Map<String,String> |
decryptQueryString(String encrypted)
Takes an encrypted querystring and returns a Map containing the original parameters.
|
Map<String,String> |
decryptStateFromCookie()
Calls decryptStateFromCookie with the *current* request.
|
Map<String,String> |
decryptStateFromCookie(javax.servlet.http.HttpServletRequest request)
Retrieves a map of data from a cookie encrypted with encryptStateInCookie().
|
String |
encryptHiddenField(String value)
Encrypts a hidden field value for use in HTML.
|
String |
encryptQueryString(String query)
Takes a querystring (everything after the question mark in the URL) and returns an encrypted string containing the parameters.
|
void |
encryptStateInCookie(javax.servlet.http.HttpServletResponse response,
Map<String,String> cleartext)
Stores a Map of data in an encrypted cookie.
|
void |
encryptStateInCookie(Map<String,String> cleartext)
Calls encryptStateInCookie with the *current* response.
|
String |
getCookie(javax.servlet.http.HttpServletRequest request,
String name)
A safer replacement for getCookies() in HttpServletRequest that returns the canonicalized
value of the named cookie after "global" validation against the
general type defined in ESAPI.properties.
|
String |
getCookie(String name)
Calls getCookie with the *current* response.
|
String |
getCSRFToken()
Returns the current user's CSRF token.
|
javax.servlet.http.HttpServletRequest |
getCurrentRequest()
Retrieves the current HttpServletRequest
|
javax.servlet.http.HttpServletResponse |
getCurrentResponse()
Retrieves the current HttpServletResponse
|
List<File> |
getFileUploads()
Calls
getFileUploads with the current request, default upload directory, and default allowed file extensions |
List<File> |
getFileUploads(javax.servlet.http.HttpServletRequest request)
Call
getFileUploads with the specified request, default upload directory, and default allowed file extensions |
List<File> |
getFileUploads(javax.servlet.http.HttpServletRequest request,
File finalDir)
Call
getFileUploads with the specified request, specified upload directory, and default allowed file extensions |
List<File> |
getFileUploads(javax.servlet.http.HttpServletRequest request,
File finalDir,
List allowedExtensions)
Extract uploaded files from a multipart/form-data HTTP request.
|
String |
getHeader(javax.servlet.http.HttpServletRequest request,
String name)
A safer replacement for getHeader() in HttpServletRequest that returns the canonicalized
value of the named header after "global" validation against the
general type defined in ESAPI.properties.
|
String |
getHeader(String name)
Calls getHeader with the *current* request.
|
static HTTPUtilities |
getInstance() |
String |
getParameter(javax.servlet.http.HttpServletRequest request,
String name)
A safer replacement for getParameter() in HttpServletRequest that returns the canonicalized
value of the named parameter after "global" validation against the
general type defined in ESAPI.properties.
|
String |
getParameter(String name)
Calls getParameter with the *current* request.
|
<T> T |
getRequestAttribute(javax.servlet.http.HttpServletRequest request,
String key)
Gets a typed attribute from the
HttpServletRequest associated
with the passed in request. |
<T> T |
getRequestAttribute(String key)
Gets a typed attribute from the
HttpServletRequest associated
with the caller thread. |
<T> T |
getSessionAttribute(javax.servlet.http.HttpSession session,
String key)
Gets a typed attribute from the passed in session.
|
<T> T |
getSessionAttribute(String key)
Gets a typed attribute from the session associated with the calling thread.
|
void |
killAllCookies()
Calls killAllCookies with the *current* request and response.
|
void |
killAllCookies(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
Kill all cookies received in the last request from the browser.
|
void |
killCookie(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
String name)
Kills the specified cookie by setting a new cookie that expires immediately.
|
void |
killCookie(String name)
Calls killCookie with the *current* request and response.
|
void |
logHTTPRequest()
Calls logHTTPRequest with the *current* request and logger.
|
void |
logHTTPRequest(javax.servlet.http.HttpServletRequest request,
Logger logger)
Format the Source IP address, URL, URL parameters, and all form
parameters into a string suitable for the log file.
|
void |
logHTTPRequest(javax.servlet.http.HttpServletRequest request,
Logger logger,
List parameterNamesToObfuscate)
Formats an HTTP request into a log suitable string.
|
void |
sendForward(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
String location)
This method performs a forward to any resource located inside the WEB-INF directory.
|
void |
sendForward(String location)
Calls sendForward with the *current* request and response.
|
void |
sendRedirect(javax.servlet.http.HttpServletResponse response,
String location)
This method performs a forward to any resource located inside the WEB-INF directory.
|
void |
sendRedirect(String location)
Calls sendRedirect with the *current* response.
|
void |
setContentType()
Calls setContentType with the *current* request and response.
|
void |
setContentType(javax.servlet.http.HttpServletResponse response)
Set the content type character encoding header on every HttpServletResponse in order to limit
the ways in which the input data can be represented.
|
void |
setCurrentHTTP(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
Stores the current HttpRequest and HttpResponse so that they may be readily accessed throughout
ESAPI (and elsewhere)
|
void |
setHeader(javax.servlet.http.HttpServletResponse response,
String name,
String value)
Add a header to the response after ensuring that there are no encoded or
illegal characters in the name and value.
|
void |
setHeader(String name,
String value)
Calls setHeader with the *current* response.
|
void |
setNoCacheHeaders()
Calls setNoCacheHeaders with the *current* response.
|
void |
setNoCacheHeaders(javax.servlet.http.HttpServletResponse response)
Set headers to protect sensitive information against being cached in the browser.
|
String |
setRememberToken(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
int maxAge,
String domain,
String path) |
String |
setRememberToken(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
String password,
int maxAge,
String domain,
String path)
Set a cookie containing the current User's remember me token for automatic authentication.
|
String |
setRememberToken(String password,
int maxAge,
String domain,
String path)
Calls setNoCacheHeaders with the *current* response.
|
void |
verifyCSRFToken()
Calls verifyCSRFToken with the *current* request.
|
void |
verifyCSRFToken(javax.servlet.http.HttpServletRequest request)
Checks the CSRF token in the URL (see User.getCSRFToken()) against the user's CSRF token and
throws an IntrusionException if it is missing.
|
public static HTTPUtilities getInstance()
public void addCookie(javax.servlet.http.Cookie cookie)
addCookie
in interface HTTPUtilities
cookie
- The cookie to addHTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void addCookie(javax.servlet.http.HttpServletResponse response, javax.servlet.http.Cookie cookie)
addCookie
in interface HTTPUtilities
response
- The HTTP response to add the cookie tocookie
- The cookie to addpublic String addCSRFToken(String href)
addCSRFToken
in interface HTTPUtilities
href
- the URL to which the CSRF token will be appendedpublic void addHeader(String name, String value)
addHeader
in interface HTTPUtilities
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void addHeader(javax.servlet.http.HttpServletResponse response, String name, String value)
addHeader
in interface HTTPUtilities
public void assertSecureChannel() throws AccessControlException
assertSecureChannel
in interface HTTPUtilities
AccessControlException
HTTPUtilities.assertSecureChannel(HttpServletRequest)
,
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void assertSecureChannel(javax.servlet.http.HttpServletRequest request) throws AccessControlException
assertSecureChannel
in interface HTTPUtilities
AccessControlException
- if security constraints are not metpublic void assertSecureRequest() throws AccessControlException
assertSecureRequest
in interface HTTPUtilities
AccessControlException
HTTPUtilities.assertSecureRequest(HttpServletRequest)
,
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void assertSecureRequest(javax.servlet.http.HttpServletRequest request) throws AccessControlException
assertSecureRequest
in interface HTTPUtilities
AccessControlException
- if security constraints are not metpublic javax.servlet.http.HttpSession changeSessionIdentifier() throws AuthenticationException
changeSessionIdentifier
in interface HTTPUtilities
AuthenticationException
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public javax.servlet.http.HttpSession changeSessionIdentifier(javax.servlet.http.HttpServletRequest request) throws AuthenticationException
changeSessionIdentifier
in interface HTTPUtilities
AuthenticationException
- the exceptionpublic void clearCurrent()
clearCurrent
in interface HTTPUtilities
ESAPI.clearCurrent()
public String decryptHiddenField(String encrypted)
decryptHiddenField
in interface HTTPUtilities
encrypted
- hidden field value to decryptpublic Map<String,String> decryptQueryString(String encrypted) throws EncryptionException
decryptQueryString
in interface HTTPUtilities
encrypted
- the encrypted querystring to decryptEncryptionException
public Map<String,String> decryptStateFromCookie() throws EncryptionException
decryptStateFromCookie
in interface HTTPUtilities
EncryptionException
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public Map<String,String> decryptStateFromCookie(javax.servlet.http.HttpServletRequest request) throws EncryptionException
decryptStateFromCookie
in interface HTTPUtilities
request
- EncryptionException
public String encryptHiddenField(String value) throws EncryptionException
encryptHiddenField
in interface HTTPUtilities
value
- the cleartext value of the hidden fieldEncryptionException
public String encryptQueryString(String query) throws EncryptionException
encryptQueryString
in interface HTTPUtilities
query
- the querystring to encryptEncryptionException
public void encryptStateInCookie(javax.servlet.http.HttpServletResponse response, Map<String,String> cleartext) throws EncryptionException
encryptStateInCookie
in interface HTTPUtilities
EncryptionException
public void encryptStateInCookie(Map<String,String> cleartext) throws EncryptionException
encryptStateInCookie
in interface HTTPUtilities
EncryptionException
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public String getCookie(javax.servlet.http.HttpServletRequest request, String name) throws ValidationException
getCookie
in interface HTTPUtilities
name
- The cookie to getValidationException
public String getCookie(String name) throws ValidationException
getCookie
in interface HTTPUtilities
name
- The cookie to getValidationException
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public String getCSRFToken()
getCSRFToken
in interface HTTPUtilities
public javax.servlet.http.HttpServletRequest getCurrentRequest()
getCurrentRequest
in interface HTTPUtilities
public javax.servlet.http.HttpServletResponse getCurrentResponse()
getCurrentResponse
in interface HTTPUtilities
public List<File> getFileUploads() throws ValidationException
getFileUploads
with the current request, default upload directory, and default allowed file extensionsgetFileUploads
in interface HTTPUtilities
ValidationException
- if the file fails validationHTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public List<File> getFileUploads(javax.servlet.http.HttpServletRequest request) throws ValidationException
getFileUploads
with the specified request, default upload directory, and default allowed file extensionsgetFileUploads
in interface HTTPUtilities
request
- The applicable HTTP requestValidationException
- if the file fails validationpublic List<File> getFileUploads(javax.servlet.http.HttpServletRequest request, File finalDir) throws ValidationException
getFileUploads
with the specified request, specified upload directory, and default allowed file extensionsgetFileUploads
in interface HTTPUtilities
request
- The applicable HTTP requestfinalDir
- The destination directory to leave the uploaded file(s) in.ValidationException
- if the file fails validationpublic List<File> getFileUploads(javax.servlet.http.HttpServletRequest request, File finalDir, List allowedExtensions) throws ValidationException
org.owasp.esapi.referenceDefaultHTTPUtilities
only does some of these things listed above and some of those
are limited to which getFileUploads
method is called and how you've set your relevant ESAPI properties
in your ESAPI.properties file.
This method uses HTTPUtilities.getCurrentRequest()
to obtain the
HttpServletRequest
object. If the ESAPI property HttpUtilities.FileUploadAllowAnonymousUser is set to false
(the
default is true
), then getFileUploads
will call ESAPI.authenticator().getCurrentUser()
to check if the user is authenticated. If that property is set to false
and a call to that function returns
an anonymous (i.e., unauthenticated) user, then the file upload is blocked.
ESAPI properties relevant to this and the other getFileUploads
methods referenced in this table. The
last 2 properties are new since release 2.5.2.0:
ESAPI Property Name | ESAPI.properties Default | Builtin Default | Meaning |
---|---|---|---|
HttpUtilities.UploadDir | C:\ESAPI\testUpload | UploadDir | Final destination directory for uploaded files. |
HttpUtilities.UploadTempDir | C:\temp | Value of system property java.io.tmpdir | Temporary staging directory for uploaded files. |
HttpUtilities.ApprovedUploadExtensions | .pdf,.doc,.docx,.ppt,.pptx,.xls,.xlsx,.rtf,.txt,.jpg,.pn | .pdf,.txt,.jpg,.png | Comma separated allowed list of file suffixes that may be uploaded. |
HttpUtilities.MaxUploadFileBytes | 5000000 | 5000000 | Total maximum upload file size for uploaded files per HTTP request. |
HttpUtilities.MaxUploadFileCount | 20 | 20 | Maximum total number of uploaded files per HTTP request. |
HttpUtilities.FileUploadAllowAnonymousUser | true | true | Controls whether anonymous (i.e., unauthenticated) users may upload files. |
As alluded to above, it is important to note that these getFileUploads
methods do not do
everything to keey your application and environment secure. Some of the more obvious omissions are the
absence of examining the actual file content to determine the actual file type or running some AV scan
on the uploaded files. You have to add that functionality to you if you want or need that. Some
resource that you may find useful are:
getFileUploads
in interface HTTPUtilities
request
- The applicable HTTP requestfinalDir
- The destination directory to leave the uploaded file in.allowedExtensions
- Permitted file suffixes. (Yes, this is a weak check. Use Apache Tika if you
want something more.)File
objects from uploadValidationException
- if the file fails validationpublic String getHeader(javax.servlet.http.HttpServletRequest request, String name) throws ValidationException
getHeader
in interface HTTPUtilities
ValidationException
public String getHeader(String name) throws ValidationException
getHeader
in interface HTTPUtilities
ValidationException
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public String getParameter(javax.servlet.http.HttpServletRequest request, String name) throws ValidationException
getParameter
in interface HTTPUtilities
ValidationException
public String getParameter(String name) throws ValidationException
getParameter
in interface HTTPUtilities
ValidationException
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void killAllCookies()
killAllCookies
in interface HTTPUtilities
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void killAllCookies(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
killAllCookies
in interface HTTPUtilities
request
- response
- public void killCookie(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, String name)
killCookie
in interface HTTPUtilities
request
- response
- name
- public void killCookie(String name)
killCookie
in interface HTTPUtilities
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void logHTTPRequest()
logHTTPRequest
in interface HTTPUtilities
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void logHTTPRequest(javax.servlet.http.HttpServletRequest request, Logger logger)
logHTTPRequest
in interface HTTPUtilities
logger
- the logger to write the request topublic void logHTTPRequest(javax.servlet.http.HttpServletRequest request, Logger logger, List parameterNamesToObfuscate)
logHTTPRequest
in interface HTTPUtilities
request
- logger
- the logger to write the request toparameterNamesToObfuscate
- the sensitive parameterspublic void sendForward(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, String location) throws AccessControlException, javax.servlet.ServletException, IOException
sendForward
in interface HTTPUtilities
location
- the URL to forward to, including parametersAccessControlException
javax.servlet.ServletException
IOException
public void sendForward(String location) throws AccessControlException, javax.servlet.ServletException, IOException
sendForward
in interface HTTPUtilities
AccessControlException
javax.servlet.ServletException
IOException
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void sendRedirect(javax.servlet.http.HttpServletResponse response, String location) throws AccessControlException, IOException
sendRedirect
in interface HTTPUtilities
location
- the URL to forward to, including parametersAccessControlException
IOException
public void sendRedirect(String location) throws AccessControlException, IOException
sendRedirect
in interface HTTPUtilities
AccessControlException
IOException
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void setContentType()
setContentType
in interface HTTPUtilities
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void setContentType(javax.servlet.http.HttpServletResponse response)
setContentType
in interface HTTPUtilities
response
- The servlet response to set the content type for.public void setCurrentHTTP(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
setCurrentHTTP
in interface HTTPUtilities
request
- the current requestresponse
- the current responsepublic void setHeader(javax.servlet.http.HttpServletResponse response, String name, String value)
setHeader
in interface HTTPUtilities
public void setHeader(String name, String value)
setHeader
in interface HTTPUtilities
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void setNoCacheHeaders()
setNoCacheHeaders
in interface HTTPUtilities
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void setNoCacheHeaders(javax.servlet.http.HttpServletResponse response)
Cache-Control: no-storeNote that the header "pragma: no-cache" is intended only for use in HTTP requests, not HTTP responses. However, Microsoft has chosen to directly violate the standards, so we need to include that header here. For more information, please refer to the relevant standards:
Cache-Control: no-cache
Cache-Control: must-revalidate
Expires: -1
setNoCacheHeaders
in interface HTTPUtilities
response
- public String setRememberToken(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, String password, int maxAge, String domain, String path)
setRememberToken
in interface HTTPUtilities
request
- response
- password
- the user's passwordmaxAge
- the length of time that the token should be valid for in relative secondsdomain
- the domain to restrict the token to or nullpath
- the path to restrict the token to or nullpublic String setRememberToken(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, int maxAge, String domain, String path)
setRememberToken
in interface HTTPUtilities
public String setRememberToken(String password, int maxAge, String domain, String path)
setRememberToken
in interface HTTPUtilities
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void verifyCSRFToken() throws IntrusionException
verifyCSRFToken
in interface HTTPUtilities
IntrusionException
HTTPUtilities.setCurrentHTTP(HttpServletRequest, HttpServletResponse)
public void verifyCSRFToken(javax.servlet.http.HttpServletRequest request) throws IntrusionException
verifyCSRFToken
in interface HTTPUtilities
request
- IntrusionException
- if CSRF token is missing or incorrectpublic <T> T getSessionAttribute(String key)
getSessionAttribute
in interface HTTPUtilities
key
- The key that references the session attributeHTTPUtilities.getSessionAttribute(javax.servlet.http.HttpSession, String)
public <T> T getSessionAttribute(javax.servlet.http.HttpSession session, String key)
HttpSession
associated with the current
thread.getSessionAttribute
in interface HTTPUtilities
session
- The session to retrieve the attribute fromkey
- The key that references the requested objectpublic <T> T getRequestAttribute(String key)
HttpServletRequest
associated
with the caller thread. If the attribute on the request is not of the implied
type, a ClassCastException will be thrown back to the caller.getRequestAttribute
in interface HTTPUtilities
key
- The key that references the request attribute.public <T> T getRequestAttribute(javax.servlet.http.HttpServletRequest request, String key)
HttpServletRequest
associated
with the passed in request. If the attribute on the request is not of the implied
type, a ClassCastException will be thrown back to the caller.getRequestAttribute
in interface HTTPUtilities
request
- The request to retrieve the attribute fromkey
- The key that references the request attribute.Copyright © 2024 The Open Worldwide Application Security Project (OWASP). All rights reserved.