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
Difference between revisions of "Abridged XSS Prevention Cheat Sheet"
m (→Introduction) |
m (→XSS Prevention) |
||
Line 3: | Line 3: | ||
Cross site scripting is the most common web vulnerability. Cross Site Scripting is a dangerous threat since it allows an attacker to trick a victim into executing malicious client-side script in a browser. This cheat sheet is a derivative work of the [[XSS (Cross Site Scripting) Prevention Cheat Sheet]] and will assist web developers in eliminating XSS from their applications. | Cross site scripting is the most common web vulnerability. Cross Site Scripting is a dangerous threat since it allows an attacker to trick a victim into executing malicious client-side script in a browser. This cheat sheet is a derivative work of the [[XSS (Cross Site Scripting) Prevention Cheat Sheet]] and will assist web developers in eliminating XSS from their applications. | ||
− | = XSS Prevention = | + | = XSS Prevention by Context = |
+ | |||
+ | The following snippets of HTML demonstrate how to safely render untrusted data in a variety of different contexts. | ||
{| class="wikitable nowraplinks" | {| class="wikitable nowraplinks" | ||
Line 20: | Line 22: | ||
| Safe HTML Attributes | | Safe HTML Attributes | ||
| <input type="text" name="fname" value="<span style="color:red;">UNTRUSTED DATA</span>"> | | <input type="text" name="fname" value="<span style="color:red;">UNTRUSTED DATA</span>"> | ||
− | | <ul><li>[https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#RULE_.232_-_Attribute_Escape_Before_Inserting_Untrusted_Data_into_HTML_Common_Attributes Aggressive HTML Entity Encoding]</li><li>Only place untrusted data into a whitelist of safe attributes.</li><li>Strictly validate unsafe attributes such as background, id and name.</ul> | + | | <ul><li>[https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#RULE_.232_-_Attribute_Escape_Before_Inserting_Untrusted_Data_into_HTML_Common_Attributes Aggressive HTML Entity Encoding]</li><li>Only place untrusted data into a whitelist of safe attributes (listed below).</li><li>Strictly validate unsafe attributes such as background, id and name.</ul> |
|- | |- | ||
| String | | String | ||
Line 41: | Line 43: | ||
| <script>var currentValue='<span style="color:red;">UNTRUSTED DATA</span>';</script><br/><script>someFunction('<span style="color:red;">UNTRUSTED DATA</span>');</script> | | <script>var currentValue='<span style="color:red;">UNTRUSTED DATA</span>';</script><br/><script>someFunction('<span style="color:red;">UNTRUSTED DATA</span>');</script> | ||
| <ul><li>Ensure JavaScript variables are quoted</li><li>JavaScript Hex Encoding</li><li>JavaScript Unicode Encoding</li><li>Avoid backslash encoding (\" or \' or \\)</li></ul> | | <ul><li>Ensure JavaScript variables are quoted</li><li>JavaScript Hex Encoding</li><li>JavaScript Unicode Encoding</li><li>Avoid backslash encoding (\" or \' or \\)</li></ul> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| HTML | | HTML | ||
Line 89: | Line 81: | ||
'''''Safe HTML Attributes include:''''' align, alink, alt, bgcolor, border, cellpadding, cellspacing, class, color, cols, colspan, coords, dir, face, height, hspace, ismap, lang, marginheight, marginwidth, multiple, nohref, noresize, noshade, nowrap, ref, rel, rev, rows, rowspan, scrolling, shape, span, summary, tabindex, title, usemap, valign, value, vlink, vspace, width | '''''Safe HTML Attributes include:''''' align, alink, alt, bgcolor, border, cellpadding, cellspacing, class, color, cols, colspan, coords, dir, face, height, hspace, ismap, lang, marginheight, marginwidth, multiple, nohref, noresize, noshade, nowrap, ref, rel, rev, rows, rowspan, scrolling, shape, span, summary, tabindex, title, usemap, valign, value, vlink, vspace, width | ||
+ | |||
+ | = XSS Prevention Dangerous Contexts = | ||
+ | |||
+ | The following snippets of HTML demonstrate dangerous contexts that developers should always avoid. | ||
+ | |||
+ | {| class="wikitable nowraplinks" | ||
+ | |- | ||
+ | ! Data Type | ||
+ | ! Context | ||
+ | ! Code Sample | ||
+ | ! Danger | ||
+ | |- | ||
+ | | String | ||
+ | | HTML Comment | ||
+ | | <!-- <span style="color:red;">UNTRUSTED DATA</span> --> | ||
+ | | <ul><li>There are a variety of browser quirks that make this context, even when encoded, dangerous, and therefor should be avoided.</li></ul> | ||
+ | |- | ||
+ | | String | ||
+ | | JavaScript Comment | ||
+ | | /* <span style="color:red;">UNTRUSTED DATA</span> */ | ||
+ | | <ul><li>Danger, for example Chrome JavaScript comments [http://sla.ckers.org/forum/read.php?24,36929]</li></ul> | ||
= Output Encoding = | = Output Encoding = |
Revision as of 03:17, 28 November 2011
Introduction
Cross site scripting is the most common web vulnerability. Cross Site Scripting is a dangerous threat since it allows an attacker to trick a victim into executing malicious client-side script in a browser. This cheat sheet is a derivative work of the XSS (Cross Site Scripting) Prevention Cheat Sheet and will assist web developers in eliminating XSS from their applications.
XSS Prevention by Context
The following snippets of HTML demonstrate how to safely render untrusted data in a variety of different contexts.
Data Type | Context | Code Sample | Defense |
---|---|---|---|
String | HTML Body | <span>UNTRUSTED DATA</span> | |
String | Safe HTML Attributes | <input type="text" name="fname" value="UNTRUSTED DATA"> |
|
String | GET Parameter | <a href="/site/search?value=UNTRUSTED DATA">clickme</a> | |
String | Untrusted URL in a SRC or HREF attribute | <a href="UNTRUSTED DATA">clickme</a> <iframe src="UNTRUSTED DATA" /> |
|
String | CSS Value | <div style="width: UNTRUSTED DATA;">Selection</div> |
|
String | JavaScript Variable | <script>var currentValue='UNTRUSTED DATA';</script> <script>someFunction('UNTRUSTED DATA');</script> |
|
HTML | HTML Body | <div>UNTRUSTED HTML</div> | |
JavaScript | HTML Body | <div>UNTRUSTED JAVASCRIPT</div> |
|
String | DOM XSS | TODO | |
String | AJAX/JSON Parsing | JSON.parse(UNTRUSTED JSON DATA) |
|
String | AJAX/HTML | TODO |
|
String | AJAX/XML Parsing | TODO | TODO |
String | Framework Protections | <span>UNTRUSTED DATA</span> |
|
Safe HTML Attributes include: align, alink, alt, bgcolor, border, cellpadding, cellspacing, class, color, cols, colspan, coords, dir, face, height, hspace, ismap, lang, marginheight, marginwidth, multiple, nohref, noresize, noshade, nowrap, ref, rel, rev, rows, rowspan, scrolling, shape, span, summary, tabindex, title, usemap, valign, value, vlink, vspace, width
XSS Prevention Dangerous Contexts
The following snippets of HTML demonstrate dangerous contexts that developers should always avoid.
Data Type | Context | Code Sample | Danger | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
String | HTML Comment | <!-- UNTRUSTED DATA --> |
| ||||||||||||
String | JavaScript Comment | /* UNTRUSTED DATA */ |
Output EncodingThe purpose of output encoding (as it relates to Cross Site Scripting) is to convert untrusted input into a safe form where the input is displayed as data to the user without executing as code in the browser. The following charts details a list of critical output encoding methods needed to stop Cross Site Scripting.
Related ArticlesOWASP Cheat Sheets Project Homepage
Authors and Primary EditorsJim Manico - jim [at] owasp.org |