【问题标题】:Is addslashes() safe to prevent XSS in a HTML attribute?addlashes() 是否可以安全地防止 HTML 属性中的 XSS?
【发布时间】:2011-12-02 08:45:21
【问题描述】:

我必须处理以前开发人员留下的旧网络应用程序。它使用addslashes() 来防止HTML 属性上的XSS。

这是一个例子:

<?php
  // all $_POST vars are put through addslashes()

  echo "<input type='hidden' value='" . $_POST['id'] . "' />";
?>

这是否容易受到 XSS 攻击? javascript 是否可以像在 src 属性中一样在 value 属性中运行,例如 src='javascript:alert(99)'。还是可以把value属性拆出来再插入script标签?

编辑:感谢昆汀,我相信它很脆弱。

【问题讨论】:

    标签: php javascript security xss


    【解决方案1】:

    addslashes() 可以安全地防止 HTML 属性中的 XSS 吗?

    这是非常无效的。

    这是否容易受到 XSS 攻击?

    是的。

    javascript 是否可以像在 src 属性中一样在 value 属性中运行,例如 src='javascript:alert(99)'。

    没有

    或者可以将value属性拆分出来再插入script标签?

    数据只需要包含一个" 并且属性被打破。

    当您想将任意字符串插入属性值时,请使用htmlspecialchars

    【讨论】:

    • 使用双引号或单引号并没有爆发,它只是被转义了。它真的容易受到 XSS 攻击吗?
    • @user995579 — 它没有被转义。它前面只有一个斜线。这与在 HTML 中将 d 放在前面相比没有任何意义。
    • 是的,它前面有一个斜线。这将所有用户输入保留在 value 属性中,所以我认为它不能被打破。
    • @user995579 — 不!它没有!斜杠在 HTML 中不是转义字符
    • 我的 XSS 攻击技能在早上这个时候还不能完成一个真正的测试用例,但 this jsfiddle 证明斜杠不是 HTML 转义字符。
    【解决方案2】:

    addslashes() 不适合此任务。请改用htmlspecialchars()htmlentities(),例如

    <input type="hidden"
           value="<?php echo htmlspecialchars($_POST['id'], ENT_QUOTES, 'UTF-8') ?>">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-25
      • 2011-05-31
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 2019-12-11
      • 2014-11-14
      • 1970-01-01
      相关资源
      最近更新 更多