【问题标题】:What's the best way to remove (or ignore) script and form tags in HTML?在 HTML 中删除(或忽略)脚本和表单标签的最佳方法是什么?
【发布时间】:2010-12-06 07:37:51
【问题描述】:

我将文本作为 HTML 存储在 SQL 中。我不保证这些数据格式正确,因为用户可以从任何地方复制/粘贴到我正在使用的编辑器控件中,或者手动编辑生成的 HTML。

问题是:删除或以某种方式忽略 <script/><form/> 标记的最佳方法是什么,以便当用户的文本显示在 Web 应用程序的其他位置时,它不会中断包含页面。

我已经考虑过简单地为<script>/<form><div> 执行“查找和替换”的想法(显然考虑到空格和结束标签,如果它们存在的话)。我也愿意以某种方式“忽略”某些标签。据我所知,可能有一些内置的说法(在 HTML、CSS 或 JavaScript 中)“对于<div id="MyContent"> 中的所有元素,将<form><script> 视为<div>

任何帮助或建议将不胜感激!

【问题讨论】:

  • 您正在使用哪种服务器/语言? PHP、ASP.NET、...?
  • @Marius - 抱歉,将标签编辑得更具体。

标签: asp.net html vb.net string sanitization


【解决方案1】:

在清理用户输入方面,表单和脚本标签并不是唯一应该清理的标签。

完成这项工作的最佳方式在一定程度上取决于您使用的工具。看看这些问题:

【讨论】:

    【解决方案2】:

    这取决于您使用的语言。一般来说,我建议使用 HTML 解析器,从 sn-p 构造一个小型 DOM,然后对不需要的元素进行核对。有许多优秀的 HTML 解析器,特别是设计用于处理现实世界中杂乱的 HTML。示例包括BeautifulSoup(Python)、HTMLParser(Java)……而且,由于我在打字时就收到了答案,所以 Colin 说了什么!

    【讨论】:

      【解决方案3】:

      不要尝试自己动手 - 有太多的技巧可以将一些脚本和一般的肮脏内容放入页面。使用Microsoft AntiXSS library - 3.1 版内置了 HTML 净化功能。您可能需要 GetSafeHTMLFragment 方法,该方法返回经过净化的 HTML 块。见my previous answer

      【讨论】:

        【解决方案4】:

        由于您使用的是 .Net,我建议您使用 HtmlAgilityPack,因为它易于使用并且适用于格式错误的 HTML。

        【讨论】:

          【解决方案5】:

          虽然建议的答案是可以接受的,但我最终还是使用了一个很好的旧正则表达式来用<div> 替换开始和结束<script><form> 标记。

          【解决方案6】:
          txtStore.Text=Regex.Replace(txtStore, "<.*?>", string.Empty);
          

          【讨论】:

            【解决方案7】:

            我以前也遇到过同样的问题。但我的情况有所不同。我正在向页面添加带有 ajax 请求的内容。 ajax 响应中的内容是 html,它还包括脚本标签。我只是想在没有任何脚本的情况下获取 html,所以我确实使用 jquery 从 ajax 响应中删除了所有脚本标签。

            jquery-remove-script-tags-from-string

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-01-11
              • 1970-01-01
              • 2013-03-16
              • 2015-06-05
              • 2020-04-07
              • 2011-05-31
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多