akiyan.com 管理人メモ
2007-09-01 PHPカンファレンス2007リアルタイムレポート
PHP at Yahoo - PHPカンファレンス2007
Yahoo! JAPANについて
YahooとPHPの関係
- 多くのPHP開発者が在籍
- Rasmus Lerdorf PHP作った人
- Dustin Whittle symfonyエバンジェリスト
PHPコミュへの貢献
- 機能追加や拡張モジュールのcontribute
- バグレポート、改修
- www.php.net(公式ミラー)のサーバ提供
PHP採用までの流れとオープンソース
OSS以外の利用
OSSx独自ソフトウェア
日本では
PHPを選択した流れ
拳固を選択するための条件
なぜPHPを選択したか
トレーニングコストの低さが大事
- PHPは敷居が低い
- もともと使える人が多い
- PHPを使うのはプログラマだけではない
- HTML・CSSと、ちょっとPHPを書く人とか
依存関係の管理
- PHPは必要最低限でビルド
- 拡張モジュールは共有モジュールとしてビルド
- PHP本体とは別にインストール
- 依存関係のあるパッケージはインストール時にあわせてインストール
- 共有ライブラリにすることで
- 不必要な依存を避ける
- メモリ利用料を下げる
- 構成変更で再コンパイルが不要
- x 起動時に若干オーバーヘッド
- Yahooでは多種多様のサービスがあり、最大公約数的な環境というものは作れない
- ベースを用意し、ニーズに合わせてパーツを選択、最適な環境を組み立てる
PHP5
セキュリティ
Scanmus
- Yahoo!社内で開発されたXSS調査ツール
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
- すべてエラーと警告を出力
ユーザー入力のフィルタリング
フィルタ拡張
- filter_default = special_chars
- 必要な場合に限り、適切なフィルタを使ってfilter_input, filter_input_array関数でデータを取得
- filter_input関数でのデータ取得例
- 何処でどのフィルタでデータを取得しているか、ソースの検索がしやすい
- $body = filter_input(INPUT_POST, 'body', FILTER_SANITIZE_STRING);
- フィルタ拡張は万能ではない
- たとえば、stringやspecial_charsフィルタは、属性インジェクションに無力
CSRF(XSRF)脆弱性対策
パフォーマンス
Opcode Cacheの利用
- PHPは実行時にスクリプトを中間言語に変換してから実行する
- 解析したopcodeを共有メモリにキャッシュ
- 各種キャッシュモジュール
- YahooではAPCを採用
- 安定し、よく検証されている
- RasmusがAPCの開発に携わっている点も大きい
プロファイラ・デバッガ
- xdebugをメインで利用
- WinCacheGrindやKCacheGrindで可視化
PHPエクステンションの利用
PHP埋め込み
- webアプリではないけど
- C/C++言語のアプリケーションにPHPを埋め込む
- PHPの柔軟さ、手軽さをCのアプリにも
セッションの利用を避ける
Yahoo!Incの国際化対応
国際化(i18n)対応
- テンプレート管理ツールr3を開発
- 「テンプレートエンジン」ではない
- 地域ごとのPHPテンプレートを生成
r3
- 今年4月にオープンソースでβ公開
フレームワーク・CMS
- オープンソースのフレームワークはYahoo!ではあまり使われていない
- スクリプトレベルの実装方法はエンジニアにゆだねられている
- 悪くいうとばらつきがある
- 内製のフレームワークやCMS
- プロダクトに特化させた形のものも多い
フレームワークの利用
Smarty
- SmartyはYahoo!では推奨されていない
- 実行時にかかるオーバーヘッドがある
symfony
- OSSのPHPフレームワーク
- 最近利用し始めた
- Yahoo!用にカスタマイズして導入
- 社内導入事例が増えていくのでは
- symfonyを利用しているサービス
- Y!Bookmarks
- del.icio.us
- Yahoo! Answers
symfonyの導入
CakePHP
- 評価中の模様
- プロダクションへの投入はされていない(予定もなし)
Drupal
- OSSのCMS
まとめ
- Y!がPHPを採用して5年
- いろいろカスタマイズして使っています
- PHP Extensionを多用
- セキュリティ対策
- パフォーマンスチューン
- フレームワークは今はあまり使ってない
- 一部symfonyを使ってます
トラックバック - http://d.hatena.ne.jp/akiyan/20070901/1188629562

