0

我正在使用 SyndicationFeed 阅读来自外部站点的 Rss / Atom 提要

 XmlReader reader = XmlReader.Create(RssFeed);
 SyndicationFeed feed = SyndicationFeed.Load(reader); 

在阅读 Rss 和 atom 提要时避免常见安全风险的最佳方法是什么

这里有一些说明:http ://www.cgisecurity.com/rss.html

同时仍然允许在我的网站上显示 Html 格式的文本和视频内容?

编辑

安全风险:

提要可能包含恶意标记,如下所示

<?xml version="1.0" encoding="ISO-8859-1"?> <rss version="2.0"> <channel> 
<title> <script>alert('Channel Title')</script> 
</title>  
<link>http://www.mycoolsite.com/ 
</link> 
<description> <script>alert('Channel Description')</script> </description> 
<language>en-us 
</language>  
<copyright>Mr Cool 2006</copyright> 
<pubDate>Thu, 22 Jun 2006 11:09:23 EDT</pubDate> <ttl>10</ttl> <image>  
<title> <script>alert('Channel Image Title')</script> 
</title>  
<link>http://www.mycoolsite.com/</link> 
<url>http://www.mycoolsite.com/logo.gif</url> 
<width>144</width> 

呈现时,Javascript 代码将运行并显示警报框。此内容可能是恶意的,

跨站请求伪造

攻击者可以利用跨站点请求伪造(CSRF 或 XSRF)攻击例如:

<img 
src="http://www.mystocktradersite.com/transaction.asp?sell=google&buy=Microsoft&nums
hares=1000"> 

在网站上发布提要的用户必须登录,但任何人都可以注册一个帐户。我想知道允许合法用户让他们的 Rss / atom 提要读取和显示图像的最佳方法,但不允许恶意内容。

我目前正在查看 microsoft antiXss 库来帮助解决这个http://wpl.codeplex.com/

编辑 2

我正在 mvc Web 应用程序中将其读入我的控制器,并希望在视图中呈现 rss 提要。

这是完整的操作结果

public PartialViewResult Blog(int id, string blogId)
        {
             var project = _projectRepository.GetById(id);

             XmlReader reader = XmlReader.Create(project.RssFeed);
             SyndicationFeed feed = SyndicationFeed.Load(reader);

             //select out a collection of anonymous types from RSS feed
                 var blog = (from rss in feed.Items
                             where rss.Id == blogId
                             select new VmProjectBlog
                             {
                                 Id = rss.Id,
                                 Title = rss.Title.Text,
                                 PublishedDate = rss.PublishDate.DateTime,
                                 Description = rss.Summary.Text
                             }).FirstOrDefault();

                 return PartialView("_Blog", blog);

}

这是视图

<div id="summary">           
     <div class="full blog">                        
        <div class="article large">
            <div class="title">
                <h2>@Model.Title</h2>
            </div>
            <div class="post">
                @Html.Raw(Model.Description)                
           </div>                        
        </div>
        <a class="button-lrg-blue" href="@Model.Link"><span>Read full blog ...</span></a>
    </div>
</div>
4

1 回答 1

0

SyndicationFeed不直接对内容执行任何操作,例如执行 javascript 或显示标记(包括获取图像,例如跨站点请求);因此,您无需采取任何措施SyndicationFeed来避免这些安全风险。

您必须提供更多关于您计划如何显示标记的详细信息,然后才能有人提供详细的建议。例如,它是 WPF 应用程序、WinForms 应用程序、网站等...

于 2012-05-15T18:24:29.780 回答