如何保护联合供稿在MVC视图中显示

时间:2012-05-15 16:28:34

标签: c# rss atom-feed syndication-feed

我正在使用SyndicationFeed从外部网站阅读Rss / Atom供稿

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

在Rss和原子读取中读取常见安全风险的最佳方法是什么

这里有一些陈述:http://www.cgisecurity.com/rss.html

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

修改

安全风险:

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

<?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"> 

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

我目前正在查看microsoft antiXss库以帮助解决此问题http://wpl.codeplex.com/

编辑2

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

继承完整的行动结果

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>

1 个答案:

答案 0 :(得分:0)

SyndicationFeed没有直接执行内容,例如执行javascript或显示标记(包括获取图片,例如跨站点请求);因此,您无需使用SyndicationFeed来避免这些安全风险。

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