-
Notifications
You must be signed in to change notification settings - Fork 370
Javadoc enhancements #886
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Javadoc enhancements #886
Changes from all commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
849c15e
Sdd comment about doclint options.
kwwall 40026bf
Add 2 properties associated w/ disabling stuff by default.
kwwall 436fee5
Class for new unchecked exception type.
kwwall 1da613b
Miscellaneous Javadoc enhancements.
kwwall 2d444b9
Fix Javadoc typos. Shout-out to @sempf for spotting most of these.
kwwall 02f4a91
Fix to spelling errors in the class javadoc.
kwwall 8225a67
Fix 2 typos identified by @xeno6696.
kwwall 61de71f
Changed the tongue-in-cheek propert names to the actual ones we are u…
kwwall 06d0ff2
Changed the tongue-in-cheek property names to the actual ones we are …
kwwall a10e323
hanged the tongue-in-cheek property names to the actual ones we are u…
kwwall 844eb0c
Add missing newline.
kwwall eb425bb
New property file for testing DefaultEncoder.encodeForSQL when it's
kwwall 0129740
Added 2 new field names whose values are the 2 new property names.
kwwall 23a2b76
Added Javadoc to encodeForSQL method regarding how to enabled it.
kwwall File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -96,7 +96,7 @@ | |
* stores some untrusted data item such as an email address from a user. A | ||
* developer thinks "let's output encode this and store the encoded data in | ||
* the database, thus making the untrusted data safe to use all the time, thus | ||
* saving all of us developers all the encoding troubles later on". On the surface, | ||
* saving all of us developers all the encoding troubles later on". On the surface, | ||
* that sounds like a reasonable approach. The problem is how to know what | ||
* output encoding to use, not only for now, but for all possible <i>future</i> | ||
* uses? It might be that the current application code base is only using it in | ||
|
@@ -147,10 +147,28 @@ | |
* target="_blank" rel="noopener noreferrer">ESAPI Encoder JUnittest cases</a> for ideas. | ||
* If you are really ambitious, an excellent resource for XSS attack patterns is | ||
* <a href="https://beefproject.com/" target="_blank" rel="noopener noreferrer">BeEF - The Browser Exploitation Framework Project</a>. | ||
* </li><li><b>A final note on {@code Encoder} implementation details:</b> | ||
* Most of the {@code Encoder} methods make extensive use of ESAPI's {@link org.owasp.esapi.codecs.Codec} | ||
* classes under-the-hood. These {@code Codec} classes are intended for use for encoding and decoding | ||
* input based on some particular context or specification. While the OWASP team | ||
* over the years have made every effort to be cautious--often going to extremes | ||
* to make "safe harbor" decisions on harmful inputs other similar encoders assume are already safe | ||
* (we did this to in order to protect the client's users from buggy browsers that don't adhere | ||
* to the W3C HTML specications)&em;the various {@code Codec} implemtations can offer | ||
* NO GUARANTEE of safety of the content being encoded or decoded. Therefore, | ||
* it is highly advised to practice a security-in-depth approach for everything you do. | ||
* By following that advice, you will minimize the impact and/or likelihood of any | ||
* vulnerabilities from bugs in the ESAPI code or accidental misuse of the ESAPI | ||
* library on your part. In particular, whenever there are cases where cients use | ||
* any of these {@link org.owasp.esapi.codecs.Codec} classes directly, it is highly | ||
* recommended to perform canonicalization followed by strict input valiation both | ||
* prior to encoding and after decoding to protect your application from input-based | ||
* attacks. | ||
* </li> | ||
* </ul> | ||
* | ||
* </p> | ||
* @see <a href="https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html">OWASP Cross-Site Scripting Prevention Cheat Sheet</a> | ||
* @see org.owasp.esapi.Validator | ||
* @see <a href="https://owasp.org/www-project-proactive-controls/v3/en/c4-encode-escape-data">OWASP Proactive Controls: C4: Encode and Escape Data</a> | ||
* @see <a href="https://www.onwebsecurity.com/security/properly-encoding-and-escaping-for-the-web.html" target="_blank" rel="noopener noreferrer">Properly encoding and escaping for the web</a> | ||
* @author Jeff Williams (jeff.williams .at. owasp.org) | ||
|
@@ -215,7 +233,7 @@ public interface Encoder { | |
* <ul><li>Perverse but legal variants of escaping schemes</li> | ||
* <li>Multiple escaping (%2526 or &lt;)</li> | ||
* <li>Mixed escaping (%26lt;)</li> | ||
* <li>Nested escaping (%%316 or &%6ct;)</li> | ||
* <li>Nested escaping (%%316 or &%6ct;)</li> | ||
* <li>All combinations of multiple, mixed, and nested encoding/escaping (%253c or ┦gt;)</li></ul> | ||
* <p> | ||
* Using canonicalize is simple. The default is just... | ||
|
@@ -395,25 +413,79 @@ public interface Encoder { | |
|
||
/** | ||
* Encode input for use in a SQL query, according to the selected codec | ||
* (appropriate codecs include the MySQLCodec and OracleCodec). | ||
* | ||
* This method is not recommended. The use of the {@code PreparedStatement} | ||
* interface is the preferred approach. However, if for some reason | ||
* this is impossible, then this method is provided as a weaker | ||
* alternative. | ||
* | ||
* The best approach is to make sure any single-quotes are double-quoted. | ||
* Another possible approach is to use the {escape} syntax described in the | ||
* JDBC specification in section 1.5.6. | ||
* | ||
* (appropriate codecs include the {@link org.owasp.esapi.codecs.MySQLCodec} | ||
* and {@link org.owasp.esapi.codecs.OracleCodec}), but see | ||
* "<b>SECURITY WARNING</b>" below before using. | ||
* <p> | ||
* The this method attempts to ensure make sure any single-quotes are double-quoted | ||
* (i.e., as '', not double-quotes, as in "). Another possible approach | ||
* is to use the {escape} syntax described in the JDBC specification in section 1.5.6. | ||
* However, this syntax does not work with all drivers, and requires | ||
* modification of all queries. | ||
* | ||
* </p><p> | ||
* <b>SECURITY WARNING:</b> This method is <u>NOT</u> recommended. The use of the {@code PreparedStatement} | ||
* interface is the preferred approach. However, if for some reason | ||
* this is impossible, then this method is provided as a significantly weaker | ||
* alternative. In particular, it should be noted that if all you do to | ||
* address potential SQL Injection attacks is to use this method to escape | ||
* parameters, you <i>will</i> fail miserably. According to the | ||
* <a href="https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html"> | ||
* OWASP SQL Injection Prevention Cheat Sheet</a>, these are the primary | ||
* defenses against SQL Injection (as of June 2025): | ||
* <ul> | ||
* <li>Option 1: Use of Prepared Statements (with Parameterized Queries)</li> | ||
* <li>Option 2: Use of Properly Constructed Stored Procedures</li> | ||
* <li>Option 3: Allow-list Input Validation</li> | ||
* <li>Option 4: STRONGLY DISCOURAGED: Escaping All User Supplied Input</li> | ||
* </ul> | ||
* </p><p> | ||
* According to "Option 4" (which is what this method implements), that OWASP Cheat Sheet | ||
* states: | ||
* <blockquote | ||
* cite="https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html#defense-option-4-strongly-discouraged-escaping-all-user-supplied-input"> | ||
* In this approach, the developer will escape all user input | ||
* before putting it in a query. It is very database specific | ||
* in its implementation. This methodology is frail compared | ||
* to other defenses, and <b>we <i>CANNOT</i> guarantee that this option | ||
* will prevent all SQL injections in all situations.</b> | ||
* </blockquote> | ||
* (Emphasis ours.) | ||
* </p><p> | ||
* Note you could give yourself a slightly better chance at success if prior to | ||
* escaping by this method, you first canonicalize the input and run it through | ||
* some strong allow-list validation. We will not provide anymore details than | ||
* that, lest we encourage its misuse; however, it should be noted that resorting | ||
* to use this method--especially by itself--should rarely, if ever, used. It | ||
* is intended as a last ditch, emergency, Hail Mary effort. (To be honest, you'd | ||
* likely have more success setting up a WAF such as | ||
* <a href="https://modsecurity.org/">OWASP ModSecurity</a> and | ||
* <a href="https://owasp.org/www-project-modsecurity-core-rule-set/">OWASP CRS</a> | ||
* if you need a temporary emergency SQLi defense shield, but using {@code PreparedStatement} | ||
* is still your best option if you have the time and resources. | ||
* </p><p> | ||
* <b>Note to AppSec / Security Auditor teams:</b> If see this method being used in | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "If you see this method..." |
||
* application code, the risk of an exploitable SQLi vulnerability is still high. We | ||
* stress the importance of the first two Options discussed in the | ||
* <a href="https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html"> | ||
* OWASP SQL Injection Prevention Cheat Sheet</a>. If you allow this, we recommend only | ||
* doing so for a limited time duration and in the meantime creating some sort of security | ||
* exception ticket to track it. | ||
* </p><p> | ||
* <b>IMPORTANT NOTE:</b> If you really do insist enabling leg cannon mode and use | ||
* this method, then you <i>MUST<i> follow these instructions. Failure to do so will | ||
* result in a {@link org.owasp.esapi.errors.NotConfiguredByDefaultException} being | ||
* thrown when you try to call it. Thus to make it work, you need to add the implementation | ||
* method corresponding to this interace (defined in the property "<b>ESAPI.Encoder</b>" | ||
* (wihch defaults to "org.owasp.esapi.reference.DefaultEncoder") in your "<b>ESAPI.properties</b>" file, | ||
* to the ESAPI property "<b>ESAPI.dangerouslyAllowUnsafeMethods.methodNames</b>". See | ||
* the Security Bulletin #13 document referenced below for additional details. | ||
* </p> | ||
* @see <a href="https://download.oracle.com/otn-pub/jcp/jdbc-4_2-mrel2-spec/jdbc4.2-fr-spec.pdf">JDBC Specification</a> | ||
* @see <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html">java.sql.PreparedStatement</a> | ||
* @see <a href="https://github.com/ESAPI/esapi-java-legacy/blob/develop/documentation/ESAPI-security-bulletin13.pdf">ESAPI Security Bulletin #13</a> | ||
* | ||
* @param codec | ||
* a Codec that declares which database 'input' is being encoded for (ie. MySQL, Oracle, etc.) | ||
* a {@link org.owasp.esapi.codecs.Codec} that declares which database 'input' is being encoded for (ie. MySQL, Oracle, etc.) | ||
* @param input | ||
* the text to encode for SQL | ||
* | ||
|
@@ -526,7 +598,7 @@ public interface Encoder { | |
* For more information, refer to <a | ||
* href="http://www.ibm.com/developerworks/xml/library/x-xpathinjection.html">this | ||
* article</a> which specifies the following list of characters as the most | ||
* dangerous: ^&"*';<>(). <a | ||
* dangerous: ^ & " * ' ; < > ( ) . <a | ||
* href="http://www.packetstormsecurity.org/papers/bypass/Blind_XPath_Injection_20040518.pdf">This | ||
* paper</a> suggests disallowing ' and " in queries. | ||
* | ||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
kwwall marked this conversation as resolved.
Show resolved
Hide resolved
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
kwwall marked this conversation as resolved.
Show resolved
Hide resolved
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 32 additions & 0 deletions
32
src/main/java/org/owasp/esapi/errors/NotConfiguredByDefaultException.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package org.owasp.esapi.errors; | ||
|
||
/** | ||
* A {@code NotConfiguredByDefaultException} should be thrown when a method that | ||
* is disabled by default is invoked. | ||
* </p><p> | ||
* See the ESAPI properties "<b>ESAPI.dangerouslyAllowUnsafeMethods.methodNames</b>" | ||
* and "<b>ESAPI.dangerouslyAllowUnsafeMethods.justification</b>" in the | ||
* <b>ESAPI.properties</b> file for additional details. | ||
* </p> | ||
*/ | ||
public class NotConfiguredByDefaultException extends ConfigurationException { | ||
|
||
protected static final long serialVersionUID = 1L; | ||
|
||
public NotConfiguredByDefaultException(Exception e) { | ||
super(e); | ||
} | ||
|
||
public NotConfiguredByDefaultException(String s) { | ||
super(s); | ||
} | ||
|
||
public NotConfiguredByDefaultException(String s, Throwable cause) { | ||
super(s, cause); | ||
} | ||
|
||
public NotConfiguredByDefaultException(Throwable cause) { | ||
super(cause); | ||
} | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.