加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何使用Heroku阻止引荐垃圾邮件

发布时间:2020-12-17 03:56:25 所属栏目:百科 来源:网络整理
导读:我最近在Heroku上推出了我的第一个应用程序,我一直看到Google Analytics中的流量显示在我的应用中不存在的页面上.我不建议点击这些网站,但它显示在“首页”下http://co.lumb.co/然后显示http://forum.topic56809347.darodar.com/作为“热门推荐人” . 我已经
我最近在Heroku上推出了我的第一个应用程序,我一直看到Google Analytics中的流量显示在我的应用中不存在的页面上.我不建议点击这些网站,但它显示在“首页”下http://co.lumb.co/然后显示http://forum.topic56809347.darodar.com/作为“热门推荐人” .

我已经看到一些涉及使用.htaccess文件阻止垃圾邮件发送者的解决方案,但我如何使用Heroku和Rails执行此操作? (我是两个新手)

这是我应该关注的吗?我在这个Wordpress线程上发现了一个类似的问题:
https://wordpress.org/support/topic/a-non-existent-page-is-showing-up-on-my-analytics

谢谢!

解决方法

您可以在Rack中间件层阻止请求.您可以使用gem( rack-attack),也可以构建自己的Rack中间件.

选项1:机架攻击

https://github.com/kickstarter/rack-attack

如果你想采用机架攻击方式,在安装它之后,你可以使用如下所示的配置:

# config/initializers/rack-attack.rb

class Rack::Attack
  blacklist("block referer spam") do |request|
    spammers = [/co.lumb.co/,/darodar/]
    spammers.find { |spammer| request.referer =~ spammer }
  end
end

既然我们喜欢测试,那么在实现解决方案之前,首先要编写测试(使用RSpec请求规范):

# spec/requests/referer_spam_block_spec.rb

require "rails_helper"

describe "Referer blacklist",type: :request do
  describe "referer spam" do
    it "is blocked" do
      spammers = ["http://co.lumb.co/","http://forum.topic56809347.darodar.com/"]

      spammers.each do |spammer|
        get root_path,{},{ "HTTP_REFERER" => spammer }

        expect(response).to be_forbidden
      end
    end
  end

  describe "regular referer" do
    it "is not blocked" do
      get root_path,{ "HTTP_REFERER" => "google.com" }

      expect(response).to be_ok
    end
  end

  describe "direct request" do
    it "is not blocked" do
      get root_path

      expect(response).to be_ok
    end
  end
end

选项2:自定义中间件

我还没有实现这个选项(我使用了机架攻击),但是这里有一个粗略的想法,看看Rack中间件是什么样子才能使它工作(注意:我没有测试过这个代码):

# lib/referer_spam_blocker.rb

class RefererSpamBlocker
  SPAMMERS = [/co.lumb.co/,/darodar/]

  def initialize(app)
    @app = app
  end

  def call(env)
    if blacklisted?(env)
      forbidden
    else
      @app.call(env)
    end
  end

  private

  def blacklisted?(env)
    !SPAMMERS.find { |spammer| env["HTTP_REFERER"] =~ spammer }.empty?
  end

  def forbidden
    [403,{'Content-Type' => 'text/plain'},["Forbiddenn"]]
  end
end

然后你可以通过将它添加到config / application.rb来配置Rails来使用它

config.middleware.use RefererSpamBlocker

有关如何在此处编写Rack中间件的更多详细信息:
http://railscasts.com/episodes/151-rack-middleware

奖金

如果您希望能够在不更改代码的情况下更改阻止的内容,则可以使用ENV vars而不是对垃圾邮件发送者进行硬编码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读