我知道当cookie从服务器发送到使用服务器语言设置的浏览器时,它会通过http或ssl或https发生。那么javascript cookie去哪里,一旦脚本:“document.cookie =”,在浏览器中执行,以及通过哪种协议/传输方案?
答案 0 :(得分:5)
浏览器只是在其“cookie jar”中发送所有 unexpire HTTP cookies(与SSL无关!),其中域(可能还有传出HTTP请求的路径):一次在“cookie jar”中,cookie将自动发送给所有将来的请求。通过Set-Cookie
标头从服务器发送的Cookie会自动添加到“cookie jar”中,但如上所述,Cookie也可以从JavaScript *中添加。在这两种情况下,客户端/浏览器都会通过Cookie
标头将Cookie 发送回服务器
这就是为什么像所有用户输入一样,应谨慎对待cookie,并且每次“安全敏感”操作请求都必须支持/验证。通常使用session cookie作为nonce的形式来提供此保护,因为它们(或应该是)大型加密声音随机数,永远不会被重复使用不可能预测。
会话cookie / nonce只是查找包含状态的持久存储(通常是数据库),例如“用户ID”。它是分离和随机特征的组合,可以防止客户根据cookie的值选择自己的“用户ID”,但是......
...“安全性”是一个复杂的主题,会话cookie 不会防止所有恶意JavaScript,例如使用CSRF或类似的恶意JavaScript,并且它们不提供任何帮助防止中间人攻击或窃听,并且只有在他们的到期时间内才能有效对抗重放攻击。验证cookie的另一种(通常被忽视的)方法是使用防篡改验证哈希,例如ASP.NET对视图状态的处理。
盲目使用/信任LoggedInUserId
或IsAdministrator
Cookie的服务器程序确实设计得非常不安全! :)
快乐的编码。
*所有最新的浏览器都支持HTTPOnly Cookie,但JavaScript无法读取/覆盖这些Cookie:但是,它们仍可被其他程序欺骗! (有些浏览器最近才获得支持:例如Chrome 12,iOS4,Safari 5。)
答案 1 :(得分:2)
通过Javascript设置的Cookie不需要传输:它们由浏览器中运行的代码设置,它们也由浏览器存储(与所有cookie一样)。您可以将其视为浏览器向自己写下提醒。