gpt4 book ai didi

http - 如果我将 session 存储在 localStorage 而不是 cookie 中,我的网站会更安全吗?

转载 作者:可可西里 更新时间:2023-11-01 16:43:07 25 4
gpt4 key购买 nike

据我所知,大多数具有身份验证的网站都是这样工作的:

  1. 用户使用 POST 表单发送用户名-密码对。
  2. 服务器识别用户并将 session key 与 HTTP 响应的 header 一起存储在他的 cookie 中。
  3. 当用户点击网页上的任何链接时,浏览器会发送 GET 请求以及我们刚刚设置的 session key 。
  4. 服务器通过cookie中的 session key 识别用户。

它会导致一些问题,比如 CSRF .我知道它们都不是无法解决的,但请考虑以下方法:

  1. 用户通过 Ajax 通过 POST 发送用户名-密码对。
  2. 服务器在 HTTP 响应正文中响应一个 session key 。
  3. 客户端 javascript 将 session key 存储在 localStorage/DOM 中。
  4. 当用户点击网页上的任何链接时,javascript 会阻止浏览器的默认行为,并通过 Ajax 发送 GET 请求,并使用我们刚刚设置的 session key 。(例如 http://www.myapp.com/articles?session_key=af18db9c10a916ec12)
  5. 服务器通过GET参数识别用户。

这种方法在安全方面是否更有效?它有什么缺点?

最佳答案

这是个绝妙的主意。很快我想到了两件事(尽管我确信还有更多要说的):

  1. 最后,您仍然从浏览器向服务器发送 session key ,您只是使用 GET ... 标题行而不是 Cookie: ... 行。黑客仍然可以通过欺骗整个请求来破解它。但是,特别是关于 XSRF 攻击,在这种攻击中,黑客诱使用户无意中在受信任的站点上提交表单,您的方案可能会通过仅为正在运行的应用程序中的链接提供 session key 来降低风险(而不是在每个页面加载时与 cookies )。酷!

  2. 一些浏览器(尤其是在企业界)出于安全原因完全禁用 javascript。它只占整体网络使用人口的一小部分,但您必须考虑到您的受众。通常,更改默认浏览器行为是有风险的。

附录:

阻止 XSRF 攻击的一种“标准”方法是在为任何包含表单的页面提供服务时随机生成 token 。 token 存储在服务器的 session 中,并存储在正在提供的表单中的隐藏字段中。提交表单时,您检查它是否包含与服务器 session 中的 token 匹配的 token 。这与您的解决方案本质上相同(它保证表单是从您的应用程序提供的页面提交的),但不需要更改默认浏览器行为。

关于http - 如果我将 session 存储在 localStorage 而不是 cookie 中,我的网站会更安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22269690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com