LoginSignup
2
0

More than 3 years have passed since last update.

disabledは簡単に外せる

Last updated at Posted at 2020-08-31

先日公開したアプリに問題が見つかり、解決したので状況を共有します。

ボタンの無効化は解除できる

下のようにゲストアカウントのプロフィールは変更できないように、ボタンにdisabledを付けていたのですが、

スクリーンショット 2020-08-31 17.57.40.png

デベロッパーツールを使ってdisabledを消すと、

recording (1) (1).gif

ボタンの無効化が解除されてメールアドレスを変更することができてしまいます!

recording.gif

サーバー側で対策する

ゲストアカウントの場合は変更を受け付けないようにします。

users_controller.rb
def update
user = User.find(params[:id])
  if !user.guest && user.update(user_params)
    render json: { user: user }
  end
end

ゲストアカウントは更新できないことをテストします。

user_request_spec.rb
describe '#update' do
  it 'ユーザー情報を更新できること' do
    user_params = attributes_for(:user, email: 'foo@example.com')
    patch v1_user_path(user.id), params: { user: user_params }
    user.reload
    expect(user.email).to eq 'foo@example.com'
  end

  it 'ゲストアカウントは更新できないこと' do
    guest = create(:user, guest: true, email: 'guest@example.com')
    user_params = attributes_for(:user, email: 'foo@example.com')
    patch v1_user_path(guest.id), params: { user: user_params }
    guest.reload
    expect(guest.email).to eq 'guest@example.com'    
  end
end

無事成功!!

2 examples, 0 failures, 2 passed

パスワードを強力にする

サーバー側の対策によりデータベースの内容を変更することはできなくなりましたが、認証にfirebaseを使っているので、firebase側に保存されているメールアドレスとパスワードは変更されてしまう恐れがあります。

ゲストアカウントだから誰でも使えるしパスワードは「password」でいいか、と推測されやすいパスワードにしていましたが、このままではマズイので変更します。(さらにソースも公開していたのでそもそも推測する必要すらありません。)

signup.vue
guestLogin () {
  firebase
    .auth()
    .signInWithEmailAndPassword('guest@example.com', 'password')
}

元々は上のようにパスワードを直書きしていましたが、環境変数を使うことにします。

signup.vue
guestLogin () {
  firebase
   .auth()
   .signInWithEmailAndPassword('guest@example.com', process.env.GUEST_PASSWORD)
}
.env
GUEST_PASSWORD=*************

これでソースを見てもゲストアカウントのパスワードがわからないようになりました。

まとめ

ボタンやフィールドを無効にしていても簡単に解除できるので、サーバー側で対策しましょう。

さいごに

間違いなどがありましたら、ご指摘していただけると幸いです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0