Re: Re: SQL Injection - Solution

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

 



On Thu, May 7, 2009 at 9:41 AM, Igor Escobar <titiolinkin@xxxxxxxxx> wrote:
> Ok guys, thanks.
>
>
> Regards,
> Igor Escobar
> Systems Analyst & Interface Designer
>
> --
>
> Personal Blog
> ~ blog.igorescobar.com
> Online Portifolio
> ~ www.igorescobar.com
> Twitter
> ~ @igorescobar
>
>
>
>
>
> On Thu, May 7, 2009 at 7:32 AM, Jan G.B. <ro0ot.w00t@xxxxxxxxxxxxxx> wrote:
>
>> What about declare, cast, unhex, exec etc.?
>> You Replace everything with "" isn't so good, I believe. Others
>> mentiond it before, that *, =, select, from ETC. are valid words and
>> characters in an other context.
>>
>> Anayse some attacks before trying to defend them. Injections can be
>> heavily db-dependent, so filtering the common words might not be so
>> insightful.
>>
>> If you really want to go the filter approach, then check out this
>> project and learn from them. ;)
>> http://php-ids.org/
>>
>>
>> byebye
>>
>> 2009/5/6 Igor Escobar <titiolinkin@xxxxxxxxx>:
>> > Yeah yeah, i understood that, but, the point is... i sad previously, my
>> > function is not tied to any database.
>> >
>> > Is a generic function, i dont know who be use this, so i don't know, what
>> is
>> > your data base so, i can't use functions like mysql_real_scape_string
>> etc...
>> >
>> >
>> > Regards,
>> > Igor Escobar
>> > Systems Analyst & Interface Designer
>> >
>> > --
>> >
>> > Personal Blog
>> > ~ blog.igorescobar.com
>> > Online Portifolio
>> > ~ www.igorescobar.com
>> > Twitter
>> > ~ @igorescobar
>> >
>> >
>> >
>> >
>> >
>> > On Wed, May 6, 2009 at 3:00 PM, Bruno Fajardo <bsfajardo@xxxxxxxxx>
>> wrote:
>> >
>> >> 2009/5/6 Igor Escobar <titiolinkin@xxxxxxxxx>:
>> >> > hun...by the way.... I forgot to mention, I am Brazilian and here in
>> >> Brazil
>> >> > these words are not common ...
>> >>
>> >> Igor,
>> >>
>> >> I'm brazilian too, but that is not the point. Deny the use of *any*
>> >> word as input in your app is unnecessary. The problem that you're
>> >> trying to solve, has been solved a long time ago.
>> >>
>> >> Bruno.
>> >>
>> >> >
>> >> > That is a recursive function and i can use array_map becouse i some
>> cases
>> >> we
>> >> > obtain arrays of arrays and that will generate a error.
>> >> >
>> >> >
>> >> > Regards,
>> >> > Igor Escobar
>> >> > Systems Analyst & Interface Designer
>> >> >
>> >> > --
>> >> >
>> >> > Personal Blog
>> >> > ~ blog.igorescobar.com
>> >> > Online Portifolio
>> >> > ~ www.igorescobar.com
>> >> > Twitter
>> >> > ~ @igorescobar
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > On Wed, May 6, 2009 at 2:36 PM, Shawn McKenzie <nospam@xxxxxxxxxxxxx>
>> >> wrote:
>> >> >
>> >> >> Igor Escobar wrote:
>> >> >> > Hunnn...
>> >> >> >
>> >> >> > So, what do you think now?
>> >> >> >
>> >> >> > function _antiSqlInjection($Target){
>> >> >> >     $sanitizeRules =
>> >> >> > array('OR','FROM','SELECT','INSERT','DELETE','WHERE','DROP
>> >> >> > 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:
>> >> >> http://us2.php.net/manual/en/security.database.sql-injection.php
>> >> >>
>> >> >> 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;
>> >> >> }
>> >> >>
>> >> >> Thanks!
>> >> >> -Shawn
>> >> >>
>> >> >>
>> >> >>
>> >> >
>> >>
>> >
>>
>

Use prepared statements.  All your problems go away.  Look at mysqli/PDO.

-- 
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