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
- ただしに古いセッションを削除はNG
- 不正なセッション削除
- CGで削除するから消す
- なかなか消えないサイトあるじゃん
- 削除フラグ+Timestampで。
- CGで削除するから消す
- 不正なスクリプトや時刻ファイルの実行
- include('/etc/passwd')
- whitelist型にすればいいんじゃない。PHP7に入るかも。
- 任意整数型がない(short/int/long/long long)
- DB/JSONは64bitなのに、PHPでは getId(int $id) でコケる
- 議論中
- 整数オーバーフロー検出できない
- PHP_INT_MAX/PHP_INT_MIN でやる必要ある
- DB/JSONは64bitなのに、PHPでは getId(int $id) でコケる
- Javascript関数のエスケープ内
- ブログ書いてる
- LDAPエスケープない
- 5.6から
- XPATHエスケープ
- 1.0でエスケープが無い
- ブログを呼んで
- 2.0 で仕様が追加された
- SQL識別子エスケープ
- JSONエスケープ
- 安全じゃない
- ブログを読んで
- JSON Numeric
- floatで文字として受け取れないので精度が。
- PHP7 で検討中
- 安全じゃない
- HTML Escape
- htmlspecialcharas はデフォルトでは安全じゃない
- ' がデフォルトでエスケープしない
- HTML5 の /エスケープ をしない
- htmlspecialcharas はデフォルトでは安全じゃない
- OS Command
- 仕組み的に安全にコマンドを実行が無理
- XML Escape
- 無い
- htmlspecialchars/htmlentites の流用
- SQL Like
- % -> _ でエスケープ
- 正規表現エスケープ
- mbstring用には関数がない
- validator
- filter モジュールはある
- 使いにくい
- フレームワークのvalidatorを。
- filter モジュールはある
いままでの問題
- typeconfuson
- bug #69152
- PHP Module が多いので対応しきれてないかもしれない。
- 開放済メモリーにアクセスする
- memcpy( ptr, size, NULL) してないのか…
- 入力バリデーションをする
- include にNULL
- include('path/to/\0.php');
- preg_match('/.+.php\z/') でもすり抜ける
- '/etc/passwd\0.php' を実行できるよね。
- get だと example.com/aa?path=/etc/passwd%00.php で。
- 他の言語
- 追従したりしてるっぽい
- bug #69418
- stream wrapper で対応
- ZPP を拡張して対応させてる
- include('path/to/\0.php');
- 改行インジェクション
- HTTP Header Injection
- Mail Header Injection とか言われてる
- 改行を変な所に入れることで。
- HTTP はheaderで対応済み
- mail 関数には残っている
- PHPコミッター達:入力バリデーションは当たり前よね。
- だから割とどこにもある感じがあったりする
- アプリ側でやっといたら安全
- 要は一行に意味があるので、そこで。
防御
「コード・命令を挿入」をさせない←入力バリデーション
「意図しない動作をさせる」をさせない←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さん