2013-05-27 22 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

相關問題