2012-02-18 42 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