はかせだけど博士じゃない

無職が就活しないでプログラミングとかする

N予備校プログラミング入門メモ12

はじめに

大復活。病院で診てもらったがインフルではなかった。

N予備校の続きの講座をざっと流し読みしてみたが、サーバサイドプログラミングが多いような気がする。N予備校の講座が終わったら少しフロントエンドの勉強もしたい。

3章 サーバサイドプログラミング入門

30.セッション固定化攻撃脆弱性の対策

  • セッションののっとる攻撃
  • 例では以下のように攻撃
    1. ユーザAでログインして書き込んでIDを表示(掲示板はIDを表示してある程度ユーザを認識できるようにしていた)
    2. ユーザBでログインしてDeveloper ToolsからCookietracking_idの値をユーザAのものに書き換え
    3. そのまま投稿するとユーザAと同じIDが表示されなりすまし成功
  • ハッシュ関数を使って対策してみる

31.より堅牢なセッション管理

  • 前回の対策は推測が可能のため、なりすまし対策としては十分でない
    • 方法が推測できれば同じIDで投稿できる
  • 検証の際に秘密鍵(推測が難しい長い文字列)を用いる
    • require('crypto').randomBytes(256).toString('hex')などでで得られる
    • 秘密鍵の管理自体も大変とのことなので少しググってみよう
  • 識別子を推測されにくいものに
  • 識別子をURLに入れない
  • HTTPS通信のCookieにはsecure属性を設定
    • HTTPS通信の場合のみCookieを利用するという設定
    • HTTPとHTTPSが混在しているアプリケーションの場合とかいろいろ考えることが多そうだ
  • ログイン成功時に新しいセッションの識別子を発行
  • 今回は「推測されにくいものに」を実践
  • Math.random関数は推測されやすいのでcrypto.randomBytesなどを用いるのがよい

32.CSRF脆弱性の対策

33.Herokuへの安全な公開

  • ここまでで対策してきたほかにも脆弱性が存在する可能性がある
  • とりあえずアプリケーションとしては安全といえそうなのでHerokuに公開してみる
  • Procfileを作成
    • アプリケーションの起動コマンド
  • app.jsonを作成
    • アプリケーション情報
  • package.jsonを編集
    • enginesを記述
  • index.jsを編集
    • ポートの設定
  • DBのURLを編集
  • コミット
  • Herokuにログイン
  • サーバを作成
  • DBを作成
  • herokuにpush
  • 以上で公開できた
  • 今のままだとHTTPでもアクセス可能なので対策する
    • HerokuのDBが存在してかつヘッダのx-forwarded-protoの値がhttpのときは404を返すようにする
  • git push heroku hoge:hugaはローカルのhogeをリモートherokuhugaにpush、みたいな意味のようだ
  • 確認できたのでheroku destroy --confirm <server-name>でサーバを消しておく

病み上がりだからかテンションが低い。