【问题标题】:Addslashes safe to protect against xss in array?添加斜杠可以安全地防止数组中的 xss?
【发布时间】:2012-05-19 07:12:44
【问题描述】:

今天遇到了一些代码,它有一个 javascript 数组,用 php 制作,只使用 php 的 addlashes() 来清理。起初我以为这是一个简单的 XSS 漏洞,但我一直无法看到它的缺陷。这是我所说的一个例子:

foo.php

$itemList = "[";

foreach ($array as $item) 
{
    $itemList .= "'".addslashes($item)."',";
}

$itemList = "'']";

bar.html

<script>
    var a = <?php echo $itemList; ?>
</script>

显然像']; alert("xss"); b=[' 这样的东西不会有效,因为它会变成\']; alert(\"xss\"); b=[\'那么这真的安全吗,而且我的代码味道不存在?

`

`

编辑:

谁能告诉我如何这不起作用?我知道这不是最佳实践,并且不会在我的代码中使用它,但如果我想重写代码,我需要 proof 来说服其他人

【问题讨论】:

    标签: php javascript arrays xss


    【解决方案1】:

    不不不不不

    为正确的工作使用正确的功能。

    addslashes 不是适用于任何上下文的转义函数,它只是添加斜杠。

    如果您要打印到 HTML,请使用 htmlentities(或 htmlspecialchars,如果适用)。

    如果您要打印到 JavaScript,请使用 json_encode

    如果您正在构建 MySQL 查询,请使用 mysql_real_escape_string

    等等


    使用addslashes 而不是json_encode 时的滥用机会例如是字符串:"&lt;/script&gt;&lt;iframe src=hxxp://phising.mywebsite.com&gt;"

    这将结束脚本并插入来自不可信且可能有害的域的 iframe。

    【讨论】:

    • 我知道这不是正确的工具。这是在我看到的预先存在的代码库中。我很好奇的是,这在现实世界中是否脆弱?我知道最佳做法是什么
    • 是的,它很容易受到攻击。 addlashes 不支持 unicode,并且有相当数量的有效 unicode 字符可以使 addlashes 愉快地变成注入字符。
    • 至少你会得到一个语法错误,这会破坏整个页面。
    • 你能举个例子吗?我真的很想证明这是坏的,但没有证据就不能把它发送出去
    • 一个非常简单的例子是字符串"&lt;/script&gt;",这将结束脚本并将其余部分溢出到普通视图中。然后你可以添加像"&lt;iframe src=hxxp://phishing.mywebsite.com&gt;" 这样的东西。 json_encode 转义 / 正是(且仅)这个原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2021-04-18
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多