小编asv*_*svd的帖子

如何在沙盒iframe中创建工作人员?

我正在构建一个用于运行不受信任代码的沙箱.出于这个原因,我创建了一个沙盒iframe(它只allow-scripts在其sandbox属性中设置了权限)以保护原点,然后在iframe中我创建一个web-worker来确保一个单独的线程并防止冻结主应用程序以防万一例如,不受信任的代码具有无限循环.

问题是,如果我尝试通过https加载沙箱,则最近的Google Chrome不允许创建工作人员.在其他浏览器上它可以工作,如果我通过http在Chrome中加载沙箱也可以.

这是代码:

index.html的:

<!DOCTYPE html>
<html>
  <head>
    <title>Sandbox test</title>
    <script type="text/javascript" src="main.js"></script>
  </head>
  <body></body>
</html>
Run Code Online (Sandbox Code Playgroud)

main.js:

// determining absolute path of iframe.html
var scripts = document.getElementsByTagName('script');
var url = scripts[scripts.length-1].src
    .split('/')
    .slice(0, -1)
    .join('/')+'/iframe.html';

window.addEventListener("load", function() {
    var iframe = document.createElement('iframe');
    iframe.src = url;
    iframe.sandbox = 'allow-scripts';
    iframe.style.display = 'none';
    document.body.appendChild(iframe);

    window.addEventListener('message', function(e) {
        if (e.origin=='null' && e.source == iframe.contentWindow) {
            document.write(e.data.text);
        }
    });
}, 0);
Run Code Online (Sandbox Code Playgroud)

Iframe.html的:

<script src="iframe.js"></script>
Run Code Online (Sandbox Code Playgroud)

iframe.js:

var code = 'self.postMessage({text: …
Run Code Online (Sandbox Code Playgroud)

javascript iframe sandbox web-worker

11
推荐指数
1
解决办法
2881
查看次数

工人是否可以足够安全地使用不受信任的代码

我有一个用户提交的不受信任的代码,我需要在浏览器的沙盒环境中执行它。

有人告诉我,Web-Workers不能为此提供足够的安全性,因此最好使用Sandbxed iframe。这一页:

https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet#Web_Workers

还说工人不适合不受信任的代码。

但是,如果我从Blob创建一个worker,则其url甚至具有不同的协议(blob://)。在这种情况下,是否将单独的来源策略应用于工作者代码?

如果还有其他原因,为什么(默认情况下)为什么与沙盒iframe(访问IndexedDB等)相比,对工作人员的限制较少(是否有机会以某种方式设置工作人员,以便对其进行足够的限制,或者应该我还是要使用沙盒iframe吗?

javascript security iframe sandbox

3
推荐指数
1
解决办法
1244
查看次数

标签 统计

iframe ×2

javascript ×2

sandbox ×2

security ×1

web-worker ×1