Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于JavaScript的X/HTML&;CSS消毒_Javascript_Sanitization_Input Sanitization - Fatal编程技术网

基于JavaScript的X/HTML&;CSS消毒

基于JavaScript的X/HTML&;CSS消毒,javascript,sanitization,input-sanitization,Javascript,Sanitization,Input Sanitization,在所有人都告诉我不应该做客户端清理之前(事实上,我确实打算在客户端进行清理,尽管它也可以在SSJS中工作),让我澄清一下我正在尝试做什么 我想要一些类似于JavaScript的东西:一种基于白名单的安全方法,它处理HTML和CSS(当然还没有插入到DOM中,这是不安全的,但首先以字符串形式获得),然后选择性地过滤掉不安全的标记或属性,忽略它们,或者选择性地将它们作为转义文本包含,或者允许将它们报告给应用程序进行进一步处理,最好是在上下文中。如果它能像在GoogleCaja中一样将任何JavaSc

在所有人都告诉我不应该做客户端清理之前(事实上,我确实打算在客户端进行清理,尽管它也可以在SSJS中工作),让我澄清一下我正在尝试做什么

我想要一些类似于JavaScript的东西:一种基于白名单的安全方法,它处理HTML和CSS(当然还没有插入到DOM中,这是不安全的,但首先以字符串形式获得),然后选择性地过滤掉不安全的标记或属性,忽略它们,或者选择性地将它们作为转义文本包含,或者允许将它们报告给应用程序进行进一步处理,最好是在上下文中。如果它能像在GoogleCaja中一样将任何JavaScript简化为一个安全的子集,那就太酷了,但我知道这要求很高

我的用例是访问通过以下途径获得的不受信任的XML/XHTML数据(wiki处理之前来自Mediawiki的数据,从而允许原始但不受信任的XML/HTML输入),并允许用户对该数据进行查询和转换(XQuery、jQuery、XSLT等),利用HTML5允许脱机使用、IndexedDB存储,等等,这样就可以在用户查看输入源并构建或导入查询的同一页面上预览结果

用户可以生成他们想要的任何输出,所以我不会对他们正在做的事情进行清理——如果他们想将JavaScript注入页面,那么所有的功能都将由他们来完成。但我确实希望保护那些希望有信心添加代码的用户,这些代码可以安全地复制不受信任的输入中的目标元素,同时不允许他们复制不安全的输入

这肯定是可行的,但我想知道是否有任何库已经做到了这一点

如果我无法自己实现这一点(尽管我对这两种情况都很好奇),我想证明在插入文档之前使用
innerHTML
或DOM创建/附加是否安全。例如,如果我第一次运行
DOMParser
,或者通过使用
innerHTML
将原始HTML附加到未插入的div而依赖浏览器HTML解析,是否会意外触发事件?我相信它应该是安全的,但不确定DOM操作事件是否会在插入之前发生,而插入可能会被利用

当然,在这一点之后需要对构建的DOM进行清理,但我只想验证我是否可以安全地构建DOM对象本身,以便于遍历,然后担心过滤掉不需要的元素、属性和属性值


谢谢

ESAPI的目的是提供一个简单的接口,以清晰、一致和易于使用的方式提供开发人员可能需要的所有安全功能。ESAPI体系结构非常简单,只是封装了大多数应用程序所需的关键安全操作的类的集合

OWASP ESAPI的JavaScript版本:

有效地进行输入验证非常困难,HTML很容易成为有史以来最糟糕的代码和数据混搭,因为有太多可能放置代码的地方和太多不同的有效编码。HTML特别困难,因为它不仅具有层次结构,而且还包含许多不同的解析器(XML、HTML、JavaScript、VBScript、CSS、URL等)。虽然输入验证很重要,并且应该始终执行,但它不是针对注入攻击的完整解决方案。最好用逃跑作为你的主要防御。我以前没用过HTML净化器,但它看起来不错,他们肯定花了很多时间和心思。为什么不先使用他们的解决方案服务器端,然后再应用您想要的其他规则呢。我见过一些黑客只使用
[]()
的组合来编写代码。这里还有100多个例子。有些事情需要注意

HTML净化器抓住了这种混合编码的漏洞

<A HREF="h
tt  p://6&#9;6.000146.0x7.147/">XSS</A>

这张DIV背景图像带有unicoded XSS漏洞

<DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029">


你要面对的是:角色的所有70种可能组合“谢谢……我现在太忙了,无法仔细查看并验证它是否仍能让我将安全的HTML放入页面,而不是转义——因为我的目的是允许对重新修改的查询结果进行HTML预览,但似乎这可能会有所帮助。”。我真的认为JavaScript需要这样一个库,如果不是这样的话。我不想做任何不必要的往返,特别是因为这是一个离线应用程序。谢谢
<
%3C
&lt
&lt;
&LT
&LT;
&#60
&#060
&#0060
&#00060
&#000060
&#0000060
&#60;
&#060;
&#0060;
&#00060;
&#000060;
&#0000060;
&#x3c
&#x03c
&#x003c
&#x0003c
&#x00003c
&#x000003c
&#x3c;
&#x03c;
&#x003c;
&#x0003c;
&#x00003c;
&#x000003c;
&#X3c
&#X03c
&#X003c
&#X0003c
&#X00003c
&#X000003c
&#X3c;
&#X03c;
&#X003c;
&#X0003c;
&#X00003c;
&#X000003c;
&#x3C
&#x03C
&#x003C
&#x0003C
&#x00003C
&#x000003C
&#x3C;
&#x03C;
&#x003C;
&#x0003C;
&#x00003C;
&#x000003C;
&#X3C
&#X03C
&#X003C
&#X0003C
&#X00003C
&#X000003C
&#X3C;
&#X03C;
&#X003C;
&#X0003C;
&#X00003C;
&#X000003C;
\x3c
\x3C
\u003c
\u003C