今天遇到了一些代码,它有一个用php制作的javascript数组,只使用php的addslashes()来清理。起初我认为这是一个简单的XSS漏洞,但我无法看到它的缺陷。以下是我所说的一个例子:
傅.php
$itemList = "[";
foreach ($array as $item)
{
$itemList .= "'".addslashes($item)."',";
}
$itemList = "'']";
酒吧.html
<script>
var a = <?php echo $itemList; ?>
</script>
显然,像']; alert("xss"); b=['
这样的东西不会有效,因为它会变成'']; alert('"xss'"); b=[''
.那么这真的安全吗,我的代码气味不存在吗?
'
'
编辑:
有人可以告诉我这是如何不起作用的吗?我知道这不是最佳实践,也不会在我的代码中使用它,但如果我想重写代码,我需要证明来说服其他人
不,不不不不。
为正确的工作使用正确的功能。
addslashes
不是任何上下文的转义函数,它只是添加斜杠。
如果要打印为 HTML,请使用htmlentities
(如果适用,请使用htmlspecialchars
)。
如果要打印到 JavaScript,请使用 json_encode
。
如果您正在构建 MySQL 查询,请使用mysql_real_escape_string
等。
例如,使用 addslashes
而不是 json_encode
时滥用的机会是字符串:"</script><iframe src=hxxp://phising.mywebsite.com>"
这将结束脚本并插入来自不可信且可能有害的域的 iframe。