2017-06-21 49 views
1

有沒有什麼方法可以從PHP中的html元素中刪除像'onload','onclick'等js事件?PHP:從html中刪除javascript事件

例如,如果給出<a (onclick)="alert('hi')">Link</a>,則所需輸出應爲<a>Link</a>

我就是這麼做的:

$dom = new DOMDocument; 
$dom->loadHTML($request->request->get('description')); 
$nodes = $dom->getElementsByTagName('*'); 

foreach($nodes as $node) 
{ 
    if ($node->hasAttribute('onload')) 
    { 
     $node->removeAttribute('onload'); 
    } 

    if ($node->hasAttribute('onclick')) 
    { 
     $node->removeAttribute('onclick'); 
    } 
} 

$dom->saveHTML(); 

但是我不知道它是否是一個安全的方式,因爲如果以後新的JS事件將被創建,我會忘了黑名單的機會是真的。

+3

你有沒有考慮採用白名單的方法,只允許特定的屬性和其餘的核武器? –

+0

請注意,這不會影響文檔中其他地方的任何JavaScript代碼。該元素仍然可以具有點擊處理程序,而不是來自內聯屬性的元素。 – David

+0

是的,如果文檔中沒有內聯js,它也應該被刪除。但是,我將刪除