log

安全なwebアプリケーションの作り方 308-343

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

この節、秘密の国のアリスで読んだ〜〜〜が多くて楽しかった、記憶がつながる感ね