200 Days of Code, Beginner Track, Month 5

48
Chapters 12, 13, 14 Ryne McCall

Transcript of 200 Days of Code, Beginner Track, Month 5

Page 1: 200 Days of Code, Beginner Track, Month 5

Chapters 12, 13, 14

Ryne McCall

Page 2: 200 Days of Code, Beginner Track, Month 5

(a little) Security

Regular expressions

Unicode (maybe)

Page 3: 200 Days of Code, Beginner Track, Month 5

Security

Page 4: 200 Days of Code, Beginner Track, Month 5

Security

spectrummore

secure

more

usable

Page 5: 200 Days of Code, Beginner Track, Month 5

Security ==

Laziness

Page 6: 200 Days of Code, Beginner Track, Month 5

OWASP top ten•A1-Injection

•A2-Broken Authentication and Session Management

•A3-Cross-Site Scripting (XSS)

•A4-Insecure Direct Object References

•A5-Security Misconfiguration

•A6-Sensitive Data Exposure

•A7-Missing Function Level Access Control

•A8-Cross-Site Request Forgery (CSRF)

•A9-Using Components with Known Vulnerabilities

•A10-Unvalidated Redirects and Forwards

Page 8: 200 Days of Code, Beginner Track, Month 5

Regular expressions

Page 9: 200 Days of Code, Beginner Track, Month 5

Agenda

•What are they?

•Best practices

•Problems

Page 10: 200 Days of Code, Beginner Track, Month 5

History

Page 11: 200 Days of Code, Beginner Track, Month 5

–Larry Wall

“...we saw how everyone borrowed Perl

5 compatible regular expressions, and

we figured - well, you know, they're a

real big mess, and we're sorry, but

we're changing them now, now that

you've just borrowed them.”

Page 12: 200 Days of Code, Beginner Track, Month 5

What are they?

Page 13: 200 Days of Code, Beginner Track, Month 5

PCRE functions•preg_filter — Perform a regular expression search and replace

•preg_grep — Return array entries that match the pattern

•preg_last_error — Returns the error code of the last PCRE regex

execution

•preg_match_all — Perform a global regular expression match

•preg_match — Perform a regular expression match

•preg_quote — Quote regular expression characters

•preg_replace_callback — Perform a regular expression search and

replace using a callback

•preg_replace — Perform a regular expression search and replace

•preg_split — Split string by a regular expression

Page 14: 200 Days of Code, Beginner Track, Month 5

PCRE functions•preg_filter — Perform a regular expression search and replace

•preg_grep — Return array entries that match the pattern

•preg_last_error — Returns the error code of the last PCRE regex

execution

•preg_match_all — Perform a global regular expression match

•preg_match — Perform a regular expression match

•preg_quote — Quote regular expression characters

•preg_replace_callback — Perform a regular expression search and

replace using a callback

•preg_replace — Perform a regular expression search and replace

•preg_split — Split string by a regular expression

Page 15: 200 Days of Code, Beginner Track, Month 5

preg_matchint preg_match (

string $pattern ,

string $subject

[, array &$matches]

)

Page 16: 200 Days of Code, Beginner Track, Month 5

/………/

Page 17: 200 Days of Code, Beginner Track, Month 5

/………/

Page 18: 200 Days of Code, Beginner Track, Month 5

/app/A. foo

B. bar

C. apple

D. app

Page 19: 200 Days of Code, Beginner Track, Month 5

/app/A. foo

B. bar

C. apple

D. app

Page 20: 200 Days of Code, Beginner Track, Month 5

/a|b/A. a

B. b

C. ab

D. x

Page 21: 200 Days of Code, Beginner Track, Month 5

/a|b/A. a

B. b

C. ab

D. x

Page 22: 200 Days of Code, Beginner Track, Month 5

/a+/A. a

B. aaa

C. baaab

D. b

Page 23: 200 Days of Code, Beginner Track, Month 5

/a+/A. a

B. aaa

C. baaab

D. b

Page 24: 200 Days of Code, Beginner Track, Month 5

/a*/A. a

B. aaa

C. baaab

D. b

Page 25: 200 Days of Code, Beginner Track, Month 5

/a*/A. a

B. aaa

C. baaab

D. b

Page 26: 200 Days of Code, Beginner Track, Month 5

/^app$/A. foo

B. bar

C. apple

D. app

Page 27: 200 Days of Code, Beginner Track, Month 5

/^app$/A. foo

B. bar

C. apple

D. app

Page 28: 200 Days of Code, Beginner Track, Month 5

/^ab?c$/A. aac

B. abc

C. ac

D. acc

Page 29: 200 Days of Code, Beginner Track, Month 5

/^ab?c$/A. aac

B. abc

C. ac

D. acc

Page 30: 200 Days of Code, Beginner Track, Month 5

/^a.c$/A. aac

B. abc

C. ac

D. acc

Page 31: 200 Days of Code, Beginner Track, Month 5

/^a.c$/A. aac

B. abc

C. ac

D. acc

Page 32: 200 Days of Code, Beginner Track, Month 5

/^(?!(?:(?:\\x22?\\x5C[\\x00-

\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-

\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-

\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x2 2(?:[\\x01-

\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-

\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-

\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-

\\x7F]|(?:\\x5C[\\x00-\ \x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-

9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-

9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-

9][:\\]]){7,})(?:[a-f0-9]{1,4}(?: :[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-

9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-

9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-

9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9 ])|(?:1[0-9]{2})|(?:[1-9]?[0-

9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD

Page 33: 200 Days of Code, Beginner Track, Month 5

/[[:alpha:]]/ or /[A-Za-z]/A. a

B. b

C. c

D. -

Page 34: 200 Days of Code, Beginner Track, Month 5

/[[:alpha:]]/ or /[A-Za-z]/A. a

B. b

C. c

D. -

Page 35: 200 Days of Code, Beginner Track, Month 5

/^[[:alpha:]]+\d*$/A. abc123

B. a

C. ~abc123~

D. 123abc

Page 36: 200 Days of Code, Beginner Track, Month 5

/^[[:alpha:]]+\d*$/A. abc123

B. a

C. ~abc123~

D. 123abc

Page 37: 200 Days of Code, Beginner Track, Month 5

/a{2,4}/A. a

B. aa

C. aaaa

D. b

Page 38: 200 Days of Code, Beginner Track, Month 5

/a{2,4}/A. a

B. aa

C. aaaa

D. b

Page 39: 200 Days of Code, Beginner Track, Month 5

/^([[:alpha:]]\d)+[[:alpha:]]*$/

A. a0

B. a0xyz

C. 0a1b

D. a0b1xyz

Page 40: 200 Days of Code, Beginner Track, Month 5

/^([[:alpha:]]\d)+[[:alpha:]]*$/

A. a0

B. a0xyz

C. 0a1b

D. a0b1xyz

Page 41: 200 Days of Code, Beginner Track, Month 5

/(\d{3})-(\d{3})-(\d{4})/

Page 42: 200 Days of Code, Beginner Track, Month 5

Best practices

Page 43: 200 Days of Code, Beginner Track, Month 5

– Jamie Zawinski

“Some people, when

confronted with a problem,

think "I know, I'll use regular

expressions." Now they have

two problems.”

Page 44: 200 Days of Code, Beginner Track, Month 5

/good text/A. good text; evil text

B. evil text good text

C. good text'; evil text

D. good text

Page 45: 200 Days of Code, Beginner Track, Month 5

/good text/A. good text; evil text

B. evil text good text

C. good text'; evil text

D. good text

Page 46: 200 Days of Code, Beginner Track, Month 5

phone-number.php

Page 47: 200 Days of Code, Beginner Track, Month 5

Problems

Page 48: 200 Days of Code, Beginner Track, Month 5

Thanks