解析如何防止XSS跨站脚本攻击
2009-02-12 13:55:30 来源:WEB开发网Stringsafe=ESAPI.encoder().encodeForHTML(request.getParameter("input"));
No.3 – 在向HTML常见属性插入不可信数据前进行属性解码
这条规则是将不可信数据转化为典型属性值(如宽度、名称、值等),这不能用于复杂属性(如href、src、style或者其他事件处理程序)。这是及其重要的规则,事件处理器属性(为HTML JavaScript Data Values)必须遵守该规则。
<divattr=...ESCAPEUNTRUSTEDDATABEFOREPUTTINGHERE...>content</div> insideUNquotedattribute
<divattr='...ESCAPEUNTRUSTEDDATABEFOREPUTTINGHERE...'>content</div> insidesinglequotedattribute
<divattr="...ESCAPEUNTRUSTEDDATABEFOREPUTTINGHERE...">content</div> insidedoublequotedattribute
除了字母数字字符外,使用小于256的ASCII值HH格式(或者命名的实体)对所有数据进行解码以防止切换属性。这条规则应用广泛的原因是因为开发者常常让属性保持未引用,正确引用的属性只能使用相应的引用进行解码。未引用属性可以被很多字符破坏,包括[space] % * + , - / ; < = > ^ 和 |。
ESAPI参考实施
String safe = ESAPI.encoder().encodeForHTMLAttribute( request.getParameter( "input" ) );
No.4 – 在向HTML JavaScript Data Values插入不可信数据前,进行JavaScript解码
这条规则涉及在不同HTML元素上制定的JavaScript事件处理器。向这些事件处理器放置不可信数据的唯一安全位置就是“data value”。在这些小代码块放置不可信数据是相当危险的,因为很容易切换到执行环境,因此请小心使用。
更多精彩
赞助商链接