2009-09-21 82 views
2

如何編寫一個模式以與PHP的preg_match函數一起使用來檢查包含腳本標記的字符串?使用preg_match查找字符串是否包含腳本標記

+0

通過'腳本標記'你的意思是像/i」,$ string); – 2009-09-21 12:29:56

+1

或者只是'htmlspecialchars'。 – Gumbo 2009-09-21 12:37:06

1

Don't use regular expressions for processing xml/html.你還是使用DOM classes of PHP,應該是遠遠超過任何正則表達式更可靠,你會發現:

$document = new DOMDocument(); 
$document->loadHtml($html); 
$xpath = new DOMXPath($document); 
if ($xpath->query('//script')->length > 0) { 
    // document contains script tags 
} 
+0

這個問題只是說「字符串」,這並不一定意味着有一個文檔結構... – conny 2009-09-21 12:26:47

3

出於安全原因?基本上,你不能。這裏有一些事情我瞭解到在過去這樣做:

  • <a href="javascript:something">...</a>
  • <p onmouseover="something">
  • 有一些URL方案等效於在不同的瀏覽器javascript:,像jscript:mocha:livescript:的。大多數都沒有記錄。
  • 舊版本的Netscape處理某些字節(0x94和0x95,我認爲?)等同於<>。希望在現代瀏覽器中沒有這樣的東西。
  • VBScript。

MySpace試圖做到這一點,其結果是「Samy是我的英雄」蠕蟲在其他許多安全災難中將服務中斷了一天左右。

所以,如果你想接受HTML的有限子集,僅包括文本和格式,你必須白名單,不黑名單。你必須將標籤,屬性列入白名單,並且如果你想允許鏈接,URL方案。這裏有一些現有的庫,但我不知道在PHP中推薦哪些庫。

相關問題