Download pdf - Don't Trust Your Users

Transcript
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]


Recommended