私の懸念は、悪意のあるユーザーが私のサイトに登録するときに余分なパラメーターを追加する可能性についてです。Rails 3.2.8 と Devise 2.1.2 を使用しています。属性を持つクラスUser
がありますadmin
user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :trackable,
:validatable, :token_authenticatable, :lockable
end
schema.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
、 と のカスタム ビューを使用し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 を構成できますか? 不可能な場合、別の解決策はありますか?