Dip Your Toes in the Sea of Security (PHP MiNDS January Meetup 2016)

James Titcumb
James TitcumbFreelance at Roave, LLC
Dip Your Toes
in the Sea of Security
James Titcumb
php[MiNDS] Meetup - January 2016
James Titcumb
www.jamestitcumb.com
www.roave.com
www.phphants.co.uk
www.phpsouthcoast.co.uk
@asgrim
Who is this guy?
Some simple code...
<?php
$a = (int)filter_var($_GET['a'], FILTER_SANITIZE_NUMBER_INT);
$b = (int)filter_var($_GET['b'], FILTER_SANITIZE_NUMBER_INT);
$result = $a + $b;
printf('The answer is %d', $result);
Dip Your Toes in the Sea of Security (PHP MiNDS January Meetup 2016)
The Golden Rules
The Golden Rules
(my made up golden rules)
1. Keep it simple
2. Know the risks
3. Fail securely
4. Don’t reinvent the wheel
5. Never trust anything
OWASP
& the OWASP Top 10
https://www.owasp.org/
Application Security
(mainly PHP applications)
Always remember…
Filter Input
Escape Output
© 2003 Disney/Pixar. All Rights Reserved.
SQL Injection (#1)
SQL Injection (#1)
http://xkcd.com/327/
SQL Injection (#1)
1. Use PDO / mysqli
2. Use prepared / parameterized statements
SQL Injection (#1)
<?php
// user_id=1; DROP TABLE users; --
$user_id = $_GET['user_id'];
$sql = "
SELECT * FROM users
WHERE user_id = {$user_id}";
$db->execute($sql);
✘
SQL Injection (#1)
<?php
$user_id = $_GET['user_id'];
$sql = "
SELECT * FROM users
WHERE user_id = :userid";
$stmt = $db->prepare($sql);
$stmt->bind('userid', $user_id);
$stmt->execute();
✓
© 2003 Disney/Pixar. All Rights Reserved.
exec($_GET)
https://github.com/search?q=exec%28%24_GET&ref=cmdform&type=Code
eval()
https://github.com/search?q=eval%28%24_GET&type=Code&ref=searchresults
Cross-Site Scripting / XSS (#3)
© 2003 Disney/Pixar. All Rights Reserved.
Cross-Site Scripting / XSS (#3)
● Escape output
<?php
$unfilteredInput = '<script type="text/javascript">...</script>';
// Unescaped - JS will run :'(
echo $unfilteredInput;
// Escaped - JS will not run :)
echo htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
Cross-Site Request
Forgery / CSRF (#8)
http://www.factzoo.com/invertebrates/cuttlefish-chameleon-of-the-sea.html
<?php
if (!$isPost) {
$csrfToken = base64_encode(random_bytes(32)));
$_SESSION['csrf_token'] = $csrfToken;
// ... output the form ...
echo '<input type="hidden" name="csrf_token" value="'.$csrfToken.'" />';
} else if ($isPost) {
if (hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
die("Token invalid...");
}
// ... handle the form ...
}
Cross-Site Request Forgery / CSRF (#8)
<?php
if (!$isPost) {
$csrfToken = base64_encode(random_bytes(32)));
$_SESSION['csrf_token'] = $csrfToken;
// ... output the form ...
echo '<input type="hidden" name="csrf_token" value="'.$csrfToken.'" />';
} else if ($isPost) {
if (hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
die("Token invalid...");
}
// ... handle the form ...
}
Cross-Site Request Forgery / CSRF (#8)
Errors, Exceptions &
Logging (#6)
© 2003 Disney/Pixar. All Rights Reserved.
Errors, Exceptions & Logging (#6)
© 2003 Disney/Pixar. All Rights Reserved.
curl + https
<?php
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
✘
curl + https
<?php
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_CAINFO, "/path/to/certificate");
✓
© 2003 Disney/Pixar. All Rights Reserved.
WordPress Plugins
Audit third party plugins carefully.
WordPress Plugins
Audit third party plugins carefully.
ANY THIRD PARTY CODE
WordPress Plugins
Audit third party plugins carefully.
ANY THIRD PARTY CODE
github.com/ /SecurityAdvisories
Dip Your Toes in the Sea of Security (PHP MiNDS January Meetup 2016)
We are not all
security experts!
We are not all
security experts!
… but we CAN write secure code
Be the threat
Think Differently
What do you want?
Think Differently
How do you get it?
Think Differently
Threat Modelling
D.R.E.A.D.
© Buena Vista Pictures
Threat Modelling
Damage
R
E
A
D
© Buena Vista Pictures
Threat Modelling
Damage
Reproducibility
E
A
D
© Buena Vista Pictures
Threat Modelling
Damage
Reproducibility
Exploitability
A
D
© Buena Vista Pictures
Threat Modelling
Damage
Reproducibility
Exploitability
Affected users
D
© Buena Vista Pictures
Threat Modelling
Damage
Reproducibility
Exploitability
Affected users
Discoverability
© Buena Vista Pictures
Authentication
& Authorization
Authentication
Verifying Identity
Case Study: Custom Authentication
We thought about doing this…
Case Study: Custom Authentication
We thought about doing this…
Case Study: Custom Authentication
We thought about doing this…
✘
Password Hashing
password_hash()
Authorization
Verifying Access
CRYPTOGRAPHY
IS
HARD
Dip Your Toes in the Sea of Security (PHP MiNDS January Meetup 2016)
CRYPTOGRAPHY
IS
HARD
NEVER EVER “ROLL YOUR OWN”
CRYPTOGRAPHY
IS
HARD
NEVER EVER “ROLL YOUR OWN”
EVER!!!
How to encrypt then?
I’ve got some
great ideas for
encryption...
Image: The Guardian (http://goo.gl/pUkyvO)
How to encrypt then?
libsodium PECL package
Linux Server Security
Create an SSH Fortress
Firewalls
iptables
#!/bin/bash
IPT="/sbin/iptables"
$IPT --flush
$IPT --delete-chain
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
# Loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# Inbound traffic
$IPT -A INPUT -p tcp --dport ssh -j ACCEPT
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p tcp --dport 443 -j ACCEPT
# Outbound traffic
$IPT -A OUTPUT -p tcp --dport 80 -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 443 -j ACCEPT
$IPT -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
ufw
sudo ufw enable
sudo ufw allow 22
sudo ufw allow 80
Mitigate Brute Force
Attacks
Install Only
What You Need
© 2003 Disney/Pixar. All Rights Reserved.
+
Case Study: Be Minimal
Internets
Postfix
Squid Proxy
(badly configured)
hacker
spam
Resources
● http://securingphp.com/
● https://www.owasp.org/
● http://blog.ircmaxell.com/
● https://github.com/paragonie/random_compat
● https://github.com/ircmaxell/password_compat
The Golden Rules
1. Keep it simple
2. Know the risks
3. Fail securely
4. Don’t reinvent the wheel
5. Never trust anything / anyone
If you follow all this, you get...
If you follow all this, you get...
Any questions? :)
https://joind.in/talk/0ad74
James Titcumb @asgrim
1 of 77

Recommended

Dip Your Toes in the Sea of Security (PHP Berkshire Nov 2015) by
Dip Your Toes in the Sea of Security (PHP Berkshire Nov 2015)Dip Your Toes in the Sea of Security (PHP Berkshire Nov 2015)
Dip Your Toes in the Sea of Security (PHP Berkshire Nov 2015)James Titcumb
430 views76 slides
Dip Your Toes in the Sea of Security (PHP UK 2016) by
Dip Your Toes in the Sea of Security (PHP UK 2016)Dip Your Toes in the Sea of Security (PHP UK 2016)
Dip Your Toes in the Sea of Security (PHP UK 2016)James Titcumb
1.1K views84 slides
Dip Your Toes in the Sea of Security (PHP South Africa 2017) by
Dip Your Toes in the Sea of Security (PHP South Africa 2017)Dip Your Toes in the Sea of Security (PHP South Africa 2017)
Dip Your Toes in the Sea of Security (PHP South Africa 2017)James Titcumb
306 views88 slides
Climbing the Abstract Syntax Tree (PHP South Africa 2017) by
Climbing the Abstract Syntax Tree (PHP South Africa 2017)Climbing the Abstract Syntax Tree (PHP South Africa 2017)
Climbing the Abstract Syntax Tree (PHP South Africa 2017)James Titcumb
266 views123 slides
Dip Your Toes In The Sea Of Security (PHPNW16) by
Dip Your Toes In The Sea Of Security (PHPNW16)Dip Your Toes In The Sea Of Security (PHPNW16)
Dip Your Toes In The Sea Of Security (PHPNW16)James Titcumb
467 views83 slides
Dip Your Toes in the Sea of Security by
Dip Your Toes in the Sea of SecurityDip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityJames Titcumb
463 views88 slides

More Related Content

What's hot

Code obfuscation, php shells & more by
Code obfuscation, php shells & moreCode obfuscation, php shells & more
Code obfuscation, php shells & moreMattias Geniar
11.2K views53 slides
Top 10 php classic traps confoo by
Top 10 php classic traps confooTop 10 php classic traps confoo
Top 10 php classic traps confooDamien Seguy
132 views84 slides
Dip Your Toes in the Sea of Security (phpDay 2016) by
Dip Your Toes in the Sea of Security (phpDay 2016)Dip Your Toes in the Sea of Security (phpDay 2016)
Dip Your Toes in the Sea of Security (phpDay 2016)James Titcumb
456 views83 slides
PHP in 2018 - Q4 - AFUP Limoges by
PHP in 2018 - Q4 - AFUP LimogesPHP in 2018 - Q4 - AFUP Limoges
PHP in 2018 - Q4 - AFUP Limoges✅ William Pinaud
658 views47 slides
Top 10 php classic traps DPC 2020 by
Top 10 php classic traps DPC 2020Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Damien Seguy
122 views82 slides
C99[2] by
C99[2]C99[2]
C99[2]guest8914af
1.7K views64 slides

What's hot(20)

Code obfuscation, php shells & more by Mattias Geniar
Code obfuscation, php shells & moreCode obfuscation, php shells & more
Code obfuscation, php shells & more
Mattias Geniar11.2K views
Top 10 php classic traps confoo by Damien Seguy
Top 10 php classic traps confooTop 10 php classic traps confoo
Top 10 php classic traps confoo
Damien Seguy132 views
Dip Your Toes in the Sea of Security (phpDay 2016) by James Titcumb
Dip Your Toes in the Sea of Security (phpDay 2016)Dip Your Toes in the Sea of Security (phpDay 2016)
Dip Your Toes in the Sea of Security (phpDay 2016)
James Titcumb456 views
Top 10 php classic traps DPC 2020 by Damien Seguy
Top 10 php classic traps DPC 2020Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020
Damien Seguy122 views
Teaching Your Machine To Find Fraudsters by Ian Barber
Teaching Your Machine To Find FraudstersTeaching Your Machine To Find Fraudsters
Teaching Your Machine To Find Fraudsters
Ian Barber1.5K views
Debugging: Rules And Tools - PHPTek 11 Version by Ian Barber
Debugging: Rules And Tools - PHPTek 11 VersionDebugging: Rules And Tools - PHPTek 11 Version
Debugging: Rules And Tools - PHPTek 11 Version
Ian Barber1.5K views
Essentials and Impactful Features of ES6 by Riza Fahmi
Essentials and Impactful Features of ES6Essentials and Impactful Features of ES6
Essentials and Impactful Features of ES6
Riza Fahmi813 views
Descobrindo a linguagem Perl by garux
Descobrindo a linguagem PerlDescobrindo a linguagem Perl
Descobrindo a linguagem Perl
garux868 views
How to stand on the shoulders of giants by Ian Barber
How to stand on the shoulders of giantsHow to stand on the shoulders of giants
How to stand on the shoulders of giants
Ian Barber3.6K views
Top 10 php classic traps php serbia by Damien Seguy
Top 10 php classic traps php serbiaTop 10 php classic traps php serbia
Top 10 php classic traps php serbia
Damien Seguy296 views
Coding Horrors by Mark Baker
Coding HorrorsCoding Horrors
Coding Horrors
Mark Baker594 views
Communities - Perl edition (RioJS) by garux
Communities - Perl edition (RioJS)Communities - Perl edition (RioJS)
Communities - Perl edition (RioJS)
garux774 views
Introdução ao Perl 6 by garux
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6
garux1.8K views
async/await Revisited by Riza Fahmi
async/await Revisitedasync/await Revisited
async/await Revisited
Riza Fahmi400 views
Ping pong game by Amit Kumar
Ping pong  gamePing pong  game
Ping pong game
Amit Kumar700 views

Viewers also liked

The journey to become a solid developer by
The journey to become a solid developer The journey to become a solid developer
The journey to become a solid developer Alessandro Cinelli (cirpo)
502 views158 slides
Como programar melhor jogando game boy by
Como programar melhor jogando game boyComo programar melhor jogando game boy
Como programar melhor jogando game boyGabriel Rodrigues Couto
579 views120 slides
modernizando a arquitertura de sua aplicação by
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicaçãoAntonio Spinelli
1.1K views118 slides
Last Month in PHP - February 2017 by
Last Month in PHP - February 2017Last Month in PHP - February 2017
Last Month in PHP - February 2017Eric Poe
376 views17 slides
Refactoring Legacy Code by
Refactoring Legacy CodeRefactoring Legacy Code
Refactoring Legacy CodeAdam Culp
4.3K views54 slides
Practical PHP Deployment with Jenkins by
Practical PHP Deployment with JenkinsPractical PHP Deployment with Jenkins
Practical PHP Deployment with JenkinsAdam Culp
11.3K views22 slides

Viewers also liked(10)

modernizando a arquitertura de sua aplicação by Antonio Spinelli
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicação
Antonio Spinelli1.1K views
Last Month in PHP - February 2017 by Eric Poe
Last Month in PHP - February 2017Last Month in PHP - February 2017
Last Month in PHP - February 2017
Eric Poe376 views
Refactoring Legacy Code by Adam Culp
Refactoring Legacy CodeRefactoring Legacy Code
Refactoring Legacy Code
Adam Culp4.3K views
Practical PHP Deployment with Jenkins by Adam Culp
Practical PHP Deployment with JenkinsPractical PHP Deployment with Jenkins
Practical PHP Deployment with Jenkins
Adam Culp11.3K views
Learn To Test Like A Grumpy Programmer - 3 hour workshop by chartjes
Learn To Test Like A Grumpy Programmer - 3 hour workshopLearn To Test Like A Grumpy Programmer - 3 hour workshop
Learn To Test Like A Grumpy Programmer - 3 hour workshop
chartjes746 views
A recommendation engine for your php application by Michele Orselli
A recommendation engine for your php applicationA recommendation engine for your php application
A recommendation engine for your php application
Michele Orselli9.6K views
Functional Structures in PHP by Marcello Duarte
Functional Structures in PHPFunctional Structures in PHP
Functional Structures in PHP
Marcello Duarte18.8K views
WordPress for the modern PHP developer by Chris Sherry
WordPress for the modern PHP developerWordPress for the modern PHP developer
WordPress for the modern PHP developer
Chris Sherry2.5K views

Similar to Dip Your Toes in the Sea of Security (PHP MiNDS January Meetup 2016)

Dip Your Toes in the Sea of Security (CoderCruise 2017) by
Dip Your Toes in the Sea of Security (CoderCruise 2017)Dip Your Toes in the Sea of Security (CoderCruise 2017)
Dip Your Toes in the Sea of Security (CoderCruise 2017)James Titcumb
335 views88 slides
Dip Your Toes in the Sea of Security (ConFoo YVR 2017) by
Dip Your Toes in the Sea of Security (ConFoo YVR 2017)Dip Your Toes in the Sea of Security (ConFoo YVR 2017)
Dip Your Toes in the Sea of Security (ConFoo YVR 2017)James Titcumb
244 views87 slides
Dip Your Toes in the Sea of Security (PHP Cambridge) by
Dip Your Toes in the Sea of Security (PHP Cambridge)Dip Your Toes in the Sea of Security (PHP Cambridge)
Dip Your Toes in the Sea of Security (PHP Cambridge)James Titcumb
719 views57 slides
Php Security by
Php SecurityPhp Security
Php Securityguest7cf35c
2.8K views46 slides
Code obfuscation, php shells & more by
Code obfuscation, php shells & moreCode obfuscation, php shells & more
Code obfuscation, php shells & moreDavid Geens
2.7K views53 slides
Building Modern and Secure PHP Applications – Codementor Office Hours with Be... by
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...Arc & Codementor
11.2K views85 slides

Similar to Dip Your Toes in the Sea of Security (PHP MiNDS January Meetup 2016)(20)

Dip Your Toes in the Sea of Security (CoderCruise 2017) by James Titcumb
Dip Your Toes in the Sea of Security (CoderCruise 2017)Dip Your Toes in the Sea of Security (CoderCruise 2017)
Dip Your Toes in the Sea of Security (CoderCruise 2017)
James Titcumb335 views
Dip Your Toes in the Sea of Security (ConFoo YVR 2017) by James Titcumb
Dip Your Toes in the Sea of Security (ConFoo YVR 2017)Dip Your Toes in the Sea of Security (ConFoo YVR 2017)
Dip Your Toes in the Sea of Security (ConFoo YVR 2017)
James Titcumb244 views
Dip Your Toes in the Sea of Security (PHP Cambridge) by James Titcumb
Dip Your Toes in the Sea of Security (PHP Cambridge)Dip Your Toes in the Sea of Security (PHP Cambridge)
Dip Your Toes in the Sea of Security (PHP Cambridge)
James Titcumb719 views
Code obfuscation, php shells & more by David Geens
Code obfuscation, php shells & moreCode obfuscation, php shells & more
Code obfuscation, php shells & more
David Geens2.7K views
Building Modern and Secure PHP Applications – Codementor Office Hours with Be... by Arc & Codementor
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
Arc & Codementor11.2K views
[PL] Jak nie zostać "programistą" PHP? by Radek Benkel
[PL] Jak nie zostać "programistą" PHP?[PL] Jak nie zostać "programistą" PHP?
[PL] Jak nie zostać "programistą" PHP?
Radek Benkel3K views
Scroll pHAT HD に美咲フォント by Yuriko IKEDA
Scroll pHAT HD に美咲フォントScroll pHAT HD に美咲フォント
Scroll pHAT HD に美咲フォント
Yuriko IKEDA1.9K views
HTTP For the Good or the Bad - FSEC Edition by Xavier Mertens
HTTP For the Good or the Bad - FSEC EditionHTTP For the Good or the Bad - FSEC Edition
HTTP For the Good or the Bad - FSEC Edition
Xavier Mertens4K views
Stupid Awesome Python Tricks by Bryan Helmig
Stupid Awesome Python TricksStupid Awesome Python Tricks
Stupid Awesome Python Tricks
Bryan Helmig1K views
Great Developers Steal by Ben Scofield
Great Developers StealGreat Developers Steal
Great Developers Steal
Ben Scofield1.7K views
East Bay Ruby Tropo presentation by Adam Kalsey
East Bay Ruby Tropo presentationEast Bay Ruby Tropo presentation
East Bay Ruby Tropo presentation
Adam Kalsey1.1K views
Hidden treasures of Ruby by Tom Crinson
Hidden treasures of RubyHidden treasures of Ruby
Hidden treasures of Ruby
Tom Crinson578 views
Security Meetup 22 октября. «PHP Unserialize Exploiting». Павел Топорков. Лаб... by Mail.ru Group
Security Meetup 22 октября. «PHP Unserialize Exploiting». Павел Топорков. Лаб...Security Meetup 22 октября. «PHP Unserialize Exploiting». Павел Топорков. Лаб...
Security Meetup 22 октября. «PHP Unserialize Exploiting». Павел Топорков. Лаб...
Mail.ru Group11.3K views
Security Meetup 22 октября. «Реверс-инжиниринг в Enterprise». Алексей Секрето... by Mail.ru Group
Security Meetup 22 октября. «Реверс-инжиниринг в Enterprise». Алексей Секрето...Security Meetup 22 октября. «Реверс-инжиниринг в Enterprise». Алексей Секрето...
Security Meetup 22 октября. «Реверс-инжиниринг в Enterprise». Алексей Секрето...
Mail.ru Group337 views
Let's write secure Drupal code! - DrupalCamp London 2019 by Balázs Tatár
Let's write secure Drupal code! - DrupalCamp London 2019Let's write secure Drupal code! - DrupalCamp London 2019
Let's write secure Drupal code! - DrupalCamp London 2019
Balázs Tatár287 views
A CTF Hackers Toolbox by Stefan
A CTF Hackers ToolboxA CTF Hackers Toolbox
A CTF Hackers Toolbox
Stefan 5.8K views

More from James Titcumb

Living the Best Life on a Legacy Project (phpday 2022).pdf by
Living the Best Life on a Legacy Project (phpday 2022).pdfLiving the Best Life on a Legacy Project (phpday 2022).pdf
Living the Best Life on a Legacy Project (phpday 2022).pdfJames Titcumb
58 views66 slides
Tips for Tackling a Legacy Codebase (ScotlandPHP 2021) by
Tips for Tackling a Legacy Codebase (ScotlandPHP 2021)Tips for Tackling a Legacy Codebase (ScotlandPHP 2021)
Tips for Tackling a Legacy Codebase (ScotlandPHP 2021)James Titcumb
170 views66 slides
Climbing the Abstract Syntax Tree (Midwest PHP 2020) by
Climbing the Abstract Syntax Tree (Midwest PHP 2020)Climbing the Abstract Syntax Tree (Midwest PHP 2020)
Climbing the Abstract Syntax Tree (Midwest PHP 2020)James Titcumb
199 views125 slides
Best practices for crafting high quality PHP apps (Bulgaria 2019) by
Best practices for crafting high quality PHP apps (Bulgaria 2019)Best practices for crafting high quality PHP apps (Bulgaria 2019)
Best practices for crafting high quality PHP apps (Bulgaria 2019)James Titcumb
254 views122 slides
Climbing the Abstract Syntax Tree (php[world] 2019) by
Climbing the Abstract Syntax Tree (php[world] 2019)Climbing the Abstract Syntax Tree (php[world] 2019)
Climbing the Abstract Syntax Tree (php[world] 2019)James Titcumb
160 views126 slides
Best practices for crafting high quality PHP apps (php[world] 2019) by
Best practices for crafting high quality PHP apps (php[world] 2019)Best practices for crafting high quality PHP apps (php[world] 2019)
Best practices for crafting high quality PHP apps (php[world] 2019)James Titcumb
260 views125 slides

More from James Titcumb(20)

Living the Best Life on a Legacy Project (phpday 2022).pdf by James Titcumb
Living the Best Life on a Legacy Project (phpday 2022).pdfLiving the Best Life on a Legacy Project (phpday 2022).pdf
Living the Best Life on a Legacy Project (phpday 2022).pdf
James Titcumb58 views
Tips for Tackling a Legacy Codebase (ScotlandPHP 2021) by James Titcumb
Tips for Tackling a Legacy Codebase (ScotlandPHP 2021)Tips for Tackling a Legacy Codebase (ScotlandPHP 2021)
Tips for Tackling a Legacy Codebase (ScotlandPHP 2021)
James Titcumb170 views
Climbing the Abstract Syntax Tree (Midwest PHP 2020) by James Titcumb
Climbing the Abstract Syntax Tree (Midwest PHP 2020)Climbing the Abstract Syntax Tree (Midwest PHP 2020)
Climbing the Abstract Syntax Tree (Midwest PHP 2020)
James Titcumb199 views
Best practices for crafting high quality PHP apps (Bulgaria 2019) by James Titcumb
Best practices for crafting high quality PHP apps (Bulgaria 2019)Best practices for crafting high quality PHP apps (Bulgaria 2019)
Best practices for crafting high quality PHP apps (Bulgaria 2019)
James Titcumb254 views
Climbing the Abstract Syntax Tree (php[world] 2019) by James Titcumb
Climbing the Abstract Syntax Tree (php[world] 2019)Climbing the Abstract Syntax Tree (php[world] 2019)
Climbing the Abstract Syntax Tree (php[world] 2019)
James Titcumb160 views
Best practices for crafting high quality PHP apps (php[world] 2019) by James Titcumb
Best practices for crafting high quality PHP apps (php[world] 2019)Best practices for crafting high quality PHP apps (php[world] 2019)
Best practices for crafting high quality PHP apps (php[world] 2019)
James Titcumb260 views
Crafting Quality PHP Applications (PHP Joburg Oct 2019) by James Titcumb
Crafting Quality PHP Applications (PHP Joburg Oct 2019)Crafting Quality PHP Applications (PHP Joburg Oct 2019)
Crafting Quality PHP Applications (PHP Joburg Oct 2019)
James Titcumb263 views
Climbing the Abstract Syntax Tree (PHP Russia 2019) by James Titcumb
Climbing the Abstract Syntax Tree (PHP Russia 2019)Climbing the Abstract Syntax Tree (PHP Russia 2019)
Climbing the Abstract Syntax Tree (PHP Russia 2019)
James Titcumb195 views
Best practices for crafting high quality PHP apps - PHP UK 2019 by James Titcumb
Best practices for crafting high quality PHP apps - PHP UK 2019Best practices for crafting high quality PHP apps - PHP UK 2019
Best practices for crafting high quality PHP apps - PHP UK 2019
James Titcumb324 views
Climbing the Abstract Syntax Tree (ScotlandPHP 2018) by James Titcumb
Climbing the Abstract Syntax Tree (ScotlandPHP 2018)Climbing the Abstract Syntax Tree (ScotlandPHP 2018)
Climbing the Abstract Syntax Tree (ScotlandPHP 2018)
James Titcumb181 views
Best practices for crafting high quality PHP apps (ScotlandPHP 2018) by James Titcumb
Best practices for crafting high quality PHP apps (ScotlandPHP 2018)Best practices for crafting high quality PHP apps (ScotlandPHP 2018)
Best practices for crafting high quality PHP apps (ScotlandPHP 2018)
James Titcumb322 views
Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018) by James Titcumb
Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018)Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018)
Kicking off with Zend Expressive and Doctrine ORM (PHP South Africa 2018)
James Titcumb637 views
Best practices for crafting high quality PHP apps (PHP South Africa 2018) by James Titcumb
Best practices for crafting high quality PHP apps (PHP South Africa 2018)Best practices for crafting high quality PHP apps (PHP South Africa 2018)
Best practices for crafting high quality PHP apps (PHP South Africa 2018)
James Titcumb122 views
Climbing the Abstract Syntax Tree (PHP Developer Days Dresden 2018) by James Titcumb
Climbing the Abstract Syntax Tree (PHP Developer Days Dresden 2018)Climbing the Abstract Syntax Tree (PHP Developer Days Dresden 2018)
Climbing the Abstract Syntax Tree (PHP Developer Days Dresden 2018)
James Titcumb133 views
Climbing the Abstract Syntax Tree (Southeast PHP 2018) by James Titcumb
Climbing the Abstract Syntax Tree (Southeast PHP 2018)Climbing the Abstract Syntax Tree (Southeast PHP 2018)
Climbing the Abstract Syntax Tree (Southeast PHP 2018)
James Titcumb233 views
Crafting Quality PHP Applications (PHPkonf 2018) by James Titcumb
Crafting Quality PHP Applications (PHPkonf 2018)Crafting Quality PHP Applications (PHPkonf 2018)
Crafting Quality PHP Applications (PHPkonf 2018)
James Titcumb209 views
Best practices for crafting high quality PHP apps (PHP Yorkshire 2018) by James Titcumb
Best practices for crafting high quality PHP apps (PHP Yorkshire 2018)Best practices for crafting high quality PHP apps (PHP Yorkshire 2018)
Best practices for crafting high quality PHP apps (PHP Yorkshire 2018)
James Titcumb264 views
Crafting Quality PHP Applications: an overview (PHPSW March 2018) by James Titcumb
Crafting Quality PHP Applications: an overview (PHPSW March 2018)Crafting Quality PHP Applications: an overview (PHPSW March 2018)
Crafting Quality PHP Applications: an overview (PHPSW March 2018)
James Titcumb210 views
Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018) by James Titcumb
Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018)Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018)
Kicking off with Zend Expressive and Doctrine ORM (PHP MiNDS March 2018)
James Titcumb197 views
Climbing the Abstract Syntax Tree (PHP UK 2018) by James Titcumb
Climbing the Abstract Syntax Tree (PHP UK 2018)Climbing the Abstract Syntax Tree (PHP UK 2018)
Climbing the Abstract Syntax Tree (PHP UK 2018)
James Titcumb520 views

Recently uploaded

SAP Automation Using Bar Code and FIORI.pdf by
SAP Automation Using Bar Code and FIORI.pdfSAP Automation Using Bar Code and FIORI.pdf
SAP Automation Using Bar Code and FIORI.pdfVirendra Rai, PMP
23 views38 slides
Info Session November 2023.pdf by
Info Session November 2023.pdfInfo Session November 2023.pdf
Info Session November 2023.pdfAleksandraKoprivica4
12 views15 slides
The Research Portal of Catalonia: Growing more (information) & more (services) by
The Research Portal of Catalonia: Growing more (information) & more (services)The Research Portal of Catalonia: Growing more (information) & more (services)
The Research Portal of Catalonia: Growing more (information) & more (services)CSUC - Consorci de Serveis Universitaris de Catalunya
80 views25 slides
Vertical User Stories by
Vertical User StoriesVertical User Stories
Vertical User StoriesMoisés Armani Ramírez
14 views16 slides
Melek BEN MAHMOUD.pdf by
Melek BEN MAHMOUD.pdfMelek BEN MAHMOUD.pdf
Melek BEN MAHMOUD.pdfMelekBenMahmoud
14 views1 slide
Ransomware is Knocking your Door_Final.pdf by
Ransomware is Knocking your Door_Final.pdfRansomware is Knocking your Door_Final.pdf
Ransomware is Knocking your Door_Final.pdfSecurity Bootcamp
55 views46 slides

Recently uploaded(20)

SAP Automation Using Bar Code and FIORI.pdf by Virendra Rai, PMP
SAP Automation Using Bar Code and FIORI.pdfSAP Automation Using Bar Code and FIORI.pdf
SAP Automation Using Bar Code and FIORI.pdf
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn22 views
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院 by IttrainingIttraining
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker37 views
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Piloting & Scaling Successfully With Microsoft Viva by Richard Harbridge
Piloting & Scaling Successfully With Microsoft VivaPiloting & Scaling Successfully With Microsoft Viva
Piloting & Scaling Successfully With Microsoft Viva
AMAZON PRODUCT RESEARCH.pdf by JerikkLaureta
AMAZON PRODUCT RESEARCH.pdfAMAZON PRODUCT RESEARCH.pdf
AMAZON PRODUCT RESEARCH.pdf
JerikkLaureta26 views
Data Integrity for Banking and Financial Services by Precisely
Data Integrity for Banking and Financial ServicesData Integrity for Banking and Financial Services
Data Integrity for Banking and Financial Services
Precisely21 views
Igniting Next Level Productivity with AI-Infused Data Integration Workflows by Safe Software
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Safe Software263 views
STPI OctaNE CoE Brochure.pdf by madhurjyapb
STPI OctaNE CoE Brochure.pdfSTPI OctaNE CoE Brochure.pdf
STPI OctaNE CoE Brochure.pdf
madhurjyapb14 views
Empathic Computing: Delivering the Potential of the Metaverse by Mark Billinghurst
Empathic Computing: Delivering  the Potential of the MetaverseEmpathic Computing: Delivering  the Potential of the Metaverse
Empathic Computing: Delivering the Potential of the Metaverse
Mark Billinghurst478 views

Dip Your Toes in the Sea of Security (PHP MiNDS January Meetup 2016)