49
Don't Trust Your Users Chris Tankersley ZendCon 2014

Don't Trust Your Users

Embed Size (px)

DESCRIPTION

Some of the most common vulnerabilities in web applications are caused by applications not properly inspecting the data that users send in. PHP has an entire suite of tools to help inspected, filter, and sanitize data that comes from the user and other outside parties. Using built-in methods and extra tools you can protect your app from harmful data and users.

Citation preview

Page 1: Don't Trust Your Users

Don't Trust Your Users

Chris Tankersley

ZendCon 2014

Page 2: Don't Trust Your Users

2

Who Am I?

● A PHP Developer for 10 Years● Lots of projects no one uses, and a few some do

● https://github.com/dragonmantank

Page 3: Don't Trust Your Users

3

Everyone Loves a Story

http://northweststate.edu/about-nscc/

Page 4: Don't Trust Your Users

4

Programming is Just Acronyms

● DRY – Don't Repeat Yourself● KISS – Keep It Simple, Stupid● IPO – Input, Process, Output

Page 5: Don't Trust Your Users

5

GIGO – Garbage In, Garbage Out

Page 6: Don't Trust Your Users

6

Users Are a Nice Big Family

Page 7: Don't Trust Your Users

7

Some People Want To Watch The World Burn

Page 8: Don't Trust Your Users

8

We Love Contact Forms

Page 9: Don't Trust Your Users

9

Client Side Validation

Page 10: Don't Trust Your Users

10

HTML5 Validation

<input type="email" required>

<input type="text" pattern="\d{5}([\-]\d{4})?)">

Page 11: Don't Trust Your Users

11

Browsers Suck

http://caniuse.com/#search=required

Page 12: Don't Trust Your Users

12

Server Side is Necessary

http://cucher.iblogger.org/images/as400_family.jpg

Page 13: Don't Trust Your Users

13

Filtering vs Validation

Page 14: Don't Trust Your Users

14

Removes Unwanted 'Stuff'

Page 15: Don't Trust Your Users

15

Filtering changes things

https://www.flickr.com/photos/httpwwwflickrcompeoplenadar/3349883/sizes/l

Page 16: Don't Trust Your Users

16

Filtering changes things

Page 17: Don't Trust Your Users

17

Validation Judges Things

Page 18: Don't Trust Your Users

18

Most Libraries Do Both

Page 19: Don't Trust Your Users

19

PHP's Filter Module

Page 20: Don't Trust Your Users

20

Some Background

● Enabled by default since 5.2.0● Provides both Validation and Filtering● Very easy to use to work with data● Exposed via the 7 basic functions

Page 21: Don't Trust Your Users

21

Validation is Easy and Fun!

<?phpvar_dump(filter_var('755', FILTER_VALIDATE_INT));var_dump(filter_var('755.0', FILTER_VALIDATE_INT));

int(755)bool(false)

Page 22: Don't Trust Your Users

22

Basic Validation Out of the Box

Page 23: Don't Trust Your Users

23

We can clean up data as well

filter_var('ID 655', FILTER_SANITIZE_NUMBER_INT);

string(3) '655'

Page 24: Don't Trust Your Users

24

What can we clean up?

Page 25: Don't Trust Your Users

25

What can we clean up?

Page 26: Don't Trust Your Users

26

Manual Filters

function myFilter($string) {return substr($string, 5);

}

$output = filter_var('This is my test string', FILTER_CALLBACK, array('options' => 'myFilter',

)));

string(12) 'is my string'

Page 27: Don't Trust Your Users

27

Does big jobs as well

Page 28: Don't Trust Your Users

28

Aura.Filter

Page 29: Don't Trust Your Users

29

Easy To Use

Page 30: Don't Trust Your Users

30

Rule Types

● Soft Rules – Doesn’t Stop Validation Chain ● Hard Rules – Stop Validation Chain For This

Element● Stop Rules – Stop All Validation

Page 31: Don't Trust Your Users

31

Validation and Filtering

● RuleCollection::IS – Must match the rule● RuleCollection::IS_NOT – Must not match● RuleCollection::IS_BLANK_OR – Must be blank

or match● RuleCollection::FIX – Sanitize The Data● RuleCollection::FIX_IS_BLANK_OR – Fix if not

blank

Page 32: Don't Trust Your Users

32

Bundled Rules

● Alnum● Alpha● Between● Blank● Bool● Credit Card● DateTime● Email

● Equal To Field● Equal To Value● Float● In Array Keys● In Array

Values● Int● ipv4● Locale

● Max● Min● Regex● Strict Equals● String(length,

min,max)● Trim● Upload● Url

Page 33: Don't Trust Your Users

33

Custom Rules

● Extend Aura\Filter\AbstractRule● Implement validate() and sanitize()● Add to the Rule Locator

Page 34: Don't Trust Your Users

34

Check it out

https://github.com/auraphp/Aura.Filter

Page 35: Don't Trust Your Users

35

Use Your Framework's

Page 36: Don't Trust Your Users

36

Zend Framework 2

Page 37: Don't Trust Your Users

37

Zend\Validator

Page 38: Don't Trust Your Users

38

Zend\Validator

Page 39: Don't Trust Your Users

39

Zend\Validator

Page 40: Don't Trust Your Users

40

Model Validation

Page 41: Don't Trust Your Users

41

Symfony2 Validation

Page 42: Don't Trust Your Users

42

Symfony2 Validator

Read the docs - http://symfony.com/doc/current/book/validation.html

Page 43: Don't Trust Your Users

43

Symfony2 Validator

Page 44: Don't Trust Your Users

44

Use with Forms

Page 45: Don't Trust Your Users

45

Always Look First

Page 46: Don't Trust Your Users

46

One Last Thing

Page 47: Don't Trust Your Users

47

Validation is Hard

Page 48: Don't Trust Your Users

48

Questions?

Page 49: Don't Trust Your Users

49

Thanks!

● https://joind.in/talk/view/12063● @dragonmantank● [email protected]