セキュリティのためのEffective Logging
Websec.ioの 「Effective Security Logging with Monolog」 というエントリが参考になったので要点を紹介する。
いつ・なにをロギングするか
- ユーザーアクション & 管理(ログイン、ログアウト、プロフィールの更新、権限の変更)
- リクエストに関する情報(ホスト名、HTTPメソッド、アクセスされたURI)
- (例外が投げられたときのように)発生した可能性のあるエラー
- 他のシステム/Webサービスとの相互接続
Effective Loggingのための"The Five Ws"
- Who was involved?(誰が関係しているか)
- What happened?(何が起きたか)
- Where did it happen?(どこで発生したか)
- When did it happen?(いつ発生したか)
- Why did it happen?(なぜ発生したか)
- How did it happen?(どのように発生したか)
なお、最後の項目が"H"で始まっているのはご愛敬。
ログの例(JSON形式)
{ "datetime": ISODate() in UTC "user": { "uid": "555-ccornutt", "sid": "fsa4324fdsbvcxbvcx7893fds" }, "request": { "port": 80, "protocol": "HTTP", "method": "GET", "hostname": "www.myserver.com", "servername": "myserver.com" "uri": "http://myserver.com/user/test", "remote_addr": "192.168.1.1" }, "event": { "type": "error" "data": { "msg": "The user did something stupid", "code": 1234, "type": "user", "severity": "low" } } }