2012-02-18 44 views
1

對於一個項目,我想使用feedparser。基本上,我得到它的工作。強制feedparser對所有內容類型進行消毒

在文檔section about sanitization中描述了並非所有內容類型都已過濾。如何強制feedparser在所有內容類型上執行此操作?

+0

您確定要嗎? Feedparser對其允許的內容非常嚴格。它列入白名單而不是黑名單,以確保只有安全的東西被允許。你擔心會得到什麼? – fitzgeraldsteele 2012-02-20 04:57:53

+0

文檔說,內容類型'text/plain'沒有被消毒,所以如果我想要安全的內容,我必須自己做。但是,如果feedparser可以做到這一點,那將會很不錯。 – Martin 2012-02-20 11:06:29

回答

1

我想你提到的feedparser文檔頁面給出了很好的建議:

*建議您檢查例如內容類型項[I] .summary_detail.type。如果爲text/plain然後它沒有被消毒(你應該執行HTML渲染內容之前逃逸)。*

import cgi 
import feedparser 

d = feedparser.parse('http://rss.slashdot.org/Slashdot/slashdot') 

# iterate through entries. If the type is not text/html, HTML clean it 
for entry in d.entries: 
    if entry.summary_detail.type != 'text/html': 
     print cgi.escape(entry.summary) 
else: 
    print entry.summary 

當然,也有幾十個,你可以通過條目根據迭代方法是什麼一旦他們乾乾淨淨,你就想和他們一起做。

+0

爲了更好地保存,我查看了feedparser代碼。看來,只有文本/ HTML真的被消毒,所以我測試如果類型不是文本/ HTML,然後自己消毒。但除了細節,你的答案是完全正確的。 – Martin 2012-02-24 08:43:21