【问题标题】:Javascript - Security of document.cookieJavascript - document.cookie 的安全性
【发布时间】:2016-10-16 17:42:45
【问题描述】:

我有一个使用 AWS CloudFront API 和 Lambda 创建 Cloud Front cookie 的应用程序。不幸的是,我无法使用标准 HTTP 响应格式设置 cookie,必须使用 document.cookie 从 HTML 页面将 cookie 设置到我的用户浏览器。 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"

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

-肯

【问题讨论】:

    标签: javascript security amazon-web-services cookies


    【解决方案1】:

    在安全的上下文中通过Http响应和document.cookie设置cookie有区别吗?

    不是真的。可以使用 httponly 设置 HTTP cookie,但这只是针对 XSS 的非常弱的缓解措施,本身并不是真正的适当安全措施。

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

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

    这就是签名的用途,对吧?如果正确实施,它应该可以防止篡改其签名的内容。

    【讨论】:

    • 是的,签名用于对cookie进行签名,防止篡改。服务器会识别出它已被篡改并阻止访问是有道理的。
    • 感谢您的帮助。
    【解决方案2】:

    任何“直接”值都不应存储在 cookie 中,句号。

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

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

    【讨论】:

    • 我相信 CloudFront 签名提供了这种防篡改机制。
    • 谢谢!我再看看 cookie 中存储了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2012-10-11
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多