1

好的,我从用户输入中得到了如下所示的内容,已知 a</script>在 document.write() 函数中不起作用

<script type="text/javascript">document.write("<script type='text/javascript' src='"+(location.protocol == 'https:' ? 'https:' : 'http:') + "//www.domain.com/script.js'></script>");</script>

反正有没有替换</script></scr"+"ipt>里面的 document.write() 函数?

4

1 回答 1

4

反正有没有替换</script></scr"+"ipt>里面的 document.write() 函数?

不。

字符序列</script>在到达 JavaScript 解析器之前就被 HTML 解析器解析为结束标记。

在将源代码发送到浏览器之前,您必须对其进行编辑。


也就是说,有更好的方法来解决问题,然后再寻找location.protocol。请改用方案相对 URI:

<script src="//www.example.com/script.js'></script>

或者将 HTML 文档的所有 HTTP 流量重定向到 HTTPS,这样您就永远不会在不安全的连接上提供它。


您的评论表明您应该问的问题是:

如何使用 PHP 将任意提交的表单数据放入 JavaScript 字符串文字?

使用该json_encode功能。如果你传递一个字符串,它会给你一个适合插入<script>元素的 JavaScript 转义字符串。(虽然它不是有效的 JSON 文本,因为它必须在最外层有一个对象或数组)。

<script>
    document.write(<?php echo json_encode($_POST['script']); ?>);
</script>

严重的安全警告:如果没有实施CSRF 攻击保护,请不要这样做,因为允许第三方导致您的用户向您的站点提交 JavaScript 可能是一个主要问题。

于 2013-05-27T10:10:31.290 回答