我正在提供静态HTML,我希望在没有<!-- comment -->
评论的情况下将它们发送到客户端,因为它们会危及安全性。
有没有办法做到这一点?
类似于Razor的@* comment *@
,但是对于html ......
答案 0 :(得分:2)
如果您正在谈论从HTML文件本身删除注释,您当然可以在NotePad中打开它们并手动删除注释。但我认为您正在谈论在将页面发送到浏览器时实时删除它们。您希望注释保留在静态文件中。
如果您在经典模式下运行IIS,则无法使用ASP.NET代码实时删除注释。但是如果你在integrated pipeline mode中运行IIS,你可以挂钩请求/响应管道和postprocess the HTML file,并做任何你想做的事情,例如在EndRequest事件处理程序中。
不确定解析页面和查找HTML注释以删除它们的细节 - 可能很棘手 - 看起来someone else问了这个问题,并且你可以探索一些答案。 / p>
答案 1 :(得分:0)
你可以在Razor的评论标签而不是html评论标签之间写评论。那些在前端看不到的东西。
除此之外,您将打印在html文件中的任何内容作为文本打印(服务器端脚本,如Razor和PHP除外)。除非你通过工具在服务器上缩小它们,否则无法从静态html中获取注释。但既然你说它们是静态html页面,我猜你根本不使用任何工具?
例如,您可以使用http://www.willpeavy.com/minifier/等工具。
留下评论的安全风险不应该那么糟糕。您不应该首先在HTML评论中提供有价值的信息。它们现在主要用于显示元素开始和/或其他程序员接管时的结束位置。
您的JavaScript也可以在网站上看到。我们假设你使用ajax调用和数据库。这会比一些HTML注释产生更大的风险。显然,您必须确保不要分享可能导致客户端评论中出现安全问题的重要信息。
如果它是一个提供html的自动系统,你可以在发布之前删除它们,你可以使用这样的函数:
您可以使用Html Agility Pack .NET库。这是一篇文章 它解释了如何在SO上使用它:如何使用HTML Agility pack
这是删除评论的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保存为静态文件或编辑现有文件以过滤注释之前,触发此类功能只是一件简单的事。