ECs*_*Vku 4 .htaccess ruby-on-rails heroku
我最近在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
谢谢!
Nic*_*ick 10
您可以在Rack中间件层阻止请求.您可以使用gem(机架攻击),也可以构建自己的Rack中间件.
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
Run Code Online (Sandbox Code Playgroud)
既然我们喜欢测试,那么在实现解决方案之前,首先要编写测试(使用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
Run Code Online (Sandbox Code Playgroud)
我还没有实现这个选项(我使用了机架攻击),但是这里有一个粗略的想法,看看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'}, ["Forbidden\n"]]
end
end
Run Code Online (Sandbox Code Playgroud)
然后你可以通过添加它来配置Rails来使用它 config/application.rb
config.middleware.use RefererSpamBlocker
Run Code Online (Sandbox Code Playgroud)
有关如何编写Rack中间件的更多详细信息,请访问:http: //railscasts.com/episodes/151-rack-middleware
如果您希望能够在不更改代码的情况下更改阻止的内容,则可以使用ENV vars而不是对垃圾邮件发送者进行硬编码.
| 归档时间: |
|
| 查看次数: |
1207 次 |
| 最近记录: |