On 1 Jan 2011, at 12:35am, Jeffrey Walton wrote:

> I'm using SQLite on embedded devices (iPhone and, SmartPhone, and
> PocketPC). Ichecked OWASP, and they don't have anything for SQLite or
> C/C++. http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet.
> 
> Does the SQLite API offer the ability to create a 'command object'. Or
> a call to sanitize user input (which would probably include escaping
> special characters)?

Yep.  sqlite3_prepare() creates a compiled SQL statement, which is more or less 
what you mean by 'command object'.  It's not possible to inject if you're using 
sqlite3_prepare(): it will execute only a single instruction and syntax 
characters in parameters are interpreted as if they're part of the parameter, 
not part of the command.

If you're using sqlite3_exec() then you have bigger problems.  You can, of 
course, screen your input string for semi-colons.  You can check that INSERT, 
UPDATE and DELETE are followed only by your desired table names.  You can 
screen the first two words of each SQL command.  Further precautions vary 
depending on what you know is a legitimate use in your particular application.

So I recommend that if you're nervous about injection, you use the prepare 
sequence:

<http://www.sqlite.org/c3ref/stmt.html>

In the case of the iPhone you other special security measures acting in your 
favour.  For instance, it's impossible to use one application to get at the 
data belonging to other applications.  Other operating systems have their own 
measures.

Simon.
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to