Addslashes安全,以防止数组中的xss?

时间:2012-05-10 16:44:26

标签: php javascript arrays xss

今天遇到了一些代码,它们有一个javascript数组,用php制作,只使用php的addslashes()进行清理。起初我认为这是一个简单的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=[\'这样做真的很安全,我的代码味道不存在吗?

`

`

修改

有人可以告诉我 这不起作用吗?我知道这不是最佳做法,也不会在我的代码中使用它,但如果我想重写代码,我需要证明来说服其他人

1 个答案:

答案 0 :(得分:6)

不,否否否否

使用正确的功能来完成正确的工作。

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

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

如果您要使用json_encode打印到JavaScript。

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


使用addslashes代替json_encode时滥用的机会,例如字符串:"</script><iframe src=hxxp://phising.mywebsite.com>"

这将结束脚本并从不值得信任且可能有害的域中插入iframe。