在每个人都告诉我不应该进行客户端清理(我确实打算在客户端执行它,但它也可以在SSJS中工作)之前,让我澄清了我想要做的事情。基于JavaScript的X/HTML和CSS消毒
我想要的东西,类似于Google Caja或HTMLPurifier,但对于JavaScript:基于白名单的安全方法,处理HTML和CSS(当然还没有插入到DOM中,这将不安全,但首先获得字符串形式),然后有选择地过滤出不安全的标签或属性,忽略它们或将它们选择性地包含为转义文本,或者以其他方式将它们报告给应用程序进行进一步处理,理想情况下在上下文中。如果它可以将任何JavaScript减少到一个安全的子集,就像在Google Caja中一样,但是我知道这将会提出很多问题。我的用例访问通过JSONP(维基处理前的Mediawiki维基数据,从而允许原始但不可信的XML/HTML输入)获得的不可信的XML/XHTML数据,并允许用户对该数据进行查询和转换( XQuery,jQuery,XSLT等),利用HTML5允许脱机使用,IndexedDB存储等,然后可以允许在用户查看输入源的同一页面上预览结果并构建或导入他们的查询。
用户可以生成他们想要的任何输出,所以我不会对他们正在做的事情进行净化 - 如果他们想在页面中注入JavaScript,那么所有的权力。但我希望保护那些想要有信心的用户,他们可以添加能够安全地从不受信任的输入中复制目标元素的代码,同时不允许他们复制不安全的输入。
这应该是可行的,但我想知道是否有任何库已经这样做。
如果我卡住自己实现这一点(尽管我对这两种情况都很好奇),我想证明是否使用innerHTML
或DOM创建/附加BEFORE插入到文档中是安全的办法。例如,如果我第一次运行DOMParser
或者使用浏览器HTML解析通过使用innerHTML
将原始HTML附加到非插入的div,可以意外触发事件吗?我相信它应该是安全的,但不确定在插入之前DOM操作事件是否会以某种方式发生,这可能会被利用。
当然,构建好的DOM需要在该点之后进行消毒,但是我只想验证我可以安全地构建DOM对象本身以便于遍历,然后担心会过滤掉不需要的元素,属性和属性值。
谢谢!
谢谢...此刻太忙了仔细观察并验证它是否仍然可以让我将安全的HTML放入页面,而不是转义 - 因为我的目的是允许重新整理查询结果的HTML预览,但似乎可能有所帮助。如果不是这样,我真的认为JavaScript需要这样一个库。我不想做任何不必要的往返行程,因为这是针对离线应用的。谢谢! – 2011-04-14 18:35:32