Rails 5.2公共站点遭Bot攻击,寻求防钻取的非登录防护方案
针对Rails 5.2站点Bot攻击的解决方案
以下是几个无需依赖Recaptcha的可行方案,结合你的Rails环境和Cloudflare配置实现精准拦截Bot、放行人类用户:
1. Rails端会话令牌验证
给分类钻取链接绑定当前用户会话的唯一令牌,Bot无法维持有效会话,自然无法通过验证:
- 生成钻取链接时,给每个会话生成随机令牌并附带在请求参数中
- 在
SearchResultsController里验证令牌与当前session的一致性,不匹配则直接返回403
示例代码:
# 视图中生成钻取链接的辅助方法 def drill_down_link(category) session[:search_token] ||= SecureRandom.hex(16) search_results_path(category_id: category.id, token: session[:search_token]) end # SearchResultsController的前置验证 before_action :validate_search_token private def validate_search_token unless params[:token] == session[:search_token] head :forbidden return end end
2. Cloudflare精准Bot拦截配置
放弃单纯的速率限制,改用Cloudflare的Bot管理功能:
- 开启Bot Fight Mode:在Cloudflare控制台「安全 > Bots」中启用,通过行为分析自动区分恶意Bot和人类,拦截异常请求
- 创建自定义防火墙规则:
- 拦截User-Agent包含
bot/spider/crawler且不属于Cloudflare标记的「友好Bot」的请求访问/searchresults - 拦截1分钟内请求
/searchresults超过10次的IP(可根据正常用户行为调整阈值)
- 拦截User-Agent包含
- 启用Managed Ruleset:开启「Bot Management」规则集,利用Cloudflare的Bot数据库精准拦截已知恶意Bot
3. JS触发式钻取链接
把静态钻取链接改成JS触发的按钮,Bot通常不会执行JavaScript,无法发起有效请求:
- 分类页的钻取按钮通过JS生成跳转链接,而非直接渲染a标签
- 给禁用JS的人类用户留备用提示(比如引导启用JS或提供联系通道)
示例代码:
<button class="drill-btn" data-category="categoryA">查看CategoryA资源</button> <script> document.querySelectorAll('.drill-btn').forEach(btn => { btn.addEventListener('click', () => { const category = btn.dataset.category; window.location.href = `/searchresults?category=${category}`; }); }); </script> <noscript> <p>请启用JavaScript以使用分类钻取功能,或联系我们获取资源帮助</p> </noscript>
4. 缓存优化降低服务器负载
即使有Bot请求,通过缓存减少后端压力:
- Rails端页面缓存:对
/searchresults的查询结果做缓存,相同参数的请求直接返回缓存内容,避免重复查询数据库
示例代码:def index @results = Resource.where(filter_params) expires_in 1.hour, public: true render cache: { key: "search_#{filter_params.to_query}", expires_in: 1.hour } end - Cloudflare页面规则缓存:给
/searchresults路径设置缓存规则,让Cloudflare直接返回缓存页面,不回源到你的服务器
5. 自动IP拉黑(结合Rails+Cloudflare API)
用代码自动识别高频请求IP,调用Cloudflare API拉黑,替代手动操作:
- 用Redis记录每个IP的
/searchresults请求频率,超过阈值则调用Cloudflare API添加到黑名单 - 可使用
cloudflare-rubygem简化API调用
内容的提问来源于stack exchange,提问作者mrdinghy
相关产品推荐
相关产品推荐

