添加安全斜杠以防止数组中的 xss


Addslashes safe to protect against xss in array?

今天遇到了一些代码,它有一个用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。