PHP7
速くなったよ。
疑問:PHP7で内部的に連想配列と配列が別になった。
Formで data[AAA][BBB][],data[AAA][BBB][],data[AAA][BBB][] と3つのフィールドで同じ名前にした時、PHPのPOSTのKeyは
$_POST = [
'AAA' => [
'BBB' => [
'aaa',
'bbb'
]
]
];
となるが、この場合は一番下の階層は配列になると思う。
この場合に $_POST['AAA']['BBB']['1']
とした時、どういった挙動になる?
Codeception Test
フロちゃん Baterd Florentさん
なぜコードテスト?
- 何かを仮定すればそれは絶対失敗する
- 機能後退(リグレッション)が無いこと確認
- 期待通り動いてる?
- 境界値テスト(セキュリティ、大きいデータ)
- 繰り返し作業を自動化 : Jenkins
- デバッグは簡単になる
けど
- 開発者はテストを書くのを好まない
- PHPUnit が好きな人は凄い珍しい
CodeCeption
-
Aceeptance Tests
-
Functional Tests
-
Unit Tests
-
BDDTest
-
WebServiceTest(SOAP/REST/XML-RPC)
-
Report(HTML/XML/JSON)
-
Laravel/Zend/Phalcon/Yii2/Symfony/Composer
-
CITools (Jenkins/Bamboo)
-
Selenium2, PhantomJS
雰囲気は英語。ユーザシナリオ
<?php
$I = new AcceptanceTester($scenario);
$I->wantTo('create wiki page');
$I->amOnPage('/');
$I->click('Pages');
$I->click('New');
$I->see('New Page');
$I->fillField('title', 'Hobbit');
$I->fillField('body', 'By Peter Jackson');
$I->click('Save');
$I->see('page created'); // notice generated
$I->see('Hobbit','h1'); // head of page of is our title
$I->seeInCurrentUrl('pages/hobbit');
$I->seeInDatabase('pages', array('title' => 'Hobbit'));
Acception Test
- Domさわれる
- Selenium/PhantomJSでJSさわれる
- 機能ゴテゴテなので遅い
Functional Test
- ブラウザ使ってない AcceptionTest
UnitTest
- Functional Test
- よくわからんテスト…
- 一番早い
Install
Composer: php composer.phar require "codeception/codeception"
Bonus
> codecept run --debug --env test // 別環境設定ができる
PhantomJSとか使うと、エラーが起きた時にHTMLやスクリーンショットを残してくれる。
本番サーバでは monitoring。実行しちゃだめ、絶対
PHPに足りないセキュリティ機能
大垣さん
過去の脆弱性とか。
後でSlideShareで公開
Session Module
- クッキーの仕組みがいい加減
- セッションマネージャーの実装もいい加減
session adaption
- 消えないクッキーを設定可能
- session_regenerate_id
3. ただしに古いセッションを削除はNG
4. 不正なセッション削除
5. CGで削除するから消す
6. なかなか消えないサイトあるじゃん
7. 削除フラグ+Timestampで。 - 不正なスクリプトや時刻ファイルの実行
9. include('/etc/passwd')
10. whitelist型にすればいいんじゃない。PHP7に入るかも。 - 任意整数型がない(short/int/long/long long)
12. DB/JSONは64bitなのに、PHPでは getId(int $id) でコケる
13. 議論中
14. 整数オーバーフロー検出できない
15. PHP_INT_MAX/PHP_INT_MIN でやる必要ある - Javascript関数のエスケープ内
17. ブログ書いてる - LDAPエスケープない
19. 5.6から - XPATHエスケープ
21. 1.0でエスケープが無い
22. ブログを呼んで
23. 2.0 で仕様が追加された - SQL識別子エスケープ
- JSONエスケープ
26. 安全じゃない
27. ブログを読んで
28. JSON Numeric
29. floatで文字として受け取れないので精度が。
30. PHP7 で検討中 - HTML Escape
32. htmlspecialcharas はデフォルトでは安全じゃない
33. ' がデフォルトでエスケープしない
34. HTML5 の /エスケープ をしない - OS Command
36. 仕組み的に安全にコマンドを実行が無理 - XML Escape
38. 無い
39. htmlspecialchars/htmlentites の流用 - SQL Like
41. % -> _ でエスケープ - 正規表現エスケープ
43. mbstring用には関数がない - validator
45. filter モジュールはある
46. 使いにくい
47. フレームワークのvalidatorを。
いままでの問題
- typeconfuson
2. bug #69152
3. PHP Module が多いので対応しきれてないかもしれない。 - 開放済メモリーにアクセスする
5. memcpy( ptr, size, NULL) してないのか… - 入力バリデーションをする
- include にNULL
8. include('path/to/\0.php');
9. preg_match('/.+.php\z/') でもすり抜ける
10. '/etc/passwd\0.php' を実行できるよね。
11. get だと example.com/aa?path=/etc/passwd%00.php で。
12. 他の言語
13. 追従したりしてるっぽい
14. bug #69418
15. stream wrapper で対応
16. ZPP を拡張して対応させてる - 改行インジェクション
18. HTTP Header Injection
19. Mail Header Injection とか言われてる
20. 改行を変な所に入れることで。
21. HTTP はheaderで対応済み
22. mail 関数には残っている
23. PHPコミッター達:入力バリデーションは当たり前よね。
24. だから割とどこにもある感じがあったりする
25. アプリ側でやっといたら安全
26. 要は一行に意味があるので、そこで。
防御
「コード・命令を挿入」をさせない←入力バリデーション
「意図しない動作をさせる」をさせない←escape/encode/API/出力バリデーション
webアプリはいろんな技術を複合的に使っているので、信頼境界線を超える物は入出力のバリデーションを。
契約プログラミングでやるのがいい。
これから
WIX: http://ja.wix.com/ とか
普通にプログラムレスになっていく。ので使っていくには、契約プログラミングでやれば大丈夫じゃない。
進化し続けるLaravel
@localdisk さん
6/27 はPHPカンファレンス福岡
- Laravel ver1,ver2 のソースコードは現存していない
slideshared
- Laravel3 2012/2月。ver2 から4ヶ月後…
- 最終3.2.14
- php 5.4まで
- Laravel - a beatiful PHP framework ナントカ
- ブログ記事ではやった
- UnitTest
- Blade
- CLI Interface
- Migration
- SQLServer Support
- 最終3.2.14
- Laravel4
- 2013/5リリース
- composer
- symfony
- illuminate
- ServiceProvider
- Facade
- DB Seeding
- Queue
- Email (なぜなかったのだ…)
- 裏では Swift_Mailer
- Laravel5
- 2015/2リリース
- ディレクトリ構造一新
- Psr-4
- MVC論争
- Controller Method Injection
- L4 では ConstructerInjectionしかできなかった
- Scheduler
- cron が楽に
- Socialite
- Social Login/ Github,Twitter,Facebook Loginとか
- laravel-Elixir
- Gulpのタスクランナー
- 当初は4.3予定だったけど、あまりにも変更点が多いので 5 になった。
- Laravel5.1
- Symfony2.7が週末リリース予定
- その後にリリース予定
- ドキュメントの量が前に比べて増えたので、日本語翻訳は時間かかるそうで。
- LTS
- 2年ごとにLTS Version
- Support 3 year
- security fix 4 year
- PHP5.4 Drop
- PSR-2
- Commands -> Jobs
- Lumen
- 2015/4
- マイクロ
- Symfony - Aura
PHPとフロントのいい関係を。
@ku_suke さん
動向
- 2000年〜
- HTML tag
- CSS
- Flash
- spacer.gif
- 最近
- SEO
- Multi Device
- AltJS/AltCSS
- JS Framework
- Struct CSS
- Parformance
- Auto Tasking
- Grunt ...
複雑化・多様化・分業化
Design&Coding が Designer/ Coding/ System/ Marketing と増えた。
Style Guide
スタイルガイド。Bootstrapのような。
Lonely Planet で StyleGuide を検索したら出てくる。
http://rizzo.lonelyplanet.com/styleguide/design-elements/colours
ここまでやると、新しく来た人とかに、デザインの一貫性をもたせることができる。
要はコピペ見本
Codeの一貫性
<div class='button'><div class='innter'><i class='alert'>..
か <a class='btn btn-alert'>
か…?
要は「作るのではなく、自動生成で動くようにメンテしよう」という事。
作っていこうと
- KSS Ruby or Node
- StyleDocco - Node
- Kalei - Javascript
PHP でスタイルガイドを作ろう :)
- Style Guide Boilerplate
- PHP製のスタイルガイドジェネレーター
- PHPは70行
- 移植は簡単なはず
- ベタ埋めなHTML/PHP
- 拡張子をHTMLとPHPにしてみた
- 動いた
LT
メモらない
セキュリティ検査を自動化とか
cakephper さん
vaddy.net
NetBeans のライブコーディング
バタバタ
DDDの話
DNSじゃないよ。
github.com/kumamidori/
(昔、Facebookが作ったDomain/Path で動くiOSアプリフレームワークを思い出した)
CoderDojo
角田一平さん
CoderDojoのメンター募集
Ruby のなんとか
y.andoさん……ではなくマスクドPHPさん
PHP-warrere
CakePHP
Woker
@ixkaitoさん