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