我将PHP值回显到JavaSript字符串中,如下所示:
var x = '<?php echo addcslashes($_GET['value'], "'") ?>';
工作正常,但是例如,当我将$_GET['value']
设置为"><script>alert('hi')</script>
时,我得到了:
未捕获的语法错误:无效或意外的令牌
在DevTools中,该字符串看上去正确地转义了,但是没有转义,因为它暂停了其余的JS代码。
var x = '"><script>alert(\'hi\')</script>';
答案 0 :(得分:2)
内联Javascript标记中不能存在连续字符</script>
。 HTML标记在Javascript之前进行了解析,而</script>
标签开始之后的HTML标记中的<script>
表示该标签的结尾。
您可以改为串联,这样,例如,您的文本将生成
var x = '"><script>alert(\'hi\')</scr' + 'ipt>';
通过使用str_replace
:
$withSlashes = addcslashes($_GET['value'], "'");
$xContent = str_replace('</script>', "</scr' + 'ipt>", $withSlashes);
...
var x = '<?php echo $xContent ?>';
但是最好不要动态构造Javascript代码。考虑改用数据属性,并将Javascript分为自己的单独文件,例如
<script
src="script.js"
data-x="<?php echo addcslashes($_GET['value'], "'") ?>"
></script>
(如果您使用此方法,请记住在结果中可能存在"
的转义字符)