我担心恶意用户在我的网站上注册时添加额外参数的可能性。我正在使用 Rails 3.2.8 和 Devise 2.1.2。我有一个User
带有admin
属性的类
用户.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :trackable,
:validatable, :token_authenticatable, :lockable
end
架构.rb
create_table "users", :force => true do |t|
t.boolean "admin"
t.string "email", :null => false
t.string "encrypted_password", :default => "", :null => false
# other devise columns are not relevant for the question...
end
我正在使用提供Devise::RegistrationsController
的用户注册,以及带有 and 的自定义email
视图password
:
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="form_line">
<%= f.label :email, 'Email' %>
<%= f.email_field :email %>
</div>
<div class="form_line">
<%= f.label :password, 'Password' %>
<%= f.password_field :password %>
</div>
<div class="form_line">
<%= f.label :password_confirmation, 'Password confirmation' %>
<%= f.password_field :password_confirmation %>
</div>
<div class="actions">
<%= f.submit "Register", class: 'button' %>
</div>
<% end %>
我工作得很好,但是如果恶意用户在发布请求中添加了一个admin
带有值的参数true
,那么用户就会以管理员权限创建。
Started POST "/users" for 127.0.0.1 at 2012-09-10 18:46:15 +0200
Processing by RegistrationsController#create as HTML
Parameters: { "user"=>{"email"=>"test@example.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "admin"=>"true" }
这是我网站的一个安全漏洞。当用户注册(或更新其个人资料,我想我会遇到同样的问题)时,我可以将 Devise 配置为忽略额外的参数(我只需要电子邮件和密码)吗?如果不可能,还有其他解决方案吗?