piyolog

piyokangoの備忘録です。セキュリティの出来事を中心にまとめています。このサイトはGoogle Analyticsを利用しています。

PHPカンファレンス2011で安全なPHPアプリ開発の10の鉄則を聞いてきた。

PHPカンファレンス2011に朝から参加してきました。昨年に続き2回目の参加です。次期バージョンであるPHP5.4のお話やフレームワークまわりのお話を聞きました。知らないことが多くてドキドキしますね。
各セッションはUSTで閲覧可能(メイントラックギークトラックテックトラック)になっているようです。タイムテーブルを見て興味がある方はぜひご覧になってください。


ここでは徳丸さんのセッション「徳丸本に学ぶ安全なPHPアプリ開発の鉄則2011」についてのメモ書きを載せてみます。

USTも貼り付けておきます。

鉄則10 安全なPHP入門書で学習する

  • 逆引き、パーフェクトとかがよさそう。(だけど初心者向けともいえない。)

 ※それぞれ徳丸さんがレビューされています。問題のない安全なPHP入門書は意外とないみたいです。
  PHP逆引きレシピ:PHP逆引きレシピは概ね良いが、SQLインジェクションに関しては残念なことに
  パーフェクトPHPCSRF対策のトークンをワンタイムにしたら意図に反して脆弱になった実装例

  • せめてXSS,SQLインジェクションぐらいは対策方法をしっかり書いて。修正するのが後からでは至極大変。
  • 今回某所から示したサンプルで「ああこの参考書ダメだなぁ」と思う人はぜひ書いてほしい。

鉄則9 入力-処理-出力で適切な処理を行うこと

  • 入力はあくまでもアプリケーションの正常な動作を保障するために行うこと。

鉄則8 安全なSQLライブラリを選定して正しく使う

鉄則7 XSS対策の第一歩はhtmlspecialcharsを正しく使うことから

  • 文字エンコーディングを正しく指定してね。ただPHP5.4からデフォルトがUTF-8になるので、第2、第3引数の指定も不要になる。非常にいい改善。
  • HTTPレスポンスヘッダに文字エンコーディングも必ず指定。
  • JavaScriptリテラルを動的生成するのはお勧めできないが、やりたいなら徳丸本P113の過剰エスケープ。

鉄則6 ファイルアップロードは罠がいっぱい

  • 基本は拡張子チェックだが、画像はIEXSSが起こる可能性もあるのでその中身もチェックしよう。
  • 穴がないかPHP逆引きレシピを探してみたらしっかりチェックされているものの、PNG画像をアップロードした時にエラーが起こる可能性やファイル名に現在時刻(秒単位)を利用しているので衝突する可能性あり。

鉄則5 今時文字コードのセキュリティ気にしなくていいのは小学生までだよね

鉄則4 2010年代のWebサイトはクリックジャッキング対策をしよう

  • クリックジャッキングのデモあり。UST 21分10秒より。
  • クリックジャッキングの影響はCSRFと同等。
  • 対策として、クリックジャッキングをされて困るページは最新のブラウザ(IE8以降)とX-FRAME-OPTIONSを使おう。

 ※ X-FRAME-OPTIONSについては徳丸本P63にコラムとして掲載されているそうです。あとはここで解説されています。(X-FRAME-OPTIONS を用いたクリックジャッキング対策)

鉄則3 パスワードの保存はhash(pass.salt)の繰り返し(Stretching)

  • パスワードのハッシュ化は暗号化で用いる鍵管理の難しさもあって取られる方法。
  • 8桁ぐらいのパスワードならレインボーテーブルを用いたり、GPUを利用することで簡単に破られてしまう。
  • レインボーテーブルを用いたデモあり。31分28秒より。
  • MD5だからダメでSha256だから良いというわけでもない。
  • レインボーテーブルを用いたパスワード対策としてソルトを利用。
  • ストレッチングはブルートフォース攻撃等の計算時間を稼ぐ面で有効だが、デメリットもある。

鉄則2 PHPのバージョンアップにとことん付き合う信念

  • PHP5が出てから、PHP4のEOLは3年半。
  • Webサイト稼働中においても、タイムリーにアップデートできる覚悟は必要。

鉄則1 徳丸本を買ってよく読め