Javascript - document.cookie的安全性

时间:2016-10-14 20:30:02

标签: javascript security amazon-web-services cookies

我有一个使用AWS CloudFront API和Lambda创建Cloud Front cookie的应用程序。遗憾的是,我无法使用标准HTTP响应格式设置Cookie,并且必须使用document.cookie为我的用户设置Cookie'来自HTML页面的浏览器。 Cookie包括授予内容访问权限的策略,用于确认Cookie真实性的签名以及密钥对ID。 Lambda上的后端脚本创建cookie并将其作为有效负载发送给请求者,然后将其作为变量传递给document.cookie。

我已经阅读了很多关于保护cookie的信息(HttpOnly,会话cookie,安全标记等),并且我试图了解document.cookie的安全风险。在安全环境中通过Http响应和document.cookie设置cookie之间有区别吗?恶意用户是否有可能将自己的策略插入到cookie中,因为cookie是在客户端创建的,尽管页面只读,但是他们可以访问其他内容?

这里有一些代码供参考:

payload = data["Payload"]
jsoned = JSON.parse(payload)
cookie = jsoned['cookie']
redirectUrl = jsoned['redirectUrl']

document.cookie = 'CloudFront-Policy' + "=" + cookie['CloudFront-Policy'] + "; path=/mydirectory";
document.cookie = 'CloudFront-Key-Pair-Id' + "=" + cookie['CloudFront-Key-Pair-Id'] + "; path=/mydirectory"
document.cookie = 'CloudFront-Signature' + "=" + cookie['CloudFront-Signature'] + "; path=/mydirectory"

我第一次发帖到此。我在这里先向您的帮助表示感谢。

-Ken

2 个答案:

答案 0 :(得分:3)

  

在安全环境中通过Http响应和document.cookie设置cookie是否有区别?

不是真的。可以使用httponly设置HTTP cookie,但这对XSS来说只是非常弱的缓解,而不是真正的安全措施。

  

恶意用户是否有可能将自己的策略插入到cookie中,因为cookie是在客户端创建的

是的,但它已经用于HTTP cookie;它们都存储在客户端,因此不受信任的客户端可以使用。

这是签名的用途,对吗?如果它正确实现,它应该防止篡改它签名的内容。

答案 1 :(得分:2)

没有"直接"值应该存储在cookie中,期间。

cookie的值的所有验证/处理应该在服务器端(关于任何敏感信息)发生,并且cookie应该包含的唯一内容是某种guid(或者可能是一些guid' s 。)所有"客户端"存储在cookie中的id应该以防止篡改的方式编码。检测服务器端的篡改。

任何提供给客户的信息都应被视为已妥协。