我该如何保护我的Heroku应用程序的私密性?

34

有没有一种方法可以完全保持我的应用程序私有,并只允许开发人员访问?

当随机用户输入URL时,页面应该像一个空白页面,但是当开发人员输入URL时,他们应该能够访问应用程序。


1
如果有人从谷歌搜索node.js而来,请点击此链接:http://blog.modulus.io/nodejs-and-express-basic-authentication - funroll
7个回答

17

我采用的简单方法是在每个操作执行之前实现一个before_filter,要求进行HTTP身份验证。

这种解决方案可以与其他身份验证层(如Devise或其他)很好地配合使用。

USERS = { "user" => "secret" }

before_filter :authenticate

def authenticate
  authenticate_or_request_with_http_digest("Application") do |name|
    USERS[name]
  end
end

每当其他同级节点访问 yourdomain.heroku.com 时,他们需要进行 HTTP 身份验证,如果设置了其他身份验证,则还需要进行其他身份验证。


最好将用户名和密码存储为Heroku配置变量(http://blog.heroku.com/archives/2009/4/7/config-vars)并进行哈希处理(http://zacharyfox.com/blog/ruby-on-rails/password-hashing),但只有当Rails.env == 'production'时才应进行身份验证。 - avalez
1
我能在AngularJS应用程序(angular-fullstack生成器)中使用这个吗?如果可以,我应该把这段代码放在哪里才能推送到Heroku? - LifeOnLars
Rails 4已经内置了上述功能:http://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Basic.html - Thiago Figueiro

8
现在,您还可以使用一个Heroku add-on,允许您指定能够访问应用程序的用户的电子邮件,并使用Persona(又名BrowserID)来验证用户(无需特定于站点的密码)。

似乎现在在欧洲也可用了。 - conradkleinespel

6

一个非常简单的解决方案是添加一个可以存储在用户计算机上的cookie键。虽然这不是完美的解决方案,因为有人可能会获取该密钥,但它可以基本保护您的网站免受不明身份者的访问。您可以使用类似于http://www.yourdomain.com?access_key=random_string 的URL,然后将以下内容添加到您的应用程序控制器中。

class ApplicationController < ActionController::Base
  before_filter :check_redirect_key

  def check_redirect_key
    if request[:access_key] != 'random_string' && cookies[:access_key] != 'random_string'
      redirect_to "/404.html" 
    elsif request[:access_key] == 'random_string'
      cookies.permanent[:access_key] = 'random_string'
    end
  end

end

这段代码将检查用户机器上的url或cookie中是否存在访问密钥,如果在任一位置存在,则允许用户进入。这样一来,一旦他们使用密钥访问了该网站,他们就可以直接访问url。


谢谢!这很简单明了,我将其应用到了一个 sailsjs(node)应用程序中,效果非常好。 - Diego Pamio

2

0

我的(也很便宜的)解决方案(使用基于类的视图的Django应用程序)是在所有基于类的视图中使用SuperUserRequiredMixin,像这样:

class BlogPostDetailView(SuperuserRequiredMixin, DetailView):
    template_name = "blogpost-detail.html"
    model = BlogPost

添加/移除此mixin是我处理此问题的方式。


0

我为自己构建了rack_staging gem来处理这种用例,它可能对你也有用。


0

看看authlogic gem,特别是Single Access Token功能。

如果没有传递适当的单一访问令牌作为参数,您可以向任何人返回404。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接