Igor Escobar wrote:
> Hunnn...
> So, what do you think now?
> function _antiSqlInjection($Target){
>     $sanitizeRules =
> TABLE','SHOW TABLES','*','--','=');
>     foreach($Target as $key => $value):
>         if(is_array($value)): $arraSanitized[$key] =
> _antiSqlInjection($value);
>         else:
>             $arraSanitized[$key] = (!get_magic_quotes_gpc()) ?
> addslashes(str_ireplace(trim($sanitizeRules,"",$value))) :
> str_ireplace(trim($sanitizeRules,"",$value));
>         endif;
>     endforeach;
>     return $arraSanitized;
> }
Stay on list please.  I don't like the ternary or the brace omissions
(alternate syntax) :-) however....

My point was that in my opinion you don't need the replace at all. 
Also, do you really want to strip all 'or', * and = from all fields? 
These may be perfectly valid in your app.  Or is a very, very common
word, so is from and come to think of it, where, select, insert and delete.

For any of the SQL injections to work in your query, there will need to
be quotes or the backtick ` in the user supplied content.  The quotes
are escaped by mysql_real_escape_string().

I don't see any way for a SQL injection without the user input
containing quotes or the backtick to break out of your query or
prematurely terminate an expression.  Some examples here, however they
don't mention the backtick:

This might be more useful:

||||||function _antiSqlInjection($Target)
    if(is_array($Target)) {
        $Value = array_map('_antiSqlInjection', $Target);
    } else {
        if(get_magic_quotes_gpc()) {
            $Target = stripslashes($Target);
         // replace backtick with single quote or whatever
        $Target = str_replace("`", "'", $Target);
        $Value = mysql_real_escape_string($Target);
    return $Value;


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

Reply via email to