【问题标题】:ASP.NET: Is there a way to serve static html files without programming comments?ASP.NET:有没有办法在没有编程注释的情况下提供静态 html 文件?
【发布时间】:2017-01-15 03:15:02
【问题描述】:

我正在提供静态 html,我希望它们在没有 <!-- comment --> cmets 的情况下发送到客户端,因为它们会危及安全性。

有什么办法吗?

类似于 Razor 的 @* comment *@ 但用于 html...

【问题讨论】:

    标签: html asp.net asp.net-mvc security razor


    【解决方案1】:

    如果您正在谈论从 HTML 文件本身中删除 cmets,您当然可以在记事本中打开它们并手动删除 cmets。但是我认为您正在谈论在将页面发送到浏览器时实时删除它们。您希望 cmets 保留在静态文件中。

    如果您在经典模式下运行 IIS,您将无法使用 ASP.NET 代码实时删除 cmets。但是如果你在integrated pipeline mode 中运行 IIS,你可以连接到请求/响应管道和postprocess the HTML file,然后做任何你想做的事情,例如在EndRequest 事件处理程序中。

    不确定解析页面和查找 HTML cmets 以删除它们的具体细节 - 可能很棘手 - 看起来 someone else 提出了这个问题,您可以探索其中的几个答案。

    【讨论】:

      【解决方案2】:

      您可以在 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 之前触发此类功能将是一件简单的事情。

      【讨论】:

      • 因为文件是静态的,所以我放置的任何 Razor 标签都会在页面上呈现为文本。此外,我正在寻找一种在提供文件时自动执行此操作的方法……而不是手动执行。但你确实有道理。如果我需要评论我的 html,也许这意味着我需要简化它... ;)
      • 我不知道你的意思是文件是静态的。我以为你的意思只是 html 是。在这种情况下,除非您首先将文件放入某种过滤器中,否则这是不可能的。您是手动交付静态文件还是通过自动化 C# 进程交付静态文件?如果是通过自动化过程,您可以先输入一个删除 cmets 的函数。 - 正如我在回答中所说的那样;无法隐藏 html cmets。
      • 文件通过 MVC 控制器提供服务
      • 更新了我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-02
      • 2012-05-09
      • 1970-01-01
      相关资源
      最近更新 更多