LoginSignup
11
12

More than 3 years have passed since last update.

PHP関西2014 メモ

Last updated at Posted at 2014-06-28

断片的。ところどころ適当。

Arduino をPHPで制御する

@oasynnoumさん

アジェンダ

  • firmata プロトコルを実装した PHPライブラリ PHPMake\Firmata を使う

Firmata<ファルマタ>

About: Firmata Protocol

  • ホストから(ArduinoやRasberryPi)デバイスを制御するためのプロトコル
  • シリアル通信でする

ホストからデバイスにリクエストを投げ、デバイスはそれに応じて動作して、必要に応じてレスポンスを返す

  • 必ずしも「リクエスト対レスポンス」ではない
    • デバイスが断片的にピンの状態を通知したり
    • ホストから一方的にピンの状態を変化させたり
  • 通信データはMIDIメッセージ形式
  • 色々なデバイス側の実装がある
  • 最大 0xF個のデジタルポートをサポート
    • 8このデジタルピンが1つのポート
    • 最大 128個のデジタルピン
  • 最大 0xF個のアナログ入力ピンをサポート

  • メリット

    • 手軽プロトタイピング(スクリプティング)
    • ホスト側でプログラムを書けば、言語は何でもいい
    • デバイスが firmata を実装していれば、デバイス専用のプログラミング(IDEなど)をしなくていい
    • ホストとデバイスが協調動作するようなアプリ開発
    • 場合によってはホストから電源供給
  • デメリット

    • ケーブルで繋がっている必要がある
    • firmata over XBee とかアイデアはあるっぽい(実装がまだぽい
    • ホストが無いと何もできない
      • デバイスだけを動かせばいいようなアプリの場合、ホストの計算資源を要求するため無駄がでかい

StandardFirmata 概要

  • Firmata のデータ形式を大雑把に

    • シンプルな固定長コマンド
    • 可変長データを内包するコマンド(SysEx)
      • # define START_SYSEX 0XF0
      • # define END_SYSEX 0XF7
  • リセット時、デバイスからメッセージが送られる

  • ファームウェア情報の取得

    • pack("C3", START_SYSEX, REPORT_FIRMWARE, END_SYSEX)
    • これをシリアル通信に書き込む
    • ファームウェア名とバージョン番号がレスポンスで帰ってくる
  • ピンを調べる

    • pack('C3', START_SYSEX, CAPABILITY_QUERY, END_SYSEX)
    • ピンの総数とピンそれぞれの機能がこれでわかる
    • 定義されてる Capability の一覧
      • digital input
      • digital output
      • analog read
      • PWM (パルス幅変調)
      • servo (サーボモータ)
      • I2C (シリアル通信機能)

スライドは後で流します: http://www.slideshare.com/oasynnoum/phpmake-firmata-36396063

デモ(宇宙旅行っぽいゲーム)

PHP と Sencha Ext.Direct

@martini3oz さん

  • Single Page Application
  • Sencha
  • What's Ext.Direct and How do run Ext.Direct
  • まとめ

Single Page Application

  • ページ遷移をせず、 HTML5/JSを使ってクライアント側で画面を書き換え
  • JSONでやりとりする

Sencha とは?

  • HTML5まわりの取り組みをしてる企業

Sencha Ext JS 5

  • HTML5/JS フレームワーク

Ext.Direct

  • Remote Procedure Callの実装

(ここで力尽きた)

安全なPHPアプリケーションの作り方2014

徳丸センセイ

関西は初めてなので基本的な事を。

Adjenda

  • 脆弱性の話
  • プラットフォームの脆弱性
  • パスワードの保護

CSRF

  • Form を踏ませる罠。攻撃後の結果は攻撃者は見れない
  • 最悪は、 SQL Injection や XSS ほどではない

  • 横浜の。片山さんの。

    • CSRF のを。
    • demo
    • 日本で一番売れているPHP教科書のサンプル
      • 罠があるよね
      • いろいろ書き込めるよね
  • 対策は

    • Token 一択でしょ
      • Tokenはワンタイムトークンじゃなくていいでしょ
      • セッション別に覚えておけばいいでしょ
      • 予測できたら困るので、 openssl_random_psud_bytes とか
      • /dev/urandom とか。

XSS

  • 利用者のブラウザ上で攻撃対象のドメインで攻撃者が自由にJavascriptが実行できる
  • XSS のデモ
    • alert で行けます。飽きました。
    • 一同成功すると、他人でも同じ内容の投稿ができてしまう
  • 対策は?
    • htmlspecialchars
      • 引数に注意
      • 書かないと日本語がバッサリ切られてエロイことになる
      • PHP のバージョンでデフォルト引数が違うので。
    • 属性値はダブルクオート
    • レスポンスヘッダで文字エンコーディングを指定
    • Javascript の動的生成を避ける

SQLInjection

  • SQL の内容を攻撃者が書き換えられる。
  • 場合によっては中身の漏洩、改ざんできる
  • 使い勝手のいい攻撃ツールが安く手に入る
$id = '88-1';
sprintf('SELECT * FROM PORTS WHERE id=%d', mysql_real_escape_string($id));

実行すると、id=87のが引っ張ってこれる。

  • 漏洩は?
$id = '88-(SELECT ID FROM MEMBERS WHERE ID LIKE CHAR(49) ESCAPE IF(SUBSTR((SELECT EMAIL FROM MEMBERS LIMIT 1,1), 1,1)>='M', 'a', 'ab'))

こんな感じで 1bit の情報を取り出してくる

sha1なら md5-database.org で引っ張ってこれる

  • 対策
    • エスケープは難しいので、プレースホルダー一択
      • 動的の場合、エスケープの処理がはいるので、そこに脆弱性が入かもしれないので、静的をおすすめ
    • 接続時に文字エンコーディングを指定
    • bindValue(':id', (int)$int, PDO::PARAM_INT); // ちゃんと値の方も指定しないと上手く 動かなことがあるので注意

プラットフォームの脆弱性

例えば、PHPを避ける(今ではこの文は消えているが…IPA…)

  1. PHP自身にも脆弱性が多い
  2. PHPが脆弱性のあるコードを生み出す

でも過去の話。

  1. しかし、たまにすごい脆弱性…

    1. CVE-2012-1823とか…

脆弱性対策はどの言語でも。

PHP5.3はそろそろ、終わり。
2〜3年でPHPのバージョンが変わるので少し大変。

バージョンアップに付き合うには

  1. バージョンアップ方針を決める
    • とことん付き合う
    • 影響を受ける脆弱性があるときのみアップデート
    • Linux ディストリビューションに依存
  2. フレームワークやDB,ライブラリなども
  3. サポート計画を検討
    • RH/CentOS のパッケージで入れれば10年サポート
    • Redhat/CentOS5 の PHP5.1.6もメンテされてる(2017年まで)

SNS/PHPMyAdmin などの脆弱性対策

情報通信研究機構webサイトの改ざんがあった。

研究者が自身で入れていた Joomal を1.5ヶ月前に発見された脆弱性の攻撃を受けた。

定期的に確認してアップデートするのをお勧め

パスワードを保護しよう

最近多いよね。パスワードリスト攻撃。

Linkedinから650万のパスワード漏洩。一昨年ぐらい?。sha1のパスワードを、総当りで5.4Mのパスワード解読を1週間でけた。(実は 5.4Mの計算したわけではなく、同じパスワードの人が割りといたっぽい)

  1. 塩をふる(salt)
    • パスワードの前に20文字の適当な文字列を入れたハッシュ値を入れる。
    • ソルトの要件
      • ある程度の長さ必要
  2. stretching
    • ハッシュ値の計算を一万回(例え)やる。

パスワードをハッシュ値で保存する場合

  • パスワードリマインダーが実装できない。パスワードリセット。
  • php5.5 以上なら password_hash 関数を使う

詳細は徳丸本を :-)

PHP4番フレームワーク乱戦

皆が流血、血みどろになり、血で血を争うとんでもない事に…なりません。

CakePHP

@slywakerさん

  • Cake 1.3 2010 PHP4.3.2~
  • Cake 2.x.x 2011 PHP5.2.6~
  • Cake 3.x.x 2014? PHP 5.4.19~

CakePHPの誤解

  • 設定より規約: 各コード量を減らすが目的
  • 甘い: 名前が。ここを掘り下げていきたい
  • FullStackFramework
  • CakePHP is a framework of enterprise
長期間サポート
  1. サポート期間長い。

RH := RedHat

  • RH5 PHP5.1.6 2007-2017 : Cake1.3 2010〜2014/06/25
  • RH6 PHP5.3.2 2010-2020 : Cake2.5.2 2011〜2014/06/15
  • RH7 PHP5.4.x 2014-2024 : Cake3.0.0-alpha1 2014/06/26
  1. Official Support

CakeDC (Cake Development Corporation)

細かい機能はPluginに移譲していってる形

Symfony

@77web さん

Symfony = 嫁

口うるさくて面倒見の良い姉さん女房 (しゅうtm…)
永く付き合える。

PHP5.3.17以上(PHP5.3.16以下だとバグあるからやめとけ)

Symfony1の方へ

Synfomy1 != Symfony2
doctrine1 != doctorine2

……(´;ω;`)ブワッ

日本Symfonyユーザ会

Twitter: #symfony_ja

東京を中心、関西も?

バージョンアップ

現在2.5.0、LTS2.3.16(安定動作バージョン)

Laravel

@codebyjeffさん。from オーストラリア

Do you like?

// PHP:
<?= (isset($val)) ? $val : "" ?>

// Laravel on Blade:
{{$val or ''}}

Eloquent を使えば、ORM周りが短くなる

PHPMyAdmin → php artisan migrate !!

The Blue Collar Framework

Taylor(Laravelの製作者)も毎日webサイトなど作成している。彼のノウハウをLaravelに落とし込んでる。

Under ther Hood

Symfony + Composer = Laravel

What's Special?

  • Eloquent: O/RM Active Recode : Many-to-Many is easy $student->pivot->sync()

  • Authentication: Build-in: 拡張/置き換え可

  • Resource Controller

    • Make Restful dead easy
    • great backend for js framework
  • Tinker (REPL)

    • CLI Access to code, including models
    • コードの簡単なテストを試すことができる
  • Artisan

    • cli for commands to handle migrations, generate scaffolding.

My Best think Laravel.

  • Makes you think more about what you framework is?

    • Laravel is Encourages better design patterns.
    • Laravel を使っていくうちに、いいコンポーネントを使うこともできるし、他のコンポーネントを使うこともできる。
  • Even if you neber replace components, teaches you to decouple and test.

    • コンポーネントが教えてくれることもある
  • 6month minor release rollout schedule (May & Oct.) - in sync whth Symfony.

    • Symfony に追従してる形

FuelPHP

@mkkn_info さん

CodeIgniter => FuelPHP

  • PHP5.3~
    • namespace
    • closer
  • 1.7。もうじき1.8

機能

  • controller/action/param のURL構成
  • View: PHPの標準パーサ
    • 他の parser Plugin がついてる
  • Scaffolding
  • CLI Task running

Why FuelPHP?

規約より設定

  • フレームワークに縛られない方向
    • composer を後から入れたので、FuelPHPからcomposerの Autoload を呼ぶ

Simple

  • コードが読みやすい
    • PHP5.3~
    • DIコンテナがなく、Autoloader を差し替える形 (力尽きた

Fuelphp2.0

  • PHP5.4~
  • Composer Base
  • Coreを分割
  • いつでるかわからない

(LT見たけど気力など無い

11
12
1

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
11
12