2012-01-10 10 views
2

どのように私のコードでhtmlインジェクションの問題をprevertできますか?htmlインジェクションなしアンカータグへのラッピング2.5 M

私は、文字列内のすべてのハイパーリンクをアンカーにラップする機能を持っています。だから私はこれを持っている

@Html.Raw(Helpers.UtilHelpers.ReplaceLinks(Model.Texts[index].Content)) 

私はこの危険なトリックなしでこれを行うことができますか?このようにして、ユーザーはhtmlインジェクションを行うことができます。

私の関数ReplaceLinksは、http://www.google.comのようなすべてのハイパーリンクを<a href="google.com">http://www.google.com</a>に置き換えているので、この行をテキストではなくハイパーリンクとして表示します。しかし私は私の機能によって生成されたこのタグのように見せたいと思う。

答えて

2

使用Server.HtmlEncode:テキストがHTMLが含まれている場合http://msdn.microsoft.com/en-us/library/ms525347(v=vs.90).aspx

、それがエンコード表示されます。

編集:ヘルパーとして追加されました(拡張方式)

public static class HtmlUrlExtension 
{ 
    public static string RawUrl(this HtmlHelper html, string url) 
    { 
     return html.Raw(HttpServerUtility.HtmlEncode(url)); 
    } 
} 

そして、それを使用する:中

@Html.RawUrl(Model.Texts[index].Content) 
+0

これは、htmlエンコードされたテキストの最終行です。それはうまくいくはずです。 @ Html.Raw(HttpServerUtility.HtmlEncode(Model.Texts [index] .Content)) – Roman

+0

また、拡張メソッドとして配置することもできます – ivowiblo

0

AntiXSSライブラリを使用すると、危険なタグやスクリプトをフィルタリングし、エンコードしないでユーザーが入力したHTML文字列を安全に表示できます。

+0

のスタイルを設定することができ、すべての偽の<a href />にアクセスするために

、私の機能ReplaceLinks置き換えすべてのハイパーリンクはhttp://www.google.comからhttp://www.google.comになりますので、この行をテキストではなくハイパーリンクとして表示します。しかし私は私の機能によって生成されたこのタグのように見せたいと思う。 –

+1

@mesiesta、あなたはあなたの関数を好きなものに置き換えることができます。そして、 '@ Html.Raw'で出力する準備ができたら、結果をAntiXssに渡して、危険なタグが残っていないことを確認します。 –

0

をあなたの関数は、その後、カスタムCSSクラスを使用してスパンを追加して、あなたのリンクのスタイルを置き換えますその

<span class="myLinkClass" url-data="......">fooo</span> 

あなたのリンク次のjQueryの魔法によって管理されます。あなたが(クライアント側詰め込むために)

$("span.myLinkClass").each(new function() { 
    $(this).click(function() { 
     location.href = $(this).attr("url-data"); 
    }); 
}); 

をシンプルなjQueryのセレクタを使用することができますし、もちろんあなたは残念ながらそれで

.myLinkClass { color: yellow; } 
関連する問題