Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Modern & Secure PHP Applications
Search
Ben Edmunds
August 12, 2014
Technology
2
98
Modern & Secure PHP Applications
What's new in PHP along with a focus on building secure apps. Presented on CodeMentor 08/12/2014.
Ben Edmunds
August 12, 2014
Tweet
Share
More Decks by Ben Edmunds
See All by Ben Edmunds
Longhorn PHP 2021 - Passing the Technical Interview Workshop
benedmunds
0
83
DevOpsDays Boston 2020 - Passing the Technical Interview
benedmunds
0
45
Midwest PHP 2020 - Web Scale System Design and Architecture
benedmunds
1
90
Modern and Secure PHP (SoutheastPHP 2018)
benedmunds
0
68
Level Up Your Career - PHP South Africa Keynote
benedmunds
0
710
Modern PHP, Standards, and Community (phpDay 2017)
benedmunds
1
660
Lone Star PHP 2017 - More Than Just a Hammer
benedmunds
0
420
Lone Star PHP 2017 - Your API is Bad and You Should Feel Bad
benedmunds
0
160
Intro to Laravel 5
benedmunds
1
420
Other Decks in Technology
See All in Technology
開発パフォーマンスを最大化するための開発体制
ham0215
2
340
KubeCon EU 2024 Recap “Kubernetes Policy Time Machine: Where to Next?”
ryysud
0
210
JSON攻略法.pdf
miyakemito
8
5k
複雑な構成要素を持つUIとの向き合い方 〜新・支出グラフでの実例〜 / B43 TECH TALK
nakamuuu
0
140
ここが嬉しいABAC ここが辛いよABAC #再解説+補足編
masahirokawahara
1
270
地理空間データ可視化・解析・活用ソリューション Pacific Spatial Solutions (PSS)
pacificspatialsolutions
0
210
MLOpsの「壁」を乗り越える、LINEヤフーの Data Quality as Code
lycorptech_jp
PRO
5
500
コードを書く隙間を見つけて生きていく技術/Findy 思考の現在地
fujiwara3
27
5.9k
20240418_Google ColabにLLMが搭載されたようなのでPython x データ分析の勉強方法を考えてみる
doradora09
0
130
自己改善からチームを動かす! 「セルフエンジニアリングマネージャー」のすゝめ
shoota
6
430
GraphQL 成熟度モデルの紹介と、プロダクトに当てはめた事例 / GraphQL maturity model
mh4gf
7
1.3k
Next'24 事例セッションの紹介とクラウド資格を活用したキャリア形成について語りMuscle
yasumuusan
1
440
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
289
19k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
Designing Experiences People Love
moore
136
23k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Designing for humans not robots
tammielis
248
25k
BBQ
matthewcrist
80
8.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
13
4.6k
How STYLIGHT went responsive
nonsquared
92
4.8k
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.1k
Git: the NoSQL Database
bkeepers
PRO
422
63k
Web development in the modern age
philhawksworth
202
10k
How to train your dragon (web standard)
notwaldorf
73
5.2k
Transcript
PHP modern & secure
Who is this guy? Ben Edmunds ! @benedmunds http://benedmunds.com
Who is this guy? Ben Edmunds ! Open Source Author
PHP Town Hall Podcast CTO at Mindfulware
Welcome to the Future
Welcome to the Future Exceptions Namespaces Closures
Welcome to the Future Statics PDO Short Arrays Security
Legit Tools
Legit Tools Built-in Server Unit Testing Composer
Welcome to! the Future
Great Scott!
Exceptions
None
Exceptions try { //your code goes here } catch (Exception
$e) { die($e->getMessage()); }
Exceptions try { //your code goes here } catch (Exception
$e) { die($e->getMessage()); }
Closures
None
Closures Route::get(‘/', function(){ return View::make(‘index'); ! });
Closures Route::get(‘/', function(){ return View::make(‘index'); ! });
Namespaces
None
Namespaces namespace Illuminate\Console; class Command { //…
Namespaces use Illuminate\Console\Command; namespace Illuminate\Console; class Command { //…
Namespaces use Illuminate\Console\Command; namespace Illuminate\Console; class Command { //…
Statics
None
Statics Class Route { public static function get() { //…
}
Statics Route::get(); Class Route { public static function get() {
//… }
Statics Route::get(); Class Route { public static function get() {
//… }
Statics NO $this $var = self::varAtDefinition; ! $var = static::varAtExec;
Short Array! Syntax
None
Short Array Syntax $array = array( 0 => ‘value1’, 1
=> ‘value2’, );
Short Array Syntax $array = [ 0 => ‘value1’, 1
=> ‘value2’, ];
Short Array Syntax $array = [ 0 => ‘value1’, 1
=> ‘value2’, ];
PDO
None
PDO Cross System
PDO Cross System MS SQL MySQL Oracle PostgreSQL SQLite CUBRID
Firebird Informix ODBC & DB2 4D
PDO Cross System Safe Binding
PDO $stmt = $db->prepare(‘ SELECT * FROM users WHERE id=:id
’); ! $stmt->bindParam(‘:id’, $id); $stmt->execute();
Security
Security SQL Injection HTTPS Password Hashing
Security Authentication Safe Defaults XSS & CSRF
None
Security //escaping input $stmt->bindParam(‘:id’, $id);
Security //escaping input $stmt->bindParam(‘:id’, $id); //escaping output htmlentities($_POST[‘name’]);
Security HTTPS / SSL ! Encrypts traffic across the wire
! Trusted sender and receiver ! Required by OAUTH 2
Security //authentication - access control if (!$user->inGroup(‘admin’)) { return ‘ERROR
YO’; }
Security //authentication - brute force if ($user->loginAttempts > 5) {
return ‘CAUGHT YA’; }
Security //safe password hashing password_hash($_POST['pass']);
Security //safe password hashing password_hash($_POST['pass']); //password verification password_verify($_POST['pass'], $u->pass);
Security //safe defaults class Your Controller { protected $var1 =
‘default value’; ! function __construct() { … } }
Security //safe defaults $something = false; ! foreach ($array as
$k => $v) { $something = $v->foo; if ($something == ‘bar’) { … } }
Security //Non-Persistent XSS ! http://www.yourSite.com/ ?page_num=2&per_page=50 ! Send the link
to someone, boom
Security //Persistent XSS ! Same idea, except with data that
is saved to the server and re-displayed
Security //XSS Protection ! <h1>Title</h1> Hello <?=htmlentities($name)?> ! !
Security //Cross Site Request Forgery //(CSRF) ! http://yourSite.com/ users/12/delete !
!
Security //CSRF Protection ! POST / PUT / UPDATE /
DELETE behind forms with one-time use tokens ! !
Security //CSRF Protection ! function generateCsrf() { $token = mcrypt_create_iv(
16, MCRYPT_DEV_URANDOM); Session::flash('csrfToken', $token); return $token; }
Security //CSRF Protection ! if ( $_POST['token'] == Session::get(‘csrfToken') )
{ … } !
Legit Tools
None
Built-in ! Web Server
Built-in Server $ php -S localhost:8000 ! PHP 5.4.0 Development
Server started… Listening on localhost:8000 Document root is /home/ben/htdocs Press Ctrl-C to quit
Composer
Another Package Manager!?
Composer Sane Package Management
Composer Autoloading
Composer PEAR, ha! packagist.org
Composer / composer.json ! { "require": { "stripe/stripe-php": "dev-master", "twilio/sdk":
"dev-master" } }
Composer $ php composer.phar update $ php composer.phar install
Composer $client = new Services_Twilio($sid, $tkn); ! $client->account ->messages ->sendMessage(…)
Unit Testing
None
Unit Testing PHPUnit Behat Mink Selenium CodeCeption PHPSpec
Unit Testing class ApiAuthTest extends PHPUnit_Framework_TestCase { ! public function
testVerify() { ! $auth = new apiAuth(); $this->assertTrue($auth->verify());
Unit Testing class ApiAuthTest extends PHPUnit_Framework_TestCase { ! public function
testVerify() { ! $auth = new apiAuth(); $this->assertTrue($auth->verify());
Unit Testing $ phpunit tests ! PHPUnit 3.3.17 by Sebastian
Bergmann. Time: 0.01 seconds OK (1 tests, 1 assertions)
Resources
None
Resources PHP.net
Resources Modern Frameworks Laravel Symfony2 Fuel PHP SlimPHP 2 Aura
for PHP Silex
Resources leanpub.com/ phptherightway PHPtheRightWay.com
Resources BuildSecurePHPapps.com Coupon Code: codementor $3 off http://buildsecurephpapps.com/?coupon=codementor
Q/A TIME! Ben Edmunds @benedmunds http://benedmunds.com http://buildsecurephpapps.com/?coupon=codementor