【问题标题】:HTML attributes escapingHTML 属性转义
【发布时间】:2015-10-10 04:14:31
【问题描述】:

我正在阅读 OWSAP 预防表,但我对第 2 条规则感到困惑。

规则 #2 - 在将不受信任的数据插入 HTML 通用属性之前进行属性转义 规则 #2 用于将不受信任的数据放入典型的属性值中,例如宽度、名称、值等。这不应该用于复杂的属性,例如 href、src、style, 或任何事件处理程序,例如鼠标悬停。对于 HTML JavaScript 数据值,事件处理程序属性应遵循规则 #3,这一点非常重要。

不应该转义复杂属性的原因是什么,(这不应该用于href,src,style等复杂属性)这会造成歧义或破坏属性?

https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

【问题讨论】:

    标签: javascript html escaping encode


    【解决方案1】:

    并不是它们不应该被转义,而是转义它们不足以使数据免受 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 编码器)。

    等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多