【问题标题】:Block another user from accessing the Rails application with my authentication阻止其他用户使用我的身份验证访问 Rails 应用程序
【发布时间】:2013-04-02 05:46:07
【问题描述】:

我托管了一个 Rails 应用程序,一个在线考试系统。用户需要注册才能访问系统。因此,将为每个用户提供唯一的凭据组合。让我们假设我的user-name/passworddemo/demo123。我希望我的应用程序阻止其他人登录系统,即使他知道我的凭据。这种情况的任何解决方案。

感谢您的帮助:)-

【问题讨论】:

    标签: ruby-on-rails web-applications authorization login-control


    【解决方案1】:

    使用 Cookie 会是更好的解决方案。当用户注册时,创建一个特定于用户和系统的 Cookie 值,并以加密格式(出于安全原因)并将其保存在与该用户对应的数据库中。登录时检查此 Cookie 令牌。当用户清除 cookie 时,他(他)可以请求管理员清除 DB cookie 以创建新的。

    使用 IP 不是更好的解决方案,因为在网络中,可以为 PC 分配动态 IP。

    【讨论】:

    • 但是动态分配 IP 并不意味着它不安全,因为将通过 DHCP 服务器为每台机器分配一个唯一的 IP。如果你试图阻止一个人在考试中与另一个人合作,他们难道不能读取他们的浏览器 cookie 并将其发送给其他人吗?这似乎是一个潜在的安全漏洞,而 IP 更难伪造。
    【解决方案2】:

    您可以在用户第一次登录时在数据库中记录用户的 IP 地址,并且只允许使用相同的凭据登录,但在等待一段时间(例如 1小时,或直到当前考试完成。这应该可以防止多个用户在短时间内登录到同一个用户帐户。

    可以在 Rails 控制器中使用 request.remote_ip 访问用户的 IP 地址。

    【讨论】:

    • 这在使用动态ip时不会造成其他困难吗?但是,您可以检查用户是否已经登录或在登录字段中添加额外的密码。
    【解决方案3】:

    您可以使用lock gem 为整个应用程序添加密码。

    首先,添加到您的 Gemfile。

    gem 'lock'
    

    然后

    bundle install
    

    接下来,创建您的密码

    rails g lock:create_password_file yourpasswordhere
    

    最后,添加锁定您的应用程序控制器,或任何您想要的(参见documentation)。

    ApplicationController < ActionController::Base
      lock
    end
    

    【讨论】:

    • 请理解问题后再回答。
    • 对不起,我不明白@Rajesh。它确实“阻止其他人登录系统,即使他知道我的凭据。”
    • 我不想锁定我的应用程序。我想阻止其他人使用我的凭据登录。因此,如果其他人拥有自己的凭据,他们将能够登录该应用程序。希望你明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多