PHPセキュリティ対策ポイント一覧
PHPというか、Webアプリケーション全般に言えることかな?
既存の攻撃パターンを勉強しようと思った
ので、どういうものがあるか調べてみた
ネットで調べようと思ったんですが、手持ちのパーフェクトPHPに詳しく書かれていたので、参考にします。
全部理解するぞー!
- スクリプト挿入攻撃
- ブログなどに、攻撃スクリプトを仕掛けてそれを閲覧する第三者を攻撃すること。エスケープをしっかりやればOKみたい
- XSS
- CSRF
- あのイケメンSNSで騒がれていたやつだはず。ユーザーの意図しない操作をそのユーザーの権限で実行するってやつ。「記事を削除する」という操作を、ユーザーは意図しないのに実行する。これ怖いなーと思った。http://localhost/hoge/del.phpにdel_id = all的なものをpostすると、リソースの削除が行えるプログラムがあるとする。ログイン状態で意図しないのに実行してしあったら…乙!ってことはだ…ネットバンクにログイン中に、オレ口座に100万入金、っていうデータをPOSTしてそれが受理されたらヒャッハー!ってことだ。
- もちろん対策はある。危険な操作の前には、パスワード入力処理を挟む。ネットバンクならカードの番号の2番目と9番目を入力してね、とかやってたなそう言えば。
- もうひとつの対策としては、ワンタイムトークンを使う。処理を受け付けるフォームを作成するとき、一緒にランダムなトークン(よーは文字列)を渡す。そのトークンと一緒に処理がやってきたなら、正常。渡したトークンが違う、もしくはトークンがなくて処理だけがやってきた場合は異常、とみなして処理を行わない。実装コードはパーフェクトPHPを読もう☆
- SQLインジェクション
- セッション固定攻撃
- セッションアダプションだと・・・?何だそれは
- セッションハイジャック
- セッションIDを何とか取得して、そのIDを使うことで正規のユーザーのふりをすること。
- HTTPヘッダインジェクション
- メール第三者中継
- 変数汚染攻撃
- Nullバイト攻撃
- ここは例のC言語セキュアコーディングの話と関連するぞ
- ディレクトリトラバーサル
- eval利用攻撃
- ファイルアップロード攻撃
- インクルード攻撃
- パス・ディスクロージャー攻撃
- コマンドインジェクション
思った事
途中で疲れた…。
C言語のセキュアコーディングを目指す気持ちは一緒!
レイヤーが違う感じ。
が基本だと思った。
- echo htmlspecialchars($str, ENT_NOQUOTES);
が基本なので
//関数名にセンスがないw function echo2($str) { echo htmlspecialchars($str, ENT_NOQUOTES); }
的な感じでechoをラッパーしちゃう関数を慣習的に使っとけば結構防げるんじゃね?と思った。XSSとかは。
と思ったらh()が慣習的みたい。
サニタイジングはだめっぽい。サニタイジングは、入力時に危険性を排除することを言うみたいで、それよりは出力時にecho htmlspecialchars($str, ENT_NOQUOTES);で危険性を排除したほうがいいみたい。
この辺深く追いたい(´・ω・`)
セッションアダプションってなんだ?やばい匂いがする。今日はここまでにして次調べよー
脱情弱
「うわー脆弱性だらけだぜこれー」「うひゃーひでーなーこれ。どこが作ったの?PG大丈夫か?」「ヒャッハー」とか言われないように、ちゃんと理解しようず!!
パーフェクトPHPは神書籍です。ありがとうございます。
あと
読んでないけど、この辺後で読もう。
IPA資料
http://www.ipa.go.jp/security/vuln/websecurity.html
体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
http://www.amazon.co.jp/gp/product/4797361190