Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以用这样的断开标签安全地替换新线吗?_C#_Html_Asp.net Mvc_Security - Fatal编程技术网

C# 我可以用这样的断开标签安全地替换新线吗?

C# 我可以用这样的断开标签安全地替换新线吗?,c#,html,asp.net-mvc,security,C#,Html,Asp.net Mvc,Security,我是否可以安全地将Environment.NewLine替换为,就像我使用以下扩展方法一样 public static string HtmlBreaks(this string s) { if (string.IsNullOrEmpty(s)) { return s; } return s.Replace(Environment.NewLine, "<br />"); } 让我更清楚一点这是否安全?我是否违反了任何互联网安全准则,用HTML替换文本,然后发布Raw

我是否可以安全地将
Environment.NewLine
替换为

,就像我使用以下扩展方法一样

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

让我更清楚一点这是否安全?我是否违反了任何互联网安全准则,用HTML替换文本,然后发布
Raw
方法?
我是否打开此网站,使其遭受任何攻击?

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

警报('a')

HTML.Raw
将把它作为脚本标记输出,浏览器将执行脚本。如果用户提供详细信息文本,这将允许他们将脚本注入到您的页面中(基本XSS攻击)

如果要用

替换换行符,请在视图中执行。例如,我的控制器可能如下所示:

@Html.Raw(Model.Details.HtmlBreaks())
MyModel model = new MyModel();
model.Description = "Hello \r\n how are you today \r\n <script>alert('a')</script> \r\n";
return View(model);
MyModel model=newmymodel();
model.Description=“您好\r\n您今天好吗\r\n警报('a')\r\n”;
返回视图(模型);
在我看来,我可以做到这一点:

@{ var lines = Model.Description.Split('\r');
   foreach (var line in lines)
   {
       @line.Trim() <br />
   }
 }
@{var lines=Model.Description.Split('\r');
foreach(行中的var行)
{
@line.Trim()
} }
您只需确保HTML的源代码不受关注。换句话说,如果您接受用户的输入并将其存储在数据库中,然后使用Html.Raw来显示它,那么您可能会面临各种各样的问题

如果HTML的源代码包含在已知的可信源代码中,则可以大大降低风险


从本质上讲,它可以归结为HTML从何而来。使用这些信息,您可以对是否要使用@Html.Raw()以及是否需要实现进一步过滤做出最佳判断。选择取决于你,但现在你知道了风险

为什么它不只是一个帮手,你在哪里破坏任何安全?它只是你的纯设计option@COLDTOLD,我主要关心的是用HTML替换文本,然后发出
Raw
方法。我不想有任何问题。我很肯定它是安全的,但我需要一些其他人的意见。谢谢你的!确切地说,OP没有指定要处理的字符串的源。如果是来自不可信来源的HTML内容,那么Koerner的答案是必看的。另外,需要注意的是,如果不同平台的用户正在插入内容,那么新行可以同时存储为\r\n和\r\n,因此应该为每一行发布一个替换。好的,让我们沿着这条路走下去。这些数据实际上是由用户在网站上输入的。我使用的是MVC 4,如何确保数据安全地进入数据库,这样我就不必担心上述问题?@BigM您的HtmlBreaks扩展方法可以分别用和替换所有<和>,然后\r\n和\n都被
拆分。您可以在换行符上拆分,然后在视图中附加
的结果数组中循环。谢谢@JohnKoerner,我很感激!