PHP at Yahoo - PHPカンファレンス2007
Yahoo! JAPANについて
- 2007/7月 1日13億3800万PV
- 月間アクティブ約2000万ID
OSSx独自ソフトウェア
依存関係の管理
PHP5
- PHP4の終了アナウンス
- Yahooも今年でPHP4は終了
- 現在4.4系と5.1・5.2が混在
- 日本では現時点でメインが4.4系
- 2007年末までに5系へ移行する
セキュリティ
- セキュリティ規則、開発ルールによる予防
- 個人情報の取り扱いルール
- 実装方法の指定
- 脆弱性スキャナによるチェック
- チェックリストでのリリース前確認
- プラットフォームの整備
- フィルタ拡張などの機能提供
- フェイルセーフの支店からの標準設定
php.ini設定
- open_basedirを設定
- /etc/passwd読み取りなどの攻撃を避ける
- allow_url_fopen, allow_url_include = off
- リモートファイルインクルード、オープンプロキシ攻撃を避ける
- libcurlを代わりに使用
- safe_mode = off
- これは共有ホスティング環境でのセキュリティ対策なので、off。
- display_errors = off
- エラーをブラウザ画面に表示しない
- ただしlog_errors = on でエラーはログに残す
- error_reporting = E_ALL
- すべてエラーと警告を出力
ユーザー入力のフィルタリング
- XSS SQLインジェクション攻撃
- input_filterフックを利用
- ユーザから送られたデータは一旦全てサニタイズ
- フィルタ拡張を使う
- PHP5.2.0より標準で有効(それ以前はPECLで)
フィルタ拡張
- filter_default = special_chars
- 必要な場合に限り、適切なフィルタを使ってfilter_input, filter_input_array関数でデータを取得
- filter_input関数でのデータ取得例
- 何処でどのフィルタでデータを取得しているか、ソースの検索がしやすい
- $body = filter_input(INPUT_POST, 'body', FILTER_SANITIZE_STRING);
- フィルタ拡張は万能ではない
- たとえば、stringやspecial_charsフィルタは、属性インジェクションに無力
パフォーマンス
Opcode Cacheの利用
プロファイラ・デバッガ
- xdebugをメインで利用
- WinCacheGrindやKCacheGrindで可視化
PHPエクステンションの利用
セッションの利用を避ける
Yahoo!Incの国際化対応
r3
- 今年4月にオープンソースでβ公開
フレームワークの利用
symfonyの導入
CakePHP
- 評価中の模様
- プロダクションへの投入はされていない(予定もなし)