【发布时间】:2017-01-15 03:15:02
【问题描述】:
我正在提供静态 html,我希望它们在没有 <!-- comment --> cmets 的情况下发送到客户端,因为它们会危及安全性。
有什么办法吗?
类似于 Razor 的 @* comment *@ 但用于 html...
【问题讨论】:
标签: html asp.net asp.net-mvc security razor
我正在提供静态 html,我希望它们在没有 <!-- comment --> cmets 的情况下发送到客户端,因为它们会危及安全性。
有什么办法吗?
类似于 Razor 的 @* comment *@ 但用于 html...
【问题讨论】:
标签: html asp.net asp.net-mvc security razor
如果您正在谈论从 HTML 文件本身中删除 cmets,您当然可以在记事本中打开它们并手动删除 cmets。但是我认为您正在谈论在将页面发送到浏览器时实时删除它们。您希望 cmets 保留在静态文件中。
如果您在经典模式下运行 IIS,您将无法使用 ASP.NET 代码实时删除 cmets。但是如果你在integrated pipeline mode 中运行 IIS,你可以连接到请求/响应管道和postprocess the HTML file,然后做任何你想做的事情,例如在EndRequest 事件处理程序中。
不确定解析页面和查找 HTML cmets 以删除它们的具体细节 - 可能很棘手 - 看起来 someone else 提出了这个问题,您可以探索其中的几个答案。
【讨论】:
您可以在 Razor 的注释标记之间而不是 html 注释标记之间编写 cmets。这些在前端是不可见的。
除此之外,您还可以将放入 html 文件中的任何内容打印为文本(不包括 Razor 和 PHP 等服务器端脚本)。除非您通过工具在服务器上缩小 cmets,否则无法将 cmets 从静态 html 中取出。但既然你说它们是静态 html 页面,我猜你根本没有使用任何工具?
例如,您可以使用 http://www.willpeavy.com/minifier/ 之类的工具。
将 cmets 留在其中的安全风险应该不会那么严重。首先,您不应该将有价值的信息放在 HTML cmets 中。它们现在主要用于显示元素在哪里开始和/或在其他程序员接管时结束。
您的 javascript 在网站上也可见。假设您使用 ajax 调用和数据库。这将比某些 HTML cmets 产生更大的风险。显然,您只需要确保不共享会导致客户端 cmets 出现安全问题的重要信息。
如果它是一个为 html 提供服务的自动化系统,并且您可以在发送之前删除 cmets,您可以使用如下函数:
您可以使用 Html Agility Pack .NET 库。这是一篇文章 这解释了如何在 SO 上使用它:如何使用 HTML 敏捷包
这是删除 cmets 的 C# 代码:
HtmlDocument doc = new HtmlDocument();
doc.Load("yourFile.htm");
// get all comment nodes using XPATH
foreach (HtmlNode comment in doc.DocumentNode.SelectNodes("//comment()"))
{
comment.ParentNode.RemoveChild(comment);
}
doc.Save(Console.Out); // displays doc w/o comments on console
来源:Removing HTML Comments(您可以在这里找到更多选项)
在将 html 保存到静态文件或编辑现有文件以过滤掉 cmets 之前触发此类功能将是一件简单的事情。
【讨论】: