c# - 我可以用这样的中断标记安全地替换新行吗?

标签 c# html asp.net-mvc security

我可以安全地替换 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 是否违反了任何互联网安全准则?方法? 我打开这个网站是否会受到任何攻击?

最佳答案

这不安全。以包含详细信息的示例文本为例:

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

HTML.Raw会将其输出为脚本标签,浏览器将执行脚本。如果用户提供详细信息文本,这将允许他们将脚本注入(inject)您的页面(一种基本的 XSS 攻击)。

如果你想用 <br> 替换换行符在你看来做。例如,我的 Controller 可能如下所示:

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 />
   }
 }

关于c# - 我可以用这样的中断标记安全地替换新行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13212097/

相关文章:

asp.net-mvc - 在同一个域上运行 Asp.net MVC 和 React

html - <div> 关闭后仍然有效

c# - WPF如何使扩展器移动内容

javascript - 使用 Javascript/Jquery 访问 JSON 元素

javascript - 如何在 Angular 5 中添加图像?

c# - 如何使用 Orchard CMS ContentManager 运行 LINQ 子查询?休眠问题?

c# - 如何避免为不同的字符串编写简单的 "if contains"语句的每个变体

c# - Powershell 自定义 cmdlet 在标准方法的实现之外调用 WriteVerbose

c# - 如何在 WPF 中设置进度条的可见性?

javascript - jQuery 鼠标事件处理