简单的HTML消毒剂在Javascript(Simple HTML sanitizer in Jav

2019-09-01 23:38发布

我在寻找一个简单的HTML消毒用JavaScript编写的。 它并不需要100%安全XSS。

我实施降价,并在我的网站的大规模杀伤性武器降价编辑器(从GitHub上的SO主分支)。 问题是,在实时预览显示的HTML没有被过滤,喜欢这里的SO。 我要寻找一个简单/快速的HTML消毒剂用JavaScript编写的,这样我可以过滤预览窗口中的内容。

无需完全XSS保护一个完整的解析器。 我不是将输出发送回服务器。 我送了降价的地方,我用正确的,完整的HTML消毒之前,我把结果存储在数据库中的服务器。

谷歌正在绝对对我没用。 我刚刚获得数百篇关于如何筛选出的JavaScript(通常不正确)文章来自用户的各种服务器端语言生成的HTML。

UPDATE

我要解释好一点,为什么我需要这个。 我的网站有一个编辑器非常相似,这里在计算器上的一个。 有一个文本区域进入降价的语法和它下面的预览窗口,显示你怎么会像你提交之后。

当用户提交的东西,它被发送到Markdown格式的服务器。 服务器将其转换为HTML,然后运行HTML消毒剂它来清理HTML。 降价允许任意的HTML,所以我需要把它清理干净。 例如,用户类型是这样的:

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

因为它是HTML降价转换器不碰它。 该HTML消毒剂将去掉它,因此脚本元素已经一去不复返了。

但是,这不是在预览窗口中会发生什么。 预览窗口只转换降价到HTML,但不消毒它。 因此,预览窗口将有一个脚本element.This意味着预览窗口是从服务器上实际呈现的不同。

我想解决这个问题,所以我需要一个快速和肮脏的JavaScript的HTML消毒剂。 一些简单的基本元素/属性黑名单白名单,并会做。 它并不需要,因为XSS保护是由服务器端的HTML消毒做是为了安全XSS。

这只是为了确保预览窗口将匹配的时间,这是对我不够好,实际呈现99.99%。

你能帮我吗? 提前致谢!

Answer 1:

你应该看看在这个问题上推荐的一消毒/重写HTML客户端上的

而只是为了确保你不需要做更多的XSS,请查看答案,这样一个如何防止用户生成的HTML的JavaScript注入攻击



Answer 2:

我们已经开发出一种简单HtmlSantizer这里opensourced它: https://github.com/jitbit/HtmlSanitizer

用法

var result = HtmlSanitizer.SanitizeHtml(input);

[免责声明! 我是作者之一!]



Answer 3:

我的功能,我只关心该字符串不为空,仅包含字母数字字符。 它使用纯JS,没有第三库或任何东西。 它包含一个长的正则表达式,但它的工作;)你可以建立在这一点,但有你的正则表达式的东西越来越像“<SCRIPT> | </ SCRIPT>”(用转义字符在必要时再减去空格)。 ;)

    var validateString = function(string) {

      var validity = true;

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

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

          validity = false;
      }

      return validity;
    }


文章来源: Simple HTML sanitizer in Javascript