Download pptx - The Anti pattern

Transcript
Page 1: The Anti pattern

The Anti-Pattern

Page 2: The Anti pattern

80%

Page 3: The Anti pattern

The Anti-Pattern

input = GET[ “username” ]

statement = “code “ + input

execute( statement )

Page 4: The Anti pattern

The Anti-Pattern

• sql• ldap• eval• response.write• file.open• reflection• control.the.computer

INPUT

EXECUTE

Page 5: The Anti pattern

Anti-AntiPatterns

Page 6: The Anti pattern

Code not Text!

Text query languages suck.

Critera & Entity API: WIN

Page 7: The Anti pattern

Code not Text

Root<Pet> pet = cq.from(Pet.class)cq.where(cb.equals(pet.get(Pet_.name), input))

s = “SELECT FROM pet WHERE pet.name =“ + inputexecuteSQL( s )

Page 8: The Anti pattern

Fear String.Concat

Parameterized Queries: use wildcards instead of concatenating user input

Page 9: The Anti pattern

Remove String.Concat

s = “SELECT FROM pet WHERE pet.name = @name“ps = prepare( s )ps.bind(“@name”, input)

s = “SELECT FROM pet WHERE pet.name =“ + inputexecuteSQL( s )

Page 10: The Anti pattern

Defensein depth

Page 11: The Anti pattern

INPUT

EXECUTE

GUARD Exception

Page 12: The Anti pattern

Defense in Depth

input = GET[ “username” ]

if (whitelist.bad( input )) { secLog(“reject…”) throw new Exception()}

Page 13: The Anti pattern

Summary

• Most common security coding vulns are variants of the same anti-pattern

• Use easy safe-by-design API– Entity & Criteria API – SQLi is hard =)

• Fear String.Concat– String operations are the mother of all evil– Parameterize if you must stick to text!

• Defend in Depth! – The anti-pattern can also be broken by input

validation.


Recommended