快速旁注:这不是帖子Is It Possible to Sandbox JavaScript Running In the Browser?的“可能重复”,它与cookie没有任何关系-我需要询问cookie。我确实读了答案。



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

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

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

我听说过https://developers.google.com/caja/-这似乎很有用。我阅读了CAJA页面,但是与防止cookie无关。

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

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

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

先感谢您

最佳答案

这个问题已经很老了,但我刚开始使用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/

08-19 08:47