RE: question about validation and sql injection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sudhakar,

Bundling your parameters and using "prepared statements" will prevent
any and all SQL Injection from taking place, as the parameters
themselves will NEVER (repeat, NEVER) be considered a "part" of the
query. They are considered only to be data to be used in the query.

Example:

[code]
$dbc = mysqli_connect($host, $user, $pass, $db) or die("Couldn't
connect: " . mysqli_error());
$username = $_POST['user'];
$query = "insert into `mytable` values(?)"; // the ? represents where
your parameter will be bundled
$stmt = mysqli_stmt_init($dbc);

if(mysqli_stmt_prepare($stmt, $query))
{
	mysqli_stmt_bind_param($stmt, 's', $username); // the 's' means
"string value"
	mysqli_stmt_execute($stmt);
}
[/code]

Hope this helps! Here's a tutorial on prepared statements using
PHP/MySQL:
http://www.databasejournal.com/features/mysql/article.php/3599166 


Todd Boyd
Web Programmer


> -----Original Message-----
> From: Sudhakar [mailto:sudhakararaog@xxxxxxxxx]
> Sent: Thursday, May 15, 2008 5:26 PM
> To: php-general@xxxxxxxxxxxxx
> Subject:  question about validation and sql injection
> 
> A) validating username in php
> 
> as part of a registration form a user fills there desired username and
> this
> is stored in a mysql. there are certain conditions for the username.
> 
> a) the username should only begin either letters or numbers, and
> Underscore
> character
> example = user123, 123user, u_ser123, user_123 = completely case
> insensitive
> b) a user may choose not to have an underscore or numbers sometimes.
> example
> = username
> 
> presently my validation for username is
> 
> $username = $_POST["username"];
> if( $username == "" || !eregi("^[a-zA-Z0-9_]+$", $username) )
> {
> $error.="User name cannot be blank or has special characters";
> }
> 
> Question = how can i rewrite this php validation for username to meet
> the
> above criteria or is my validation correct
> 
> 
> B) preventing sql injection
> 
> till now i have been capturing the form values and directly inserting
> into
> the table without considering sql injection however for this project
as
> it
> is for a forum i would like to implement prevention of sql injection.
> from
> what i have read about preventing sql injection there are several
steps
> that
> need to be followed,
> 
> htmlentities
> addslashes
> trim
> mysql-real-escape-string
> magic_quotes_gpc is ON
> magic_quotes_runtime is OFF
> magic_quotes_sybase is OFF
> 
> as i have not done preventing sql injection i am not sure what is the
> correct process.
> 
> Question =
> 
> a) please advice a step by step process of how to go about avoiding
the
> sql
> injection before the insert sql query is executed starting from
> 
> $username = $_POST["username"];               till the
> 
> insert into tablename(field1, field2) values($value1, $value2) SQL
> query is
> executed which will prevent sql injection even if the user enters any
> special characters while filling the form.
> 
> b) should i consider the setting of magic quotes as in should it be ON
> or
> OFF or should i ignore it if so should it be
> ON or OFF
> 
> c) also with the prevention methods if a user types a special
character
> in
> the data will that character be written in the table as a escaped
> character
> or how does it store those special characters
> 
> d) a very important point here, i have a feature where a user can
check
> if a
> username is available or not. so while storing a username if the
> username is
> stored as john\smith in mysql and if the user is searching for
> johnsmith
> this would not match, so even in the table the username should be
> stored
> without slashes as i have to read the username and compare with what
> the
> user has typed to see if they both are same or different.
> please advice if i have missed any other steps to prevent sql
> injection.
> 
> thanks a lot for your help.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux