快速旁注:这不是帖子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/