This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org

ESAPI Secure Coding Guideline

From OWASP
Jump to: navigation, search

Using Security Controls

Authentication

ID Requirement Code Example
AU001 All site interaction from page containing the login form to the page confirming logout (inclusive) must use SSL. TBD
AU002 All requests for pages that require authentication shall call the ESAPI.authenticator().login() method. TBD
AU003 The application shall provide the user with a logout link on every page that invokes the ESAPI.authenticator().logout() method. TBD
AU004 Form fields used for passwords must use type=password to mask the password from view. TBD
AU005 The application shall never put passwords into HTML, including repopulating form fields. TBD
AU006 The application shall use the FIXME to set a "remember me" cookie for automatic authentication, but only if a user specifically authorizes it. TBD
AU007 The application shall include Javascript in all pages that protects against being nested or framed in other websites. TBD
AU008 The application shall reauthenticate users with User.checkPassword() before allowing access to sensitive transactions. TBD
AU009 Link and form URLs for all transactions shall be updated with the HTTPUtilities.addCSRFToken() method to add a CSRF token. TBD
AU010 All HTTP requests for transactions shall be verified using the HTTPUtilities.verifyCSRFToken() method to check that the request is not forged. TBD
AU011 Account creation and registration functions should protect against automated tools. TBD
AU012 The application shall generate strong passwords for users with the Authenticator.generateStrongPassword() method. TBD
AU013 The application shall verify the strength of any user provided password with the Authenticator.verifyPasswordStrength() method. TBD
AU014 The application shall verify the strength of any user account name with the Authenticator.verifyAccountNameStrength() method. TBD
AU015 The application shall display information upon login about the last successful (User.getLastLoginTime()) and last failed (User.getLastFailedLoginTime()) login date and time. TBD



Session Management

ID Requirement Code Example
AC001 The application shall use to TBD





Access Control

ID Requirement Code Example
AC001 The application shall use assertAuthorizedForURL() to verify authorization before allowing access to each URL. TBD
AC002 The application shall use assertAuthorizedForFunction() to verify authorization before allowing access to each business function. TBD
AC003 The application shall use assertAuthorizedForFile() to verify authorization before allowing access to files. TBD
AC004 The application shall use assertAuthorizedForData() to verify authorization before allowing access to data. TBD
AC005 The application shall use assertAuthorizedForService() to verify authorization before allowing access to each backend service. TBD
AC006 The application shall use isAuthorizedFor* methods to verify authorization before including user interface controls in HTML output. TBD
AC007 The application shall use AccessReferenceMap.getIndirectReference() to reference all application objects such as filenames, directory paths, and database keys. TBD
AC008 The application shall prevent access to all resources that should not be directly accessed by users (such as resources, XML files, JSP files, properties) by storing them in a protected directory, such as WEB-INF. TBD
AC009 The application shall use HTTPUtilities.sendSafeForward() for all forwards, to ensure that they cannot be used to bypass access checks. TBD
AC0010 The appplication must use only trusted data used in access control decisions. TBD
AC0011 Administrative functions for the application shall be deployed as a separate application with increased authentication controls. TBD



Input Validation and Encoding

ID Requirement Code Example
AC001 The application shall use to TBD



Data Protection

ID Requirement Code Example
AC001 The application shall use to TBD


| The application shall use an EncryptedProperties to store all security relevant data, such as passwords, credentials, codes, configuration information, addresses, etc…



Using Services Securely

ID Requirement Code Example
AC001 The application shall use to TBD



Error Handling

ID Requirement Code Example
AC001 The application shall use to TBD



Logging and Intrusion Detection

ID Requirement Code Example
AC001 The application shall use to TBD



Secure Configuration and Deployment

ID Requirement Code Example
SC001 Production code shall not contain code not intended for use, such as debug, test, and dead code. TBD
SC002 The application's source code shall not contain secrets that would compromise security if disclosed. TBD
SC003 The application team shall run code quality tools such as FindBugs and PMD to find quality problems. TBD



Avoiding Specific Risks

Cross Site Scripting

ID Requirement Code Example
AC001 The application shall use to TBD


Cross Site Request Forgery

ID Requirement Code Example
AC001 The application shall use to TBD


Thread Safety Problems

ID Requirement Code Example
AC001 The application shall avoid the use of shared storage, such as class variables, instance variables, or singletons, in all multithreaded code. TBD



Denial of Service

ID Requirement Code Example
AC001 The application shall use to TBD



Banned APIs

The following calls are dangerous and should be replaces with the safer calls provided by ESAPI.

ID Banned Call ESAPI Replacement Code Example
BAN001 System.out.println() Logger.* TBD
BAN002 Throwable.printStackTrace() Logger.* TBD
BAN003 Runtime.exec() Executor.safeExec() TBD
BAN004 Session.getId() Randomizer.getRandomString (better not to use at all) TBD
BAN005 ServletRequest.getUserPrincipal() Authenticator.getCurrentUser() TBD
BAN006 ServletRequest.isUserInRole() AccessController.isAuthorized*() TBD
BAN007 Session.invalidate() Authenticator.logout() TBD
BAN008 Math.Random.* Randomizer.* TBD
BAN009 File.createTempFile() Randomizer.getRandomFilename() TBD
BAN010 ServletResponse.setContentType() HTTPUtilities.setContentType() TBD
BAN011 ServletResponse.sendRedirect() HTTPUtilities.safeSendRedirect() TBD
BAN012 RequestDispatcher.forward() HTTPUtilities.safeSendForward() TBD
BAN013 ServletResponse.addHeader() HTTPUtilities.safeSetHeader()/safeSetHeader() TBD
BAN014 ServletResponse.addCookie() HTTPUtilities.safeAddCookie() TBD
BAN015 ServletRequest.isSecure() HTTPUtilties.isSecureChannel() TBD
BAN016 Properties.* EncryptedProperties.* TBD
BAN017 ServletContext.log() Logger.* TBD
BAN018 java.security and javax.crypto Encryptor.* TBD
BAN019 java.net.URLEncoder/Decoder Encoder.encodeForURL()/decodeForURL() TBD
BAN020 java.sql.Statement.execute PreparedStatement.execute TBD
BAN021 ServletResponse.encodeURL HTTPUtilities.safeEncodeURL() (better not to use at all) TBD
BAN022 ServletResponse.encodeRedirectURL HTTPUtilities.safeEncodeRedirectURL() (better not to use at all) TBD