在HTML中删除(或忽略)脚本和表单标记的最佳方法是什么?

时间:2009-10-13 13:06:13

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

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

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

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

非常感谢任何帮助或建议!

7 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

这取决于您使用的语言。一般来说,我建议使用HTML解析器,从代码片段构建一个小DOM,然后核对不需要的元素。有许多优秀的HTML解析器,专门用于处理真实世界的凌乱HTML。示例包括BeautifulSoup(Python),HTMLParser(Java)......而且,因为我在打字时得到了答案,所以Colin说了什么!

答案 3 :(得分:0)

不要试图自己动手 - 有太多的技巧可以让一些脚本和一般的肮脏进入页面。使用Microsoft AntiXSS library - 版本3.1内置了HTML卫生。您可能需要GetSafeHTMLFragment方法,该方法返回已清理的HTML块。见my previous answer

答案 4 :(得分:0)

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

答案 5 :(得分:0)

txtStore.Text=Regex.Replace(txtStore, "<.*?>", string.Empty);

答案 6 :(得分:0)

我以前遇到过同样的问题。但我的情况有所不同。我正在向页面添加ajax请求的内容。来自ajax响应的内容是html,它还包含脚本标记。我只想获得没有任何脚本的HTML,所以我用jquery从ajax响应中删除了所有脚本标记。

jquery-remove-script-tags-from-string