[ruby on rails]rack-cors, rack-attack

gem 'rack-attack'
gem 'rack-cors'

1. rack-attack 可以根据ip、域名等设置黑名单、设置访问频率

  • 设置黑名单
# 新增 config/initializers/rack_attack.rb
# 请求referer如果匹配不上设置的allowed_origins,返回403 forbidden
Rack::Attack.blocklist('block bad domains') do |req|next if !req.path.start_with?('/admin_api/') || Rails.env.test?Rails.application.credentials.allowed_origins.none? { |r| Regexp.new(r) =~ req.referer }
end# EDITOR="vim" bin/rails credentials:edit
allowed_origins:- api.xxx.net- localhost
  • 设置访问频率
class Rack::Attack# Rack::Attack.cache.store = ActiveSupport::Cache::RedisCacheStore.new(url: "...")Rack::Attack.cache.store = ActiveSupport::Cache::MemoryStore.new# key: "rack::attack:#{Time.now.to_i/:period}:public_data/ip:#{req.ip}"throttle('public_data/ip', limit: 2, period: 1.minutes) do |req|req.ip if req.path.start_with?('/pc/v1/public_data')endself.throttled_responder = lambda do |_env|[429, # status{}, # headers['throttling, retry later']] # bodyend
end

2. rack-cors 可以根据域名、访问方法、资源设置跨域请求cors

# config/initializers/cors.rbRails.application.config.middleware.insert_before 0, Rack::Cors doallow doorigins '*'resource '*', headers: :any, methods: [:get, :post, :put, :patch, :delete, :options, :head],end
end
  • 复杂一些
Rails.application.config.middleware.insert_before 0, Rack::Cors doallow doorigins 'localhost:3000', '127.0.0.1:3000',/\Ahttp:\/\/192\.168\.0\.\d{1,3}(:\d+)?\z/# regular expressions can be used hereresource '/file/list_all/', :headers => 'x-domain-token'resource '/file/at/*',methods: [:get, :post, :delete, :put, :patch, :options, :head],headers: 'x-domain-token',expose: ['Some-Custom-Response-Header'],max_age: 600# headers to exposeendallow doorigins '*'resource '/public/*', headers: :any, methods: :get# Only allow a request for a specific hostresource '/api/v1/*',headers: :any,methods: :get,if: proc { |env| env['HTTP_HOST'] == 'api.example.com' }end
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/153579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各类Linux操作系统如何选择?

各类Linux操作系统如何选择? 企业级应用:RHEL/CentOS 桌面平台:Ubuntu 开源服务器:CentOS 1.1 RedHart 1.1.1RHEL RHEL是指Red Hat Enterprise Linux,是由Red Hat公司开发和维护的一款商业Linux操作系统。它是基于…

钩子函数-hook

钩子函数-hook hook 的作用 利用钩子函数可以在所有测试用例执行前做一些预置操作(如:准被测试数据、测试环境) 或者在测试结束后做一些后置操作(如:清理测试数据) 钩子函数在其它框架中也有&#xff0…

如何在公网环境下使用内网穿透工具实现用ipad pro进行代码开发

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7. ipad远…

特殊文件(Properties属性文件)

一,为啥要学特殊文件 二, 常用方法:读取 三,案例 import java.io.FileReader; import java.util.Properties; import java.util.Set;public class Main {public static void main(String[] args) throws Exception {//1,创建一个键值对对象P…

vim 文件在linux不换行,只显示^M解决办法

训练模型,生成train.log文件,vi 查看,无分行,直接瞎眼。 搜了很久,终于找到解决方案:在vim的命令模式中输入:%s/\r/\r/g这样就好了。

大势浏览器DasViewer里面的查询和选择功能,如何实现与矢量数据关联?

答:矢量数据目前得是大势这边软件生产的才可以进行关联。 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三维模型,提供方便快捷的数据浏览操作。

如何解决requests库自动确定认证arded 类型

requests 库是一种非常强大的爬虫工具,可以用于快速构建高效和稳定的网络爬虫程序。对于经常使用爬虫IP用来网站爬虫反爬策略的我来说,下面遇到的问题应当值得我们思考一番。 问题背景 在使用requests库进行网络请求时,有时会遇到需要对目标服务进行认证…

Hive客户端hive与beeline的区别

hive与beeline简介 1、背景2、hive3、beeline4、hive与beeline的关系 1、背景 Hive的hive与beeline命令都可以为客户端提供Hive的控制台连接。两者之间有什么区别或联系吗? Hive-cli(hive)是Hive连接hiveserver2的命令行工具,从Hive出生就一直存在&…

基于Java封装继承多态实现的一个简单图书系统

首先我们大概了解下图书系统的需求 1.要有两种身份 管理员和普通用户。普通用户和管理员分别对应的功能不一样,需要分开实现 2. 图书系统肯定要有图书,和存放图书的地方,存放就用数组来实现 3.实现对应用户的功能 接下来我们第一步&#xf…

【开源】基于JAVA的学生日常行为评分管理系统

项目编号: S 010 ,文末获取源码。 \color{red}{项目编号:S010,文末获取源码。} 项目编号:S010,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.2.1 登录注册模块2.2…

Threejs_07 环境、透明度、纹理、ao、光照等贴图的渲染

老陈打码 继续学习老陈threejs 支持!!!!!! 下面用到的所有图片、资源、hdr文件都是老陈打码的原资源 链接:https://pan.baidu.com/s/1WWWHgekCIH7OnjI7S_3ZtQ 提取码:6666 Thre…

掌握Java核心知识,轻松应对面试挑战!

问题:什么是对象流ObjectInputStream?如何使用对象流ObjectInputStream在Java中读取对象的数据? 回答: 对象流ObjectInputStream是Java中用于读取对象的数据的输入流。它继承自InputStream类,可以实现对Java对象的序列…

最新外链系统强势来袭

1、支持微信短链(h5跳转二维码、小程序) 2、支持在线短链生成(长链接转短链) 3、支持活码生成 4、支持抖音卡片(抖音跳转微信二维码、小程序) 5、支持抖音二维码扫码跳转微信(二维码、h5、小程序…

关系数据库理论【数据库系统概论】

1.问题的提出 1.1关系模式的表示 关系模式由五部分组成,是一个五元组:R(U,D,DOM,F) 元组概念R关系名R是符号化的元组语义。UU为一组属性。比如学号,姓名。DD为属性组U中的属性所来自的域。比…

国学短剧《我是小影星》栏目火热开拍

近日,国学短剧《我是小影星》栏目花絮拍摄,在上海市徐汇区漕溪路595号A座B1层开拍。该节目招募全国各地的有才华,有表现力怀揣梦想的小朋友来参与节目拍摄。节目旨在以中华传统文化为切入点,通过戏剧、歌舞、音乐等多种艺术形式的…

什么是泛型编程和模板技术?C语言中如何实现泛型编程?

泛型编程是一种编程范式,其目标是编写可以在不同数据类型上工作的通用代码,而无需为每种数据类型编写特定的实现。这使得程序员能够编写更加通用、灵活和可复用的代码。在C语言中,虽然没有直接的泛型编程支持,但可以使用模板技术来…

opencv将32位深图片合成视频跳帧解决办法

在合成视频时候,大多数的图片都是24位深度的(即RGB三通道,一个通道8位),但是也存在少量的32位深的图片(RGBA,三个颜色通道加上A这个透明度通道),32位和24位的格式是不一样…

html页面直接使用elementui Plus时间线 + vue3

直接上效果图 案例源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"../js/vue3.3.8/vue.global.js"></script><link rel"styles…

chatGPT PLUS 绑卡提示信用卡被拒的解决办法

一、 ChatGPT Plus介绍 作为人工智能领域的一项重要革新&#xff0c;ChatGPT Plus的上线引起了众多用户的关注&#xff0c;其背后的OpenAI表现出傲娇的态度&#xff0c;被誉为下一个GTP 4.0。总的来说&#xff0c;ChatGPT Plus的火爆主要有两个原因。首先&#xff0c;其在人工…

nvidia tf32格式的意义是啥?和fp32的区别

nvidia tf32格式的意义是啥&#xff1f;:https://www.zhihu.com/question/545977619 作者&#xff1a;丽台科技 链接&#xff1a;https://www.zhihu.com/question/545977619/answer/2629134304 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c…