首页 文章

Javascript中的简单HTML清理程序

提问于
浏览
24

我正在寻找一个用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%的时间内与实际渲染相匹配,这对我来说已经足够了 .

你能帮我吗?提前致谢!

3 回答

  • 12

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

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

  • -2

    我们开发了一个简单的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;
        }
    

相关问题