今天遇到了一些代码,它们有一个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=[\'
。 这样做真的很安全,我的代码味道不存在吗?
`
`
修改
有人可以告诉我 这不起作用吗?我知道这不是最佳做法,也不会在我的代码中使用它,但如果我想重写代码,我需要证明来说服其他人
答案 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。