我正在阅读 OWSAP 预防表,但我对第 2 条规则感到困惑。
RULE #2 - Attribute Escape Before Inserting Untrusted Data into HTML Common Attributes Rule #2 is for putting untrusted data into typical attribute values like width, name, value, etc. This should not be used for complex attributes like href, src, style, or any of the event handlers like onmouseover. It is extremely important that event handler attributes should follow Rule #3 for HTML JavaScript Data Values.
复杂属性不应该被转义的原因是什么,(这不应该用于像 href、src、style 这样的复杂属性),这会产生歧义或破坏属性?
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
最佳答案
并不是说它们不应该被转义,而是转义它们不足以使数据免受 XSS 攻击。
<小时/>转义数据会阻止它脱离属性并启动新的属性或元素。
如果该属性已经可以执行 JavaScript,那么这还不够。
这很容易受到 XSS 攻击:
$external_input = '"><script>alert("got you");</script>';
?><input class="<?php echo $external_input ?>">
但是如果你转义$external_input
,那么属性值就变得毫无意义。它没有害处。
另一方面,即使 HTML 被转义,以下内容也允许执行任意脚本。
$external_input = 'alert("got you");';
?><input onmouseover="<?php echo htmlspecialchars($external_input); ?>">
<小时/>
您需要确保数据对于值的任何数据格式都是安全的(然后您仍然应该转义它)。
将值放入 href
属性中?确保它是一个 URL,并且 URL 方案是您信任的方案(例如 http:
而不是 javascript:
)。
在脚本中输入值?将其转义为 JS(您通常会使用 JSON 编码器)。
等等。
关于javascript - HTML 属性转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31526679/