「これならわかる不正アクセス対策」を読む。
会社で今セキュリティ意識向上の施策だったり仕組み作りをしているんだけど、リスクアセスメント的にはアプリのレイヤーで対策する方に比重を傾けた方が良くない?という思いがあって会社の図書館で借りて読んでみた。すごく簡単でフランクな文体で読みやすい。例として挙げられるサイトや単語からするとプログレとかの音楽が好きっぽい。2006年の本ということで古くなっていないか不安だったけど、ここで出てくる知識は基本的なHTTPやjavascript、PHP、PerlのCGIとかに関するものなので特に古びてはいないと思う。まぁ。ただネットワークに関してはSaaS全盛期の今日に比べると若干古さは感じるが。NWとは内外とDMZがあって~みたいな感じで、ゼロトラストみたいな考え方もないし。
・GETとPOSTはどちらもクライアントからサーバに情報を送るリクエスト方法であるが、POSTはヘッダではなくボディに情報を格納して送信する。POSTの方が良い。
・HTTPはステートレスなプロトコルである。個々のページの遷移を紐づけるためにはHIDDENフィールドを利用したり、何らかの情報を受け渡す必要がある。
・最終的なデータの整合性はクライアントではなくサーバにて行う。javascriptなどで入力チェックしたとしても、最終的なチェックはサーバにてチェックする。
・リファラ(参照元)にはURLやCSSの読みこみなど様々な操作が記録されるので重要なデータを乗せないのが鉄則。Basic認証を使うと回避できる。
・/cgi-bin/の下に置かれたファイルは絶対にCGIとして処理される。変な処理を実行されないように注意する。データファイルはドキュメントルートより上に置くべし。
・パラメータによってサイトの動きが変わるようなサイトではパラメータにユーザから変な記述をされても良いように読みこみであることを明示すること。
・URLにユーザIDを使うのは絶対ダメ。予想して他のユーザのIDを適当に入力すれば観れてしまう。パラメータの改竄を防ぐためにもセッションを使って管理する。セッションIDも現在時刻やプロセスIDなどを組み合わせて予想しづらいようにする。
・ディレクトリトラバーサルを防ぐために、ディレクトリを跨ぐような処理をさせない。PHPではセーフモードを有効にすると危険な処理が出来なくなるので良い。
・CSRFはサイト外のボタンなどで操作出来てしまうこと。セッションIDの使用で防げる。CAPCHAの使用も良い。
・クッキーに余計な情報を持たせ過ぎない。有効期限も長すぎず、出来るだけキツキツにして使う。