断片的。ところどころ適当。
Arduino をPHPで制御する
-
SerailPort を制御するモジュール
-
USB制御モジュール (libusbラッパー)
-
ウィーンモジュール
https://github.com/oasynnoum/php-eject
http://eject.kokuda.org/
アジェンダ
- firmata プロトコルを実装した PHPライブラリ PHPMake\Firmata を使う
Firmata<ファルマタ>
About: Firmata Protocol
- ホストから(ArduinoやRasberryPi)デバイスを制御するためのプロトコル
- シリアル通信でする
ホストからデバイスにリクエストを投げ、デバイスはそれに応じて動作して、必要に応じてレスポンスを返す
-
必ずしも「リクエスト対レスポンス」ではない
- デバイスが断片的にピンの状態を通知したり
- ホストから一方的にピンの状態を変化させたり
-
通信データはMIDIメッセージ形式
-
色々なデバイス側の実装がある
- https://github.com/firmata
- Arduino Uno が有名. Rasberry Pi とか。
-
最大 0xF個のデジタルポートをサポート
- 8このデジタルピンが1つのポート
- 最大 128個のデジタルピン
-
最大 0xF個のアナログ入力ピンをサポート
-
メリット
- 手軽プロトタイピング(スクリプティング)
- ホスト側でプログラムを書けば、言語は何でもいい
- デバイスが firmata を実装していれば、デバイス専用のプログラミング(IDEなど)をしなくていい
- ホストとデバイスが協調動作するようなアプリ開発
- 場合によってはホストから電源供給
-
デメリット
- ケーブルで繋がっている必要がある
- firmata over XBee とかアイデアはあるっぽい(実装がまだぽい
- ホストが無いと何もできない
- デバイスだけを動かせばいいようなアプリの場合、ホストの計算資源を要求するため無駄がでかい
StandardFirmata 概要
-
Firmata のデータ形式を大雑把に
-
リセット時、デバイスからメッセージが送られる
-
ファームウェア情報の取得
- 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 とか。
- Token 一択でしょ
XSS
- 利用者のブラウザ上で攻撃対象のドメインで攻撃者が自由にJavascriptが実行できる
- XSS のデモ
- alert で行けます。飽きました。
- 一同成功すると、他人でも同じ内容の投稿ができてしまう
- 対策は?
- htmlspecialchars
- 引数に注意
- 書かないと日本語がバッサリ切られてエロイことになる
- PHP のバージョンでデフォルト引数が違うので。
- 属性値はダブルクオート
- レスポンスヘッダで文字エンコーディングを指定
- Javascript の動的生成を避ける
- htmlspecialchars
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,ライブラリなども
2. サポート計画を検討
- 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文字の適当な文字列を入れたハッシュ値を入れる。
- ソルトの要件
- ある程度の長さ必要
1. 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
http://fuelphp.com/
#### 機能
- controller/action/param のURL構成
- View: PHPの標準パーサ
- 他の parser Plugin がついてる
- Scaffolding
- CLI Task running
#### Why FuelPHP?
規約より設定
- フレームワークに縛られない方向
- composer を後から入れたので、FuelPHPからcomposerの Autoload を呼ぶ
Simple
- コードが読みやすい
- PHP5.3~
- DIコンテナがなく、Autoloader を差し替える形
(力尽きた
http://fuelphp.jp/
#### Fuelphp2.0
- PHP5.4~
- Composer Base
- Coreを分割
- いつでるかわからない
(LT見たけど気力など無い