Javascript中的简单HTML清理程序

问题描述 投票:24回答:3

我正在寻找一个用JavaScript编写的简单HTML清理程序。它不需要100%XSS安全。

我正在我的网站上实现Markdown和WMD Markdown编辑器(来自github的SO主分支)。问题是,实时预览中显示的HTML不会被过滤,就像在SO上一样。我正在寻找一个用JavaScript编写的简单/快速HTML清理程序,以便我可以过滤预览窗口的内容。

无需具有完整XSS保护的完整解析器。我不是将输出发送回服务器。在将结果存储到数据库之前,我将Markdown发送到我使用正确的完整HTML清理程序的服务器。

谷歌对我来说绝对没用。我只收到数百条(通常是不正确的)文章,介绍如何从各种服务器端语言的用户生成的HTML中过滤掉javascript。

UPDATE

我会更好地解释为什么我需要这个。我的网站有一个非常类似于StackOverflow上的编辑器。有一个文本区域可以输入MarkDown语法,下面有一个预览窗口,可以显示提交后它的样子。

当用户提交某些内容时,它将以MarkDown格式发送到服务器。服务器将其转换为HTML,然后在其上运行HTML清理程序以清理HTML。 MarkDown允许任意HTML,所以我需要清理它。例如,用户输入如下内容:

<script>alert('Boo!');</script>

MarkDown转换器不会触及它,因为它是HTML。 HTML清理程序将删除它,以便脚本元素消失。

但这不是预览窗口中发生的情况。预览窗口仅将MarkDown转换为HTML,但不会对其进行清理。因此,预览窗口将具有脚本元素。这意味着预览窗口与服务器上的实际呈现不同。

我想解决这个问题,所以我需要一个快速而又脏的JavaScript HTML清理程序。使用基本元素/属性黑名单和白名单的简单方法就可以了。它不需要是XSS安全的,因为XSS保护是由服务器端的HTML清理程序完成的。

这只是为了确保预览窗口在99.99%的时间内与实际渲染相匹配,这对我来说已经足够了。

你能帮我吗?提前致谢!

javascript html wmd html-sanitizing
3个回答
12
投票

你应该看看这个问题Sanitize/Rewrite HTML on the Client Side推荐的那个

为了确保您不需要对XSS做更多的事情,请查看这个How to prevent Javascript injection attacks within user-generated HTML的答案


3
投票

我们开发了一个简单的HtmlSantizer并在这里开源:https://github.com/jitbit/HtmlSanitizer

用法

var result = HtmlSanitizer.SanitizeHtml(input);

[免责声明!我是其中一位作者!]


-2
投票

对于我的函数我只关心字符串不是空的并且只包含字母数字字符。这使用普通JS,没有第三个库或任何东西。它包含一个很长的正则表达式,但它可以完成这项任务;)你可以在此基础上构建,但你的正则表达式更像是一样的'<script> | </ script>'(在必要时转义字符,减去空格)。 ;)

    var validateString = function(string) {

      var validity = true;

      if( string == '' ) { validity = false; }

      if( string.match( /[ |<|,|>|\.|\?|\/|:|;|"|'|{|\[|}|\]|\||\\|~|`|!|@|#|\$|%|\^|&|\*|\(|\)|_|\-|\+|=]+/ ) != null ) {

          validity = false;
      }

      return validity;
    }
© www.soinside.com 2019 - 2024. All rights reserved.