N予備校プログラミング入門メモ12
はじめに
大復活。病院で診てもらったがインフルではなかった。
N予備校の続きの講座をざっと流し読みしてみたが、サーバサイドプログラミングが多いような気がする。N予備校の講座が終わったら少しフロントエンドの勉強もしたい。
3章 サーバサイドプログラミング入門
30.セッション固定化攻撃脆弱性の対策
- セッションののっとる攻撃
- 例では以下のように攻撃
- ユーザAでログインして書き込んでIDを表示(掲示板はIDを表示してある程度ユーザを認識できるようにしていた)
- ユーザBでログインしてDeveloper ToolsからCookieの
tracking_id
の値をユーザAのものに書き換え - そのまま投稿するとユーザAと同じIDが表示されなりすまし成功
- ハッシュ関数を使って対策してみる
crypto
モジュールをインストール
31.より堅牢なセッション管理
- 前回の対策は推測が可能のため、なりすまし対策としては十分でない
- 方法が推測できれば同じIDで投稿できる
- 検証の際に秘密鍵(推測が難しい長い文字列)を用いる
require('crypto').randomBytes(256).toString('hex')
などでで得られる- 秘密鍵の管理自体も大変とのことなので少しググってみよう
- 識別子を推測されにくいものに
- 識別子をURLに入れない
- HTTPS通信のCookieにはsecure属性を設定
- ログイン成功時に新しいセッションの識別子を発行
- 今回は「推測されにくいものに」を実践
Math.random
関数は推測されやすいのでcrypto.randomBytes
などを用いるのがよい
32.CSRF脆弱性の対策
- クロスサイト・リクエストフォージェリ脆弱性
- どうでもいいけど「脆弱性」がすでに噛みそうなのに「クロスサイトリクエストフォージェリ脆弱性」って難易度高い
- 読み方は「シーサーフ」脆弱性
- 外部のサイトからリクエストを送る
- 例では、掲示板にログインした状態で、別に用意したpostメソッドを送るボタンをクリックすると勝手に投稿されるというもの
- 対策は以下
- ワンタイムトークンで対策する
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を返すようにする
- HerokuのDBが存在してかつヘッダの
git push heroku hoge:huga
はローカルのhoge
をリモートheroku
のhuga
にpush、みたいな意味のようだ- 確認できたので
heroku destroy --confirm <server-name>
でサーバを消しておく
病み上がりだからかテンションが低い。