2010-09-05 58 views
2

我使用的是HTML Purifier,一種PHP「防止XSS並確保符合標準的輸出的過濾器」,用於清理/標準化用戶輸入的標記。如何處理用戶生成的標記中的ASCII轉義字符?

這是用戶輸入的標記的一個例子:

<font face="'Times New Roman', Times">TEST</font> 

其產生:

<span style="font-family:&quot;Times New Roman&quot;, Times;">TEST</span> 

我有點模糊,因爲&quot甚至不是用於轉義字符單引號。這裏最好的做法是什麼,因爲我將在稍後使用此用戶生成的內容?

回答

2

對我來說看起來不錯。

我認爲從單個單引號轉換爲雙引號來源於這樣一個事實,即HTML淨化器拆分整個標籤,並根據自己的規則將它重新組合在一起,這些規則恰恰在引用內容時使用雙引號style屬性。

這也驗證了我的罰款。你正在驗證哪種doctype?

如果我沒有忽視某些東西,我會說這樣可以直接使用。

+0

太棒了 - 如果它看起來不錯,那我就用它!謝謝!另外,我從我的帖子中拿出了驗證評論......它在XHTML 1.0 Strict中正確驗證,這是我需要的。 – Kyle 2010-09-05 09:34:03

1

輸出XHTML有效,但實體轉換錯誤。 <img src="/test" alt="I'm ok"/>將被轉換到<img src="/test" alt="I&quot;m ok">

一個簡單的就足夠了:

$allowed_tags='<font>'; 
echo htmlspecialchars(strip_tags(rawurldecode($input),$allowed_tags),ENT_COMPAT,'UTF-8'); 

,但它不會在<字體>標籤轉換爲<跨度>。

+0

實體轉換不是*錯誤*因此:HTML Purifier解構整個事物,並用新的語法將它粘合在一起。該語法碰巧使用'"'而不是單引號。我真的沒有看到任何問題。 – 2010-09-05 09:52:47

+0

你說的話完全有道理。但我只是試了一下,我得到了'I'm here'這意味着HTML Purifier必須對屬性敏感。但用例的+1 ......我沒有想到,這絕對值得測試。這個解決方案應該對於那些得到'alt ='的人有好處'' – Kyle 2010-09-05 09:55:07

+0

@皮卡我認爲仍然存在的意思是'"'在他的例子中是不合適的,因爲在這個例子中希望單引號標籤。 – Kyle 2010-09-05 09:57:13

相關問題