sinatra - 在 Sinatra 上启用 CSRF

标签 sinatra csrf-protection

似乎没有关于如何使用 Sinatra 中的 Rack::Protection 为表单启用 CSRF 保护的文档。有人做过这个吗?我似乎不知道如何告诉 Sinatra 启用此功能。

最佳答案

Sinatra 网站在这方面没有帮助,但可以按照 comments 中的描述启用 CSRF token 。在 Rack::Protection::AuthenticityToken 模块上方。

token 存储在 env['rack.session'][:csrf] 下,并且必须手动添加到名为 authenticity_token 的隐藏输入下的表单中(或者您配置它使用的任何内容)。

例如:

require 'rack/protection'
use Rack::Protection::AuthenticityToken

get '/' do
  "<form method=post action=/hello>
     <input type=hidden name=authenticity_token value='#{env['rack.session'][:csrf]}'>
     <input type=submit>
   </form>"
end

post '/hello' do
  'hello' # will fail unless a valid authenticity_token parameter is passed
end

Rack::Protection::AuthenticityTokenRack::Protection::FormToken 之间的区别是,如果发出请求,后者将不需要 token 通过 AJAX。

关于sinatra - 在 Sinatra 上启用 CSRF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25600046/

相关文章:

javascript - 告诉我为什么我不应该这样做 : Sinatra API with Full JS/HTML Frontend

Ruby 和 Sinatra 的 session 问题

java - 如何防止我的网络应用程序在 Java 中受到 CSRF(跨站点请求伪造)

ruby - 在 Apache 上运行 Ruby 应用程序

ruby - 启动一些进程,然后在 Sinatra 上重定向回来(即使进程仍在运行)

spring-security - 在 Spring Weblux 中禁用给定路径的身份验证和 csrf?

php - CSRF token 与多个选项卡冲突

cookies - 如何保护Web应用程序免受cookie窃取攻击?

javascript - 如何在 JavaScript 中为 Laravel 设置 CSRF?

progress-bar - 使用 Ruby/Sinatra/Haml/Passenger/nginx 获取嵌入式上传进度条的最简单方法是什么?