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 フィードを読み取って画像を表示できるようにし、悪意のあるコンテンツを許可しないようにする最善の方法を知りたいです。
私は現在、これを支援するためにマイクロソフトの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>