1

快速旁注: 不是帖子的“可能重复”是否可以在浏览器中运行沙箱 JavaScript?,它与 cookie无关- 我需要询问有关 cookie 的问题。不过,我确实阅读了答案。


你好!我有一个网页,(注册用户)可以在其中创建自己的HTML页面并轻松访问和编辑它们。

每次用户执行操作时,为了证明执行操作的用户是执行操作的帐户的用户(换句话说,验证用户),登录令牌会随着操作发送到服务器必须完成。(快速说明:我存储的令牌不是用户的密码,它是一个随机生成的字符串,每次登录都会更改)。这有效,但有一个问题。

由于用户有能力创建自己的HTML页面,因此有人可以创建一个页面来读取用户的登录 cookie 并将其发送给某人。使用这种方法,有人可以进入其他人的帐户。

我听说过https://developers.google.com/caja/ - 这似乎非常有用。我阅读了CAJA页面,但没有关于防止 cookie 的内容。

理想情况下,我希望用户仍然能够存储和读取他们自己的 cookie,但不能存储和读取登录令牌。尽管那可能是不可能的。

因此,完全阻止用户创建的脚本读取或写入 cookie 是可行的。

但是有一个问题:我对CAJA完全陌生。有人可以解释如何使用CAJA或事实上阻止 cookie - 类似的东西吗?

先感谢您

4

1 回答 1

0

这个问题已经很老了,但我刚开始使用 Caja。在实现之后,我编写了一些“客户代码”,尝试了一些事情:创建弹出窗口(警报方法)、读取 cookie 和访问全局变量。在 Caja 中运行的代码不能做任何这些事情。如果我在 Caja 之外运行相同的代码,它可以。因此,Caja 将为您尝试做的事情工作。

这是我的例子:

var htmlId = "performance";
            caja.initialize({
                cajaServer: 'https://caja.appspot.com/',
                debug: true
            });

            caja.load(document.getElementById(htmlId), undefined, function (frame) {
                @* Set-up config object for the activity *@
                var config = {};
                config.keydown = false;
                                   frame.code('https://localhost:44327/badcode', 'application/javascript')  // (6)
                    .run(function (guestF) {  // (7)
                        var app = frame.untame(guestF);  // (8)
                        console.log(app);
                        startCommandLineActivity(config, app);
                    });
            });

不受信任的代码是通过 url 'localhost/badcode' 加载的,它只是一个 .js 文件。

他们的文档非常好,我建议您从那里开始:https ://developers.google.com/caja/docs/runningjavascript/

于 2018-01-21T14:41:29.590 回答