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

Joe*_*ssi 4 javascript php arrays xss

今天看到一些代码有一个javascript数组,用php制作,只使用php的addslashes()进行清理.起初我认为这是一个简单的XSS漏洞,但我还没有看到它的缺陷.这是我正在谈论的一个例子:

foo.php

$itemList = "[";

foreach ($array as $item) 
{
    $itemList .= "'".addslashes($item)."',";
}

$itemList = "'']";
Run Code Online (Sandbox Code Playgroud)

一个bar.html

<script>
    var a = <?php echo $itemList; ?>
</script>
Run Code Online (Sandbox Code Playgroud)

显然,类似的东西']; alert("xss"); b=['不会有效,因为它会变成\']; alert(\"xss\"); b=[\'.那么这是非常安全的,我的代码味道是不存在的吗?

`

`

编辑:

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

Hal*_*yon 6

不,不,不,不,.

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

addslashes不是任何情况下的逃生功能,它只是增加了斜线.

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

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

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

等等


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

这将结束脚本并从不可靠且可能有害的域中插入iframe.