data as being “tainted” or dirty in certain circumstances: • Data from untrusted sources in perl. • Linux kernel running closed source modules. • Dynamic, run-time property.
security checks, called taint mode, when it detects its program running with differing real and effective user or group IDs. • Also enabled explicitly by using the -T command line flag.
from outside your program to affect something else outside your program--at least, not by accident.” • “Laundering data using regular expression is the only mechanism for untainting dirty data”
at hand. Client code shouldn’t build strings of SQL, LDAP, HTML, etc. code unless it’s the best option! • It’s hard to write an injection vulnerability without interpolation and/or concatenation!
this approach. • Instead of taking a query as a String (or ByteString, or Text, etc.) they expect a Query value. • A string literal can be a Query in the same way 1 can be an Int, a Double, etc.
a ByteString (an array of bytes, just like C strings). • From the client programmers perspective, it’s almost entirely opaque. This interface is safe. • (Until we notice fromString, at least.)
industry are problems of user interface design. • Techniques and patterns have been known for decades can reduce or remove entire classes of errors. • But we don’t use them.