我可以用这样的断点标签安全地替换新线路吗?

Mik*_*oud 3 html c# security asp.net-mvc

我可以安全地替换Environment.NewLine,<br />就像我在以下扩展方法中一样吗?

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

我这样使用它:

@Html.Raw(Model.Details.HtmlBreaks())
Run Code Online (Sandbox Code Playgroud)

让我更清楚.这样安全吗? 我是否通过用HTML替换文本然后发布Raw方法来破坏任何互联网安全准则?我打开这个网站的任何攻击吗?

Joh*_*ner 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);
Run Code Online (Sandbox Code Playgroud)

在我看来,我可以这样做:

@{ var lines = Model.Description.Split('\r');
   foreach (var line in lines)
   {
       @line.Trim() <br />
   }
 }
Run Code Online (Sandbox Code Playgroud)