4

今天遇到了一些代码,它有一个 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=[\'. 那么这真的安全吗,而且我的代码气味不存在?

`

`

编辑:

有人可以告诉我这怎么行吗?我知道这不是最佳实践,并且不会在我的代码中使用它,但是如果我想重写代码,我需要证明来说服其他人

4

1 回答 1

6

不,不,不,不,不,

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

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

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

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

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

等等


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

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

于 2012-05-10T16:48:20.713 回答