2009-09-18 48 views
1

我想要製作一個正則表達式,它只會查找並刪除腳本標記(它是我想刪除的唯一標記,因爲我認爲它是唯一可以造成破壞的標記)。這會刪除所有可能的腳本標記嗎?

反正我知道有很多方法可以編寫一個仍然有效的腳本標記。這會抓住他們嗎?

<\s*script\s*>.*?<\s*\/script\s*> 

編輯

或將它更好地嘗試將它們全部更改爲安全標籤?你知道它在標籤上的html編碼嗎?但它只能在腳本標籤上,因爲我仍然希望允許其他html標籤,如<b>和東西。

+0

請參閱我的回答編輯。 – 2009-09-21 00:51:33

回答

7

在要篩選這樣的事情幾乎所有情況下,最好是檢查你特別希望允許,而不是你想要什麼禁止。在HTML源代碼中有幾十種創造性的方式來隱藏<script>標籤,並且你不想嘗試追趕人們可能發明的新標籤。另一方面,你可以很容易地創建一個可接受的標籤列表,並讓人們使用它們。

+0

我該如何製作這個可接受的標籤列表?我所有來自豐富的HTML編輯器的東西都被作爲一種風格(用於字體重量,邊距保留)傳遞給大多數時間,但它也使用像 chobo2 2009-09-18 18:37:44

1

這正則表達式將允許類似<script foo=bar><script>通過獲得(和可能造成的破壞類似的事情無數,但也有像這樣的事情,人們往往忘記:

<foo onload="document.write('<scri'+'pt>...<'+'/script>')"></foo> 

這也使生活。困難:-(

3

這不是會造成損壞的唯一標籤考慮以下幾點:

<a href="javascript:window.close()"> 

此外,沒有,也不會。再次,考慮以下因素:

<script language="javascript">window.close()</script> 

即使你展開它來處理腳本標記屬性,何談:

<script src="http://somesite.com/malicious.js" /> 

說實話,以我個人的估計,最好的辦法是要麼有一個非常明確的允許標記/屬性的白名單,要麼引入你自己的標記,並且完全禁止裸html。

編輯:

爲大家介紹一些信息:

白名單僅僅是被允許的事情列出來,其他的一切都是不允許的,而不是你最初的黑名單想法,在那裏腳本標記是不允許的,但其他所有內容都是允許的。

+0

每個人都說使用「白名單」,但實際上沒有人告訴我如何。他們只是說不要使用正則表達式,但不要告訴我如何實際在C#中製作 – chobo2 2009-09-18 18:36:29

0

您可以使用這些Samples是demonstrats如何使用MSHTML具有非用戶界面的解析器那裏你可以刪除腳本標記以及可以實現定製服務主機完全可以在應用程序中禁用JavaScript和這裏是一個discussion其曾經幫助過我一次。

有兩種方法,1您可以設置設計模式,不執行JavaScript和其他是你可以禁用選項URLACTION_SCRIPT_JAVA_USE;