SQLite3 Injection Cheat Sheet
sites.google.com
sites.google.com
If you prepare SQL queries as all manuals recommend nowadays, you're 99,9% safe (the other 0.01% beign the probability that your database driver is doing it wrong).
I just thought the title might raise some unnecessary alarms.
Please see this, just posted: http://news.ycombinator.com/item?id=4061387
I can see why this might be necessary in some cases (e.g. year and month in the name of the table), but such cases can be handled relatively easily by using a whitelist and/or validating & sanitizing strictly. If user input needs to be escaped rather than validated & sanitized, you're still doing something wrong. Why would you even have a table name or field name that doesn't match /[a-z0-9_]+/i ?
Far more common is to offer the user a drop-down list of field name choices. In that case, the server side should whitelist valid field names before building the sql statement.
https://blogs.oracle.com/optimizer/entry/explain_adaptive_cu...
It is just kinda "wow". Would never think off top my head about something like this.
If the site lets you upload an image to a readable directory you may be able to trick the webserver into executing your image.
This and the SQLite issue are not limited to PHP BTW, PHP is just most common.
To prevent this make sure never to let the user control the on disk filename of an image they upload!
I would actually never let the webserver directly serve uploaded files to the user. Store the files in a directory not served by a webserver, and use a small bit of code to read the file and send it to the user.
I always run my code such that the webserver has read only access to any directory it will serve. This helps limit exploits since the attacker has no ability to write anything and then have it execute. (Not a panacea of course, if you have a large enough bug, the attacker could write to /tmp then exec the code.)
If you run nginx or lighthttpd you can use X-Sendfile/X-Accel-Redirect for this purpose.
Additionally I recommend never having your runnable scripts in the same directory as static content, and also preferrably run the scripts through proxied HTTP or FastCGI. Then you never have to worry about this problem and not either by people being able to download your source code.
Apache's default treatment of PHP is an example of bad design making for complex configuration and many possible security holes.