LoginSignup
3
4

More than 5 years have passed since last update.

PHPKansai 2015 メモ

Posted at

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

  1. 消えないクッキーを設定可能
  2. session_regenerate_id
    1. ただしに古いセッションを削除はNG
    2. 不正なセッション削除
      1. CGで削除するから消す
        1. なかなか消えないサイトあるじゃん
      2. 削除フラグ+Timestampで。
  3. 不正なスクリプトや時刻ファイルの実行
    1. include('/etc/passwd')
    2. whitelist型にすればいいんじゃない。PHP7に入るかも。
  4. 任意整数型がない(short/int/long/long long)
    1. DB/JSONは64bitなのに、PHPでは getId(int $id) でコケる
      1. 議論中
    2. 整数オーバーフロー検出できない
      1. PHP_INT_MAX/PHP_INT_MIN でやる必要ある
  5. Javascript関数のエスケープ内
    1. ブログ書いてる
  6. LDAPエスケープない
    1. 5.6から
  7. XPATHエスケープ
    1. 1.0でエスケープが無い
    2. ブログを呼んで
    3. 2.0 で仕様が追加された
  8. SQL識別子エスケープ
  9. JSONエスケープ
    1. 安全じゃない
      1. ブログを読んで
    2. JSON Numeric
      1. floatで文字として受け取れないので精度が。
      2. PHP7 で検討中
  10. HTML Escape
    1. htmlspecialcharas はデフォルトでは安全じゃない
      1. ' がデフォルトでエスケープしない
      2. HTML5 の /エスケープ をしない
  11. OS Command
    1. 仕組み的に安全にコマンドを実行が無理
  12. XML Escape
    1. 無い
    2. htmlspecialchars/htmlentites の流用
  13. SQL Like
    1. % -> _ でエスケープ
  14. 正規表現エスケープ
    1. mbstring用には関数がない
  15. validator
    1. filter モジュールはある
      1. 使いにくい
      2. フレームワークのvalidatorを。

いままでの問題

  1. typeconfuson
    1. bug #69152
    2. PHP Module が多いので対応しきれてないかもしれない。
  2. 開放済メモリーにアクセスする
    1. memcpy( ptr, size, NULL) してないのか…
  3. 入力バリデーションをする
  4. include にNULL
    1. include('path/to/\0.php');
      1. preg_match('/.+.php\z/') でもすり抜ける
      2. '/etc/passwd\0.php' を実行できるよね。
      3. get だと example.com/aa?path=/etc/passwd%00.php で。
    2. 他の言語
      1. 追従したりしてるっぽい
    3. bug #69418
      1. stream wrapper で対応
      2. ZPP を拡張して対応させてる
  5. 改行インジェクション
    1. HTTP Header Injection
    2. Mail Header Injection とか言われてる
      1. 改行を変な所に入れることで。
      2. HTTP はheaderで対応済み
    3. mail 関数には残っている
    4. PHPコミッター達:入力バリデーションは当たり前よね。
      1. だから割とどこにもある感じがあったりする
      2. アプリ側でやっといたら安全
    5. 要は一行に意味があるので、そこで。

防御

「コード・命令を挿入」をさせない←入力バリデーション
「意図しない動作をさせる」をさせない←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
  • 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

@4for8ppou

Woker

@ixkaitoさん

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4