安全なwebアプリケーションの作り方 308-343
- 認証
- ログイン
- SQLインジェクション脆弱性が存在すると迂回出来るからあぶない
- →もとのパスワード知らないまま入れたりするけど、SQLインジェクション脆弱性あるとパスワードわかったりするから平文で保存するな
- 色んな攻撃がここにされる:パスワード試行/ソーシャルorショルダーハック/フィッシング
- 対策:SQLインジェクション脆弱性をなくす/パスワードを予測困難にする
- パスワードについて。結局人間が打つものなんだから複雑なものにならなくて、だから辞書攻撃とかが成立するんだけど、でもサービスとしては複雑なパスワード設定してほしいやん。でも、パスワードって見えるとやばいから type=password にして入力時に見えないようにするんだけど、これって危険な(脆弱な)パスワードでもなんか入力しやすいからやばくない?みたいな話があったらしい。個人的には基本的に長いマスターパスワードだけ覚えれば覚えればいい1Passwordってサービスがおすすめで、こういうのがもっと普及してリテラシーの最前提みたいになるといいなと思う。無理だろうけど。
- 結局人間の心理が絡むと攻撃しやすくなるし攻撃しにくくもなるしっていう話
- 総当りへの対策 →アカウントロック
- ログインIDを秘匿することで、総当たりのオーダー増やすことが出来るのでそれでもOK 一般に公開するNNとは別にメアドでログインするとか、そういうやつ。
- パスワードの保存方法
- 漏洩したときに、使いまわしてるユーザがいると甚大な被害が出るよね。
- どのアルゴルズムを使うか、生成、保管、危殆化時の最暗号化とかの問題があって、アルゴリズムはまあ秘密の国のアリス読みましょう。保管が一番難しい。
- ので、パスワードをまた暗号で保護するんじゃなくて、メッセージダイジェストで保護することが多い←メッセージダイジェストとかするの、暗号化じゃないの?
- 暗号学的ハッシュ関数が満たすべき要件:計算困難性/弱衝突耐性/教衝突耐性→秘密の国のアリス
- 攻撃するときの、レインボークラックがすごい!!!めっちゃすごいから→ p.342 簡単に言うとハッシュチェーンを何個も作っといて、適当なやつで一致するやつをDBから見つけたらそのチェーン内に欲しいパスワードがあるとかいうやつ
- 自動ログイン
- ほんとは好ましくないんだけど、ログイン状態を継続していることを前提としたサービスがおおい。はてなもわりとそうだし、ニコニコもTwitterもGoogleもそんな感じだよね
- 前もやったけど、🍪にid/pass残して自動ログインとかするのは危険だから、セッションの寿命を延ばしてセッションidでごにょるか、トークンを使う。チケットもよさそうだけど、よくわからない: 2010-05-02 - T.Teradaの日記、http://itmcreate.com/wp/archives/2112 とか。ディズニーランドみたいなもんかなあ
- ログインフォーム
- エラーメッセージ
- id/passのどちらが間違いかわかるだけで探索範囲が半減すると言っても過言ではないから、「id/passが違うか、アカウントロックされてるよ」って情報だけ渡すのがよい。ほんとうにロックされているときは正規ユーザにはメールを届ける。
- ログアウト
- !!副作用あるからPOSTリクエスト!!
- セッション破棄する。必要ならCSRF対策の対象にもする←?
- サイボウズ製品の脆弱性について > ログアウトに関するクロスサイトリクエストフォージェリ(CSRF)の脆弱性【CY08-09-001】 あーね、こういうことがあったのか、なるほど
- ログイン
この節、秘密の国のアリスで読んだ〜〜〜が多くて楽しかった、記憶がつながる感ね