| 
	
 | 
 Posted by Gleep on 03/25/07 00:54 
On 24 Mar 2007 12:21:30 -0700, "shimmyshack" <matt.farey@gmail.com> wrote: 
 
>On 24 Mar, 19:54, Gleep <G...@Gleep.com> wrote: 
>> On 23 Mar 2007 23:20:16 -0700, "shimmyshack" <matt.fa...@gmail.com> wrote: 
>> 
>> 
>> 
>> >On 24 Mar, 03:27, Gleep <G...@Gleep.com> wrote: 
>> >> On Fri, 23 Mar 2007 20:09:57 GMT, "Simon Harris" <too-much-s...@makes-you-fat.com> wrote: 
>> >> >Hi All, 
>> 
>> >> >I am using mysql_real_escape_string() on strings before they are entered 
>> >> >into mySQL. This has worked Ok, but when I get the information out, 
>> >> >single/double quotes are preceeded with a \ (Escaped) so, 
>> >> >"Something in quotes" becomes \"something in quotes\" 
>> 
>> >> >Do I need to replace \" with " before I print the string to the page? Or am 
>> >> >I missing something? Is there an opposite to mysql_real_escape_string() that 
>> >> >I should call on the string when reading the data from mySQL? Or perhaps I 
>> >> >have totally missed the point of this function? :) 
>> 
>> >> >Any help/suggestions muchly appreciated! 
>> 
>> >> >Simon. 
>> 
>> >> >-- 
>> 
>> >> I wrote up this function to prevent sql injections 
>> >> i didn't test it - but it should work 
>> 
>> >> function cleanVar($str) { 
>> >>  if(is_numeric($str)) 
>> >>   return $str; 
>> >>  else { 
>> >>   if(get_magic_quotes_gpc()) { 
>> >>    $str = stripslashes($str); 
>> >>    if(function_exists('mysql_real_escape_string')) 
>> >>     return mysql_real_escape_string($str); 
>> >>    elseif(function_exists('mysql_escape_string')) 
>> >>     return mysql_escape_string($str); 
>> >>    else 
>> >>     return addslashes($str); 
>> >>   } // end magic 
>> >>  } // end numeric 
>> 
>> >> } // end function 
>> 
>> >> //  example usage 
>> >> $query = "UPDATE users SET name=". cleanVar($name) .", id=". cleanVar($id) ." "; 
>> 
>> >huh - you have to be kidding!!?? 
>> >no this would _not_ work, sorry 
>> >it's not a game where you can "do it yourself" with a quick fix of 
>> >strip/addslashes mixed with is_numeric and a call or so to magic doo- 
>> >dah. 
>> >There are brilliant, creative coders who are on the other end, your 
>> >function is like making your front door entirely out of a letter box 
>> >marked - bet you can't post stuff through here! 
>> 
>> You must be a beginner coder and don't understand what magic quotes does vs mysql_escape string. 
>> The function I provided here is legit and correct.  First if a var is numeric you don't have to 
>> worry about it being an sql injection.  Next you have to determine does your version of php has 
>> magic quotes set or not.  Because if it is set, you will get double escapes \\ if you use 
>> mysql_escape.  If I determine that magic quotes is on - you first must stripslash what php added - 
>> then apply the mysql_escape function.  Also since I do not know what version of php the guy might 
>> have, I have to determine which one to use  mysql_escape or mysql_real_escape. 
>> 
>> So the next time you decide to attack me, you better do your homework. Go look at the online manual 
>> and you will others providing very similar techniques.  Also php6 when available will be doing away 
>> with magic quotes. The other option is to get into the php.ini and turn magic quotes off. However 
>> for some people who use a shared hosts IPS, they can not do this.  The function I wrote does exactly 
>> what Simon asked for.  He wanted to use mysql_escape to prevent injections yet didn't know why he 
>> was getting double quotes.  The function is designed to cover most common instances. If you take two 
>> seconds to read the code you will see why. 
> 
> 
>all you have done is use an available function for each version, which 
>have of course been superceeded by the later versions for good reason! 
>mysql_escape_string is deprecated for good reason 
>addslashes is trivial to subvert, you can do SQL injection without 
>using a quote for instance! 
>is_numeric is also no protection 
> 
>what you should have done is create a function called 
>mysql_real_escape_string if it does not exist and provide the 
>functionality lacking in those older versions, instead of using 
>whatever ineffective protection is afforded in that particular 
>version. 
> 
>good protection comes from using regular expressions, bounds checking, 
>proper type casting, and not through the use of such functions as 
>addslashes!! FOr instance the function is_numeric is not "is this an 
>integer" so what is it doing as the only line of defence before using 
>the return directly in the query? 
> 
>I think it you who need to go read up on this subject, while I admit I 
>do think of myself as an average programmer, it seems I have done more 
>readin on this particular subject than you, rather than waste your 
>time criticising me, why not provide me with a reason why what I said 
>is wrong! 
> 
 
 
Shimmy is just being a butt-plug without really providing anything useful.  Read up. 
http://www.php.net/manual/en/function.get-magic-quotes-gpc.php 
http://www.php.net/manual/en/function.mysql-real-escape-string.php 
One will see how I derived this function and what it's used for. 
"..good protection comes from using regular expressions, bounds checking, proper type casting,.." 
Yes I do agree with that line, however not all programmers take the time to write validations nor do 
they know how to use preg_match, preg_replace, replacing characters that are not ascii or out of 
bounds  ect....  Simon, needed to know why he was getting double escapes. He mostly likely was not 
aware using mysql_real_escape_string and having magic quotes on doubles escaped values. This is my 
last comment, I need to move on and do other things than bicker with Shimmy
 
  
Navigation:
[Reply to this message] 
 |