2013-03-28 14 views
1

我正在使用CKEditor讓用戶發表他們的評論。我以爲使用htmlpurifier來保護我的html。但是當我嘗試它時,它實際上刪除了CKEditor完成的所有格式。 的CKEditor的生成以下HTMLhtmlpurifier刪除CKEDitor完成的所有格式化

<div class="originalpost"><span style="color:#B22222;"> 
<em><u><strong><span style="font-size:250%;"> 
This is Pakistan</span></strong></u></em></span></div> 

與htmlpurifier的HTML淨化後變成這個樣子

<div class="&quot;originalpost&quot;"><span><em><u><strong> 
<span>This is Pakistan</span></strong></u></em></span></div> 

它實際上消除所有的內聯CSS樣式,也class="&quot;originalpost&quot;"不明白能。 我用下面的方式與htmlpurifier

require_once("path\HTMLPurifier.auto.php"); 
$config = HTMLPurifier_Config::createDefault(); 
$purifier = new HTMLPurifier($config); 
$html = "xyzhtml"; 
$clean_html = $purifier->purify($html); 

我想保持用戶的格式來淨化HTML,如何配置htmlpurifier保持用戶格式化也不會改變內聯CSS。

+0

有涉及'style'屬性的一些XSS攻擊,你確定你想啓用它? HTMLPurifier的目的之一就是擺脫它們。 – 2013-03-28 10:11:26

+0

@DiegoAgulló,我如何在不允許使用style屬性的情況下保留用戶格式,因爲我正在使用CKEditor發佈評論。 – Munib 2013-03-28 10:18:22

回答

0

我敢打賭,你需要關閉Sybase引號。

+0

什麼是Sybase Quotes? – Munib 2013-03-28 11:59:33

2

它實際上消除所有的內聯CSS樣式

內聯樣式確實是危險的 - JavaScript可以被注入到他們使用url(),IE的狡猾expression()和瀏覽器特定的行爲擴展。

HTMLPurifier 可以解析內聯樣式並過濾危險的屬性和值。您可以在列入白名單的屬性中加入style以啓用此功能。

$config->set('HTML.AllowedAttributes', '*.style, ...'); 

style不包括默認屬性列表中,因爲解析風格是很多額外的複雜性(伴隨錯誤的機會)和大多數應用程序並不需要它。

如果您願意,您可以配置允許使用%CSS.AllowedProperties的屬性。

我無法重現&quot;問題,但肯定保證PHP的magic_quotes_gpc選項關閉是一種全方位的好事......