3

次の拡張方法のようEnvironment.NewLineに安全に交換できますか?<br />

public static string HtmlBreaks(this string s)
{
    if (string.IsNullOrEmpty(s)) { return s; }
    return s.Replace(Environment.NewLine, "<br />");
}

私はそれを次のように使用します:

@Html.Raw(Model.Details.HtmlBreaks())

そして、はっきりさせておきます。これは安全ですか? テキストをHTMLに置き換えてからRawメソッドを発行することで、インターネットセキュリティガイドラインに違反していますか?これによる攻撃に対してこのWebサイトを開いていますか?

4

2 に答える 2

5

これは安全ではありません。以下を含む詳細のサンプルテキストを取り上げます。

<script>alert('a')</script>

はそれHTML.Rawをスクリプトタグとして出力し、ブラウザはスクリプトを実行します。ユーザーが詳細テキストを提供すると、ページにスクリプトを挿入できます(基本的なXSS攻撃)。

改行を置き換えたい場合<br>は、ビューでそれを行います。たとえば、私のコントローラーは次のようになります。

MyModel model = new MyModel();
model.Description = "Hello \r\n how are you today \r\n <script>alert('a')</script> \r\n";
return View(model);

私の見解では、私はこれを行うことができます:

@{ var lines = Model.Description.Split('\r');
   foreach (var line in lines)
   {
       @line.Trim() <br />
   }
 }
于 2012-11-03T18:27:37.250 に答える
4

HTMLのソースが問題にならないことを確認する必要があります。つまり、ユーザーからのINPUTを受け入れてデータベースに保存し、Html.Rawを使用してこれを表示している場合は、あらゆる種類の問題に対応できる可能性があります。

HTMLのソースが含まれていて、既知の信頼できるソースからのものである場合、リスクを大幅に減らすことができます。

基本的に、それはHTMLがどこから来ているかにかかっています。この情報を使用して、@ Html.Raw()を使用するかどうか、およびさらにフィルタリングを実装する必要があるかどうかについて、最善の判断を下すことができます。選択はあなた次第ですが、今あなたはリスクを知っています。

于 2012-11-03T18:37:23.743 に答える