解析如何防止XSS跨站脚本攻击
2009-02-12 13:55:30 来源:WEB开发网<script>alert('...ESCAPEUNTRUSTEDDATABEFOREPUTTINGHERE...')</script> insideaquotedstring
<script>x=...ESCAPEUNTRUSTEDDATABEFOREPUTTINGHERE...</script> onesideofanexpression
<divonmouseover=...ESCAPEUNTRUSTEDDATABEFOREPUTTINGHERE...</div> insideUNquotedeventhandler
<divonmouseover='...ESCAPEUNTRUSTEDDATABEFOREPUTTINGHERE...'</div> insidequotedeventhandler
<divonmouseover="...ESCAPEUNTRUSTEDDATABEFOREPUTTINGHERE..."</div> insidequotedeventhandler
除了字母数字字符外,使用小于256的ASCII值xHH格式 对所有数据进行解码以防止将数据值切换至脚本内容或者另一属性。不要使用任何解码捷径(如" )因为引用字符可能被先运行的HTML属性解析器相匹配。如果事件处理器被引用,则需要相应的引用来解码。这条规则的广泛应用是因为开发者经常让事件处理器保持未引用。正确引用属性只能使用相应的引用来解码,未引用属性可以使用任何字符(包括[space] % * + , - / ; < = > ^ 和|)解码。同时,由于HTML解析器比JavaScript解析器先运行,关闭标签能够关闭脚本块,即使脚本块位于引用字符串中。
ESAPI参考实施
Stringsafe=ESAPI.encoder().encodeForJavaScript(request.getParameter("input"));
No.5 – 在向HTML 样式属性值插入不可信数居前,进行CSS解码
当你想将不可信数据放入样式表或者样式标签时,可以用此规则。CSS是很强大的,可以用于许多攻击。因此,只能在属性值中使用不可信数据而不能在其他样式数据中使用。不能将不可信数据放入复杂的属性(如url,、behavior、和custom (-moz-binding))。同样,不能将不可信数据放入允许JavaScript的IE的expression属性值。
更多精彩
赞助商链接