Contenu connexe
Similaire à FuelPHP Osu Nagoya vol.1 (20)
FuelPHP Osu Nagoya vol.1
- 2. FuelPHP とは
● 軽量&シンプルなフレームワーク
○ ファイル 756(5.1 MB)、含ドキュメント
○ cf. CakePHP2.1.3 ファイル 1,356(8.8 MB)
● 最初から PHP5.3 前提
● ルールが緩い
● オープンソース
○ https://github.com/fuel
○ 多くのユーザーがコミットしている
- 3. フォルダ構成
fuel 本体
app
core
packages
public 公開部分
- 5. 作ってみたサイト
● FuelPHP クラス名検索
○ http://fuel.php-web.net/
○ FuelPHP のクラス名から、ソースコード閲覧
○ PHP のリフレクション機能を活用
○ Model は未使用
● 使用したソースコード
○ https://github.com/twitter/bootstrap
○ https://github.com/jquery
○ https://github.com/pornel/PHPTAL
○ https://github.com/kenjis/sample-contact-form/
- 10. コントローラのメソッド名
● action_hoge メソッド
○ URL/クラス名/hoge でアクセス可能
○ URL/クラス名/ => action_index
● action_ をつけないメソッド
○ ブラウザからは(たぶん)呼び出しできない
fuel.php-web.net では、
フォームを作るメソッド _form()
$this->_form() で呼び出している
- 11. 特殊なメソッド名
● before()
○ 他のメソッドの呼び出し前に実行
● after($response)
○ 他のメソッドの呼び出し後に実行
fuel.php-web.net では未使用
- 12. URL とコントローラの対応
URL/methodlist/index
↓
methodlist.php の action_index()
URL/methodlist/list/Arr
↓
methodlist.php の action_list('Arr')
- 24. PHPTAL を使う
● FuelPHP で使う場合
○ 拡張子 .phptal (*)
○ 明示的に指定すれば .html でも可
● ファイルは app/views フォルダに置く
* FuelPHP 以外では .html のこともある
- 25. PHPTAL の特徴 1
● テンプレートファイル(HTML) の属性に記述する
<h1 tal:content="title">title here</h1>
↓
<h1>FuelPHPクラス名検索</h1>
● テンプレートをブラウザで表示して確認可能
- 27. <body onload="prettyPrint()">
<div class="container">
<div class="hero-unit">
<h1 id="applypos" tal:content="title" >title here</h1>
</div>
<div class="alert alert-error" tal:condition="exists:
error_message" tal:content="error_message" >error message sample</div>
<p tal:replace="structure html_form" >Form</p>
<div class="row" metal:define-slot="content" >
contents here
</div>
<footer>
<p class="pull-right"><a href="http://fuel.php-web.net/"
>http://fuel.php-web.net/</a> is programmed by <a href="http://php-web.
net/">PHPでWEB作成</a></p>
<p>
<a href="http://fuelphp.com">FuelPHP</a> is released
under the MIT license.<br />
</p>
</footer>
</div>
</body>
</html>
- 28. PHPTAL の特徴 2
● ビュー変数の出力をデフォルトエスケープ
○ FuelPHP もデフォルトエスケープする
● FuelPHP のエスケープを無効にする方法
'auto_filter_output' => false,
● HTML 属性をクォートしないとエラー
○ エラー例: <div class=menu>メニュー</div>
- 29. PHPTAL の特徴 3
● 継承できる (ただし、ややこしい)
● 親 template.phptal
<html metal:define-macro="template">
<div metal:define-slot="content">
● 子 index.phptal
<html metal:use-macro="template.phptal/template"
>
<div metal:fill-slot="content">
- 30. PHPTAL のデメリット
● パフォーマンス
○ smarty より遅いらしい http://d.hatena.ne.
jp/tanakahisateru/20100906/1283766620
● テンプレート HTML が厳密
○ 例えば、</p> 無しだとエラー
● 日本語の情報が少ない
- 31. CSRF とは
● Cross Site Request Forgery
● 取り消しできない重要な処理を実行させる
○ by 「安全な Web アプリケーションの作り方」 (徳丸浩)
● 被害者自身の操作で意図しないHTTPリクエスト
を送信させる攻撃
○ by 「PHP逆引き516の大全」(大家正登, 鮫島康浩, 谷
中志織, 茂木健一)
- 32. CSRF 対策
● 重要な処理の直前の画面でトークン発行
○ $form->add(Config::get('security.
csrf_token_key'),'token',array
('type'=>'hidden','value'=>Security::
fetch_token())) ;
○ $form->add_csrf(); (Form のみ?)
● 重要な処理実行時にチェック
○ クッキー(*)の値と照合する
○ Security::check_token()
* FuelPHP では(デフォルトでは)クッキーを使用
- 34. トークンを発行する箇所
入力画面 実行
トークン発行 チェック
罠ページ 正規のトークンが
無いので処理を
実行しない
- 37. XSS とは
● クロスサイトスクリプティング
● 外部からの入力などに応じて表示が変化する
箇所があり、この部分のHTML生成の実装に問
題がある
○ by 「安全な Web アプリケーションの作り方」 (徳丸浩)
● 2つ以上のサイトをまたがって、脆弱なサイトに
悪意のあるスクリプトを混入させる
○ by 「PHP逆引き516の大全」(大家正登, 鮫島康浩, 谷
中志織, 茂木健一)
- 38. XSS 対策
● 出力 HTML をエスケープする
○ FuelPHP/PHPTAL はデフォルトエスケープ
■ エスケープ漏れが生じにくい
● HTML 属性値をクォートする
○ PHPTAL は、クォート無しをハネる
■ ミスによる脆弱性が防げる
- 39. バリデーション
● 入力値の間違いを早期に発見して再入力を促
すことにより、ユーザビリティを向上する
○ by 「安全な Web アプリケーションの作り方」 (徳丸浩)
● 間違った処理を継続することによるデータの不
整合などを防ぎ、システムの信頼性を向上させ
る
○ by 「安全な Web アプリケーションの作り方」 (徳丸浩)
- 41. バリデーション
$val = $form->validation();
if ($val->run())
{
検証を通過した場合
}
else
{
検証に失敗した場合
}
- 42. reflection
● クラスや関数等の情報を表示する
○ メソッド、プロパティの情報取得
○ コメントの取得
○ クラス/関数が定義されているファイル名、行数の取得
○ protected/private メソッド実行
● PHP の機能
○ ReflectionClass が用意されている
○ FuelPHP 以外でも利用可能
- 51. ユニットテスト
● カバレッジ(*)も確認できる
○ php oil test --group=App --coverage-html ./report/
○ xdebug の設定が必要
* コードのうち、どれくらいがテストされているか
= テストされている部分/コード全体
- 53. 今後の予定
● 開催日時・頻度
○ 平日夜で良いか?
○ 定期開催するか?頻度は?
● 考えているネタ
○ 効率的なWebアプリケーションの作り方
○ Novius OS http://www.novius-os.org/