2013-05-27 54 views
1

好吧,我有件事看起来像下面从用户的输入,众所周知,</script>不会到document.write()函数如何更换</script>到</scr"+"ipt>

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

内工作反正是有取代document.write()函数里面的</script></scr"+"ipt>

+0

差异在哪里? –

+0

是的。 'str_replace('','',$ string);' – JJJ

+1

正确的转义方式''是为了逃避斜线:'<\/script>'。 – arnaud576875

回答

4

有没有办法在document.write()函数里面替换</script></scr"+"ipt>

字符</script>的序列号被分析为由HTML解析器它甚至到达JavaScript分析器之前结束标记。

在发送给浏览器之前,您必须编辑源代码。


这就是说,有更好的方法来解决这个问题,然后找一个location.protocol反正。使用方案相对URI来代替:

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

或重定向所有的HTTP流量为HTML文档HTTPS,这样你永远不会成为它的一个不安全的连接。


您的意见建议,你应该问的问题是:

我如何可以将任意提交的表单数据到了使用PHP的JavaScript字符串字面?

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

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

严重的安全警告:不执行protection from CSRF attacks为允许第三方使您的用户提交的JavaScript到您的网站可能是一个主要的问题不要这样做。

+0

我认为他做了类似'document.write( <?php echo $ user_input;?>)'并且想用PHP替换它---但是不能确定。 – JJJ

+0

我得到这个'”);'这是用户输入的textarea,这意味着我无法控制用户将要给我的东西。但是,我需要以某种方式检测document.write()函数内是否存在'',并用' 替换为 之后,我将按如下方式执行 '<?php echo'< script type =“text/javascript”> document.write(“'。$ _ POST ['input']。'”);';' – user2424527

+1

@ user2424527 - 为什么您允许用户首先将脚本添加到页面?这可能会导致巨大的XSS安全漏洞。 – Quentin

相关问题