在JS中回显PHP值时无效的令牌

时间:2019-01-16 08:30:47

标签: javascript php

我将PHP值回显到JavaSript字符串中,如下所示:

var x = '<?php echo addcslashes($_GET['value'], "'") ?>';

工作正常,但是例如,当我将$_GET['value']设置为"><script>alert('hi')</script>时,我得到了:

未捕获的语法错误:无效或意外的令牌

在DevTools中,该字符串看上去正确地转义了,但是没有转义,因为它暂停了其余的JS代码。

var x = '"><script>alert(\'hi\')</script>';

1 个答案:

答案 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>

(如果您使用此方法,请记住在结果中可能存在"的转义字符)