小编Chr*_*ang的帖子

在Rails中为经过身份验证的POST端点禁用CSRF保护是否安全?

如果我可以在rails应用程序中禁用端点的CSRF令牌检查,我发现自己可以提供更好的用户体验.

端点是一个create动作(路由到POST /whatever),它位于设计:authenticate!过滤器后面.

我是否会通过禁用该特定端点的CSRF保护来打开自己的任何其他安全风险,还是可以安全地依赖身份验证before_filter来阻止CSRF令牌防范的恶意请求?


下面是一个更详细的解释,为什么我想这样做,如果有人感兴趣.

我的用例是我基本上想要创建一些非常类似于Facebook的按钮,但是这个按钮(与Facebook版本不同)通常会在同一页面上多次出现.

CSRF保护工作正常,但用户使用空cookie访问页面的情况除外.

在这种情况下,rails会为X个请求中的每个请求生成一个新会话,因为它们都是无cookie的.当然,对于每个新会话,都会生成一个新的CSRF令牌,并在对iframe的响应中返回.

由于浏览器仅为域保留一个cookie,因此来自每个iframe的任何后续请求将映射到同一会话,因此所有CSRF令牌(除了一个)都无效.

映射到单个会话很不错,因为可以提示用户登录一次,然后将每个后续按钮按下映射到相同的登录 - 而无需重新加载页面.

折衷方案是用a响应401 Unauthorized,但保留被拒绝请求的会话(通过覆盖handle_unverified_request).这将再次触发弹出窗口,但这次是因为用户已经登录而发生了即时重定向.

当然,最好避免弹出窗口中闪烁的符号,因此我想一起禁用CSRF保护以便进行create操作.

security iframe ruby-on-rails csrf

2
推荐指数
1
解决办法
1643
查看次数

标签 统计

csrf ×1

iframe ×1

ruby-on-rails ×1

security ×1