Phi*_*l H 6 javascript security xss
我希望能够允许社区成员提供他们自己的javascript代码供其他人使用,因为用户的想象力远远超过我能想到的任何东西.
但这提出了安全性的固有问题,特别是当目的是允许外部代码运行时.
那么,我可以禁止eval()提交并完成它吗?或者还有其他方法来评估代码或导致javascript中的大规模恐慌?
还有其他事情要禁止,但我主要担心的是,除非我能阻止执行字符串,否则我可以规避任何其他过滤器以用于特定方法.可行,或者我是否必须诉诸要求作者提供Web服务界面?
Sil*_*Fox 12
由于HTML5现已可用,因此您可以将沙箱用于不受信任的JavaScript代码.
关于沙盒框架的OWASP HTML5安全备忘单评论:
- 将iframe的sandbox属性用于不受信任的内容.
iframe的沙箱属性允许对内容中的内容进行限制
iframe.设置沙箱属性时,以下限制处于活动状态:
所有标记都被视为来自独特的来源.
所有表单和脚本都被禁用.
- 禁止所有链接定位到其他浏览上下文.
- 自动触发的所有功能都将被阻止.
所有插件都被禁用.
可以
iframe使用sandbox属性的值对功能进行细粒度控制.在不支持此功能的旧版本用户代理中,将忽略此属性.使用此功能作为附加保护层,或检查浏览器是否支持沙盒框架,并仅在支持时显示不受信任的内容.
除了这个属性,为了防止Clickjacking攻击和未经请求的框架,我们鼓励使用
X-Frame-Options支持deny和same-origin值的标头.if(window!== window.top) { window.top.location = location; }不建议使用其他解决方案,如framebusting .
您可以允许脚本运行,同时保持其他限制.但是,您应确保脚本从与主要内容不同的域运行,以防止攻击者通过重定向用户直接加载页面(即不通过IFrame)进行XSS攻击.
这将限制脚本eval用于攻击您的主域,但这可能会阻止脚本实际上足够强大以满足您的需求.与您的主域名的任何互动都必须通过Window.postMessage.如果限制太多,那么@ bobince的答案仍然有最好的解决方法建议.
有关如何安全实施沙箱的详细信息,请参阅我的其他答案.
或者还有其他方法来评估代码
您无法过滤掉eval()脚本解析级别的调用,因为JavaScript是一种图灵完备语言,可以对调用进行模糊处理.例如.看看svinto的解决方法.您可以window.eval通过使用空值覆盖它来隐藏,但确实有其他方法来评估代码,包括(仅仅是我的头脑):
或导致javascript中的大规模恐慌?
那么createElement('iframe').src ='http://evil.iframeexploitz.ru/aff=2345'是你可以期待的更糟糕的攻击之一......但实际上,当脚本有控制权时,它可以做用户可以在您的网站上的任何内容.它可以让他们在你的论坛上发布"我是一个大的恋童癖者!"一千次然后删除他们自己的帐户.例如.
我是否必须诉诸要求作者提供网络服务界面?
是的,或者:
Google Caja可能会让您感兴趣的是后者的一个例子.我不完全确定我会信任它; 这是一项艰苦的工作,到目前为止他们肯定有一些安全漏洞,但如果你真的必须采取这种方法,它就是最好的.