Rails 登录重置会话

2024-02-01

最佳实践是在用户成功登录时调用reset_session并在用户注销时再次调用它吗?这样做有任何副作用/问题吗?


The Ruby on Rails 安全指南 http://guides.rubyonrails.org/security.html#sessions建议在身份验证成功后重置会话 ID,以防止会话固定 https://www.owasp.org/index.php/Session_fixation漏洞。本质上,会话固定涉及攻击者设置您的会话 id(或者当您点击登录页面时能够知道 id 的其他方法),并且在您成功进行身份验证后,攻击者使用以下方法为自己的浏览器设置 cookie您的会话 ID,随后将被验证为您。身份验证成功后重置会话 ID 可以完全缓解此类漏洞。创建操作中的一些示例代码可能如下所示:

def create
  user =  User.find_by_email(params[:email])
  if user && user.authenticate(params[:password])
    old_values = session.to_hash
    reset_session
    session.update old_values.except('session_id')
    session[:athlete_id] = athlete.id
    redirect_to root_url, notice: "Authentication successful!"
  else
    flash.now.alert = "Invalid credentials"
    render "new"
  end
end

请注意,如果您希望保留任何数据,请务必在重置会话之前复制会话。

至于在注销时调用reset_session,是的,这也是最佳实践。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 登录重置会话 的相关文章

随机推荐

  • MATLAB - 具有布尔值的棘手颂歌系统

    编辑 感谢您的支持 现在我终于添加了图像 添加了完整的 m file 尽管我认为没有必要 代码的关键是 xp 2 x 2 gt X2 xp 3 gt 0 xp 3 x 3 gt X3 xp 2 gt 0 完整代码 function xp u
  • Guice的injectMembers方法

    我了解使用构造函数注入相对于 setter 注入的好处 但在某些情况下我必须坚持仅使用基于 setter 的注入 我的问题是如何使用注入所有基于设置器的注入类的成员injector injectMembers method I am cal
  • getGenericParameterTypes 和 getParameterTypes 之间的区别

    我正在尝试了解之间的区别getGenericParameterTypes and getParameterTypes方法 我知道有人回来了Class 和另一个Type 但真正的区别是什么 考虑方法 public void method1 T
  • Git克隆存储库错误:RPC失败;结果=56,HTTP 代码=200

    我已经使用 Git 存储库几年了 但仍然感觉像个新手 非常欢迎帮助 它开始克隆一段时间 remote Counting objects 22394 br remote Compressing objects 100 12314 12314
  • iconv 返回奇怪的结果

    我正在研究一种方法来解决在 PHP 中创建帐户的自动脚本中使用特殊字符的问题 由于电子邮件地址和其他地方不需要特殊字符 因此我试图删除它们 但在将它们提供给脚本之前我无法删除它们 因为用户名必须正确显示给其他用户 例子 J rgen G t
  • scala 类中属性的可见性

    我通过以下方式在类的构造函数中定义了一个属性 class Step val message String 当我尝试访问时message从 Java 代码中获取可见性错误的值 为什么 如果添加 scala reflect BeanProper
  • 块递归和破坏保留周期

    为了更好地说明问题 请考虑以下块递归的简化形式 block void next int int index if index 3 return int i index next i next 0 XCode 启用 ARC 警告 在此块中强烈
  • 在 TypeScript 中输入 gql-tag

    我正在使用 GraphQL 并且希望严格输入gql 是否有可能使result变量的形状ResultData即使用最新版本的 TypeScript 它只与输入有关 与运行时无关 interface Data one string two nu
  • iOS 中的应用内购买测试

    我在用Xcode 8 0 斯威夫特 3 0并在我的 iPad 上进行应用程序购买测试 我想使用沙盒用户测试应用程序购买 设备设置中没有添加账户 问题是我没有获取产品列表来响应产品请求代码 请看一下我的代码 let PRODUCT ID MY
  • 使用大括号括起来的初始值设定项列表初始化结构时出错

    struct CLICKABLE int x int y BITMAP alt BITMAP bitmap CLICKABLE alt 0 CLICKABLE input 1 2 0 0 这段代码给我以下错误 无法从大括号括起来的初始值设定
  • 将表格放置在浮动图像旁边

    我想将表格放置在浮动图像旁边 同时保持表格宽度为 100 并且不会溢出父元素的宽度 我尝试了各种技术 但尚未达到我想要的结果 我的意思是 http jsfiddle net AX3UR 3 http jsfiddle net AX3UR 3
  • 查询过滤器表达式树的解析器

    我正在寻找一个可以对查询过滤器进行操作的解析器 然而 我不太清楚这些术语 所以事实证明这是一项艰苦的工作 我希望有人能帮助我 我读过有关 递归下降解析器 的内容 但我想知道这些是否适用于成熟的语言解析器 而不是我正在寻找的逻辑表达式评估 理
  • Apple Vision 框架 – 从图像中提取文本

    我正在使用 iOS 11 的 Vision 框架来检测图像上的文本 文本检测成功 但是我们如何获取检测到的文本呢 识别图像中的文本 VNRecognizeTextRequest适用于 iOS 13 0 和 macOS 10 15 及更高版本
  • 如何找到 3D 向量的哈希值?

    我正在尝试使用固定网格大小的方法执行宽相碰撞检测 因此 对于每个实体的位置 x y z 每个浮点数类型 我需要找到实体位于哪个单元格中 然后我打算将所有单元格存储在哈希表中 然后迭代报告 如果有 碰撞 所以 这就是我正在做的事情 网格单元的
  • 即使已安装,Plotly.io 也看不到 psutil 包

    我正在尝试执行以下代码 import numpy as np import pandas as pd import matplotlib pyplot as plt import matplotlib matplotlib inline i
  • 设置图例/图案与堆叠条形图中文本之间的空间

    我有 gnuplot 数据文件 CS 31 73 18 32 20 78 22 88 1 97 1 29 0 90 2 01 FL 43 27 29 45 15 64 6 55 1 64 1 27 2 18 0 00 HB 32 44 20
  • ReactTestUtils.Simulate 无法通过 addEventListener 触发事件绑定?

    这是示例 http jsfiddle net hulufei twr4thuh 7 http jsfiddle net hulufei twr4thuh 7 绑定时才起作用onClick在虚拟 dom 中 如第 18 行 但是如果我注释第
  • solr教程无法创建集合

    我正在尝试运行 solr 6 6 0 教程 运行后 bin solr start e cloud noprompt 它在端口 8983 和 7574 上启动 solr 但无法创建入门集合 并出现以下错误 ERROR Failed to cr
  • 在 Mac/iPhone 上进行联网的最有效方法?

    在 Mac 和 iPhone 上建立 TCP 连接或发送 UDP 数据报的最有效方法 即工作量与可读性和可维护性的最佳比率 是什么 我非常熟悉经典的 BSD 套接字 但我现在的目标不是可移植性 我只是想快速完成一个小项目 我很想拥有一个 A
  • Rails 登录重置会话

    最佳实践是在用户成功登录时调用reset session并在用户注销时再次调用它吗 这样做有任何副作用 问题吗 The Ruby on Rails 安全指南 http guides rubyonrails org security html