2009-10-01 39 views
4

我需要檢查用戶提交的HTML是否包含任何javascript。我使用PHP進行驗證。檢查HTML中是否包含PHP中的JavaScript

感謝您的幫助!

+0

它可能是一個更好的主意,定義一個接受的HTML子集(標籤,屬性和內容),並去除任何不被接受的東西。它可以節省一些令人討厭的驚喜。 – 2009-10-01 10:36:35

+0

你是否絕對需要檢測JavaScript代碼的存在,或者只是確保代碼被消毒/不可執行? – 2009-10-01 10:37:11

+0

理想情況下,如果它包含任何類型的javascript,我會在提交階段向提交HTML的用戶拋出錯誤,並且從不提交它。 – David 2009-10-01 12:08:56

回答

4

採取不同的方法並使用類似HTML Purifier的東西來過濾掉任何你不想要的東西可能會更好。我認爲在沒有正確解析HTML的情況下安全地移除任何javascript的可能性將會非常困難。

+1

+1使用現有的流行庫。 HTML解析很難*,使用你自己的hacked-up正則表達式是失敗的祕訣。我不能保證HTML淨化器是安全的(過去一直存在漏洞),但是它會比你第一次嘗試的時候要早。 – bobince 2009-10-01 12:03:35

0

您可以使用正則表達式將腳本標記移除爲Pawka狀態。 我在這here找到了一個線程。

基本上它是:

$list=preg_replace('#<script[^>]*>.*?</script>#is','',$list); 

代碼是從網頁,而不是我寫的。

+1

怎麼樣的JavaScript,不需要在腳本標記?比如'onclick'中的東西? – Evernoob 2009-10-01 10:32:19

+0

事實上,正則表達式需要擴展才能獲得所有的事件處理函數。但是,也許有幾種表達方式會更容易閱讀......無論如何,這是一個忘記考慮的好點。 – KB22 2009-10-01 10:36:03

+0

如上所述,我認爲過濾器通過將結束標籤放在HTML註釋中(我確信真正的麻煩製造者有其他數百種技巧)。至少刪除?來自中央後。* – OJW 2009-10-01 10:51:31

0

您需要掃描<script>標籤,但您還需要掃描屬性,如onclick=""onmouseover=""等...可以有javascript而不需要腳本標記。

+0

'' – OJW 2009-10-01 15:04:22

2

OK,讓我們不是所有的天真在這裏:

<script> "<!-- </script> -->"; document.write("hello world"); </script>(應當經regexadvice建議的過濾器)

過濾出JavaScript是一種安全關鍵的事情,這意味着你需要徹底地做到這一點並適當地,不是一些快速入侵。

相關問題