SQL injection vulnerabilities are a major security hazard for many PHP programs, resulting from the fact that Web developers allow the end user to manipulate variables (such as displaying information based on the form submission) when executing statements to the database, typically global variables such as _get, _post, or _session.
Let's look at the following code:
 
 
  
   
   | The following is a reference to the content: Php query = "Select News_title, News_text";
 Query. = "from News";
 Query. = "Where news_id=". _get[' id '];
 
 mysql_query (query);
 ?>
 | 
 
  
 
It would be a serious mistake to think that the _get[' ID ' would always be a numeric value. The end user can change the value of this variable, for example, "0; Delete from news;, the query statement becomes the following value: 
 
Select News_title, News_text from news Where news_id=0; Delete from News; 
 
This will have very serious consequences. 
 
Validating numeric data 
 
Numeric data is the easiest to verify, PHP has a self-contained function called is_numeric () can return ture value to determine whether it is a numeric type, this function is not MySQL, so you can use in any database platform PHP program to use in validating numbers. 
 
Here is the modified code: 
 
 
 
  
   
   | The following is a reference to the content: Php if (!is_numeric (_get[' id '))
 {
 ID ' s not numeric?
 Kill the script before the query can run
 Die ("The ID must be numeric!");
 }
 
 query = "Select News_title, News_text";
 Query. = "from News";
 Query. = "Where news_id=". _get[' id '];
 
 mysql_query (query);
 ?>
 | 
 
  
 
Validating non-numeric data 
 
Validation of non-numeric data slightly troublesome. PHP has a special function called Magic quotes. When it activates, PHP automatically filters out the backslash (\), double quotes ("), single quotes ('), and white-space characters in the _get and _post global variables. The problem is that not all servers can turn on this feature, so it's important to check if the server is open. You can use the GET_MAGIC_QUOTES_GPC () function to determine whether the MAIGC quotes feature is turned on. 
In the MySQL query statement you can use the mysql_real_escape_string () function to enhance security, the code is as follows: 
 
 
 
  
   
   | The following is a reference to the content: Php Fix a _post variable called FirstName for MySQL
 FirstName = _post[' firstName '];
 if (GET_MAGIC_QUOTES_GPC ())
 {
 If Magic Quotes is Enabled-turn the string back into a unsafe string
 FirstName = Stripslashes (firstName);
 }
 
 Now convert the unsafe string into a MySQL safe string
 Firstname= mysql_real_escape_string (firstName);
 
 FirstName should now is safe to insert into a query
 ?>
 | 
 
  
 
Output to Page 
 
To correctly display quotes and backslashes in characters, use the stripslashes () function 
 
 
 
  
   
   | The following is a reference to the content: Php FirstName = _post[' firstName '];
 if (GET_MAGIC_QUOTES_GPC ())
 {
 If Magic Quotes is Enabled-turn the string back into a unsafe string
 FirstName = Stripslashes (firstName);
 }
 
 Now convert the unsafe string into a MySQL safe string
 FirstName = mysql_real_escape_string (firstName);
 
 Safe Query
 mysql_query (Insert into Names VALUES ('). FirstName. "')");
 
 Page output should look proper
 echo "Hello". Htmlentities (Stripslashes (firstName));
 ?>
 | 
 
  
 
Final integration 
 
Finally you can create a simple function to solve in PHP if the MySQL query characters securely. It is important to note that if you want to output to a Web page, you also need to use stripslashes. 
 
 
 
  
  
    The 
   | PHP Function Verifyinput (input, Forceint = False)
 {
 if (is_numeric (input)
 {
 return input;
 }
 ElseIf (!forceint)
 {
 if (GET_MAGIC_QUOTES_GPC ())
 {
 //If magic quotes is enabled, get rid of tho SE
 //Pesky slashes
 input = stripslashes (input);
 }
 
 //Convert the input variable into a MySQL safe string.
 input = mysql_real_escape_string (input);
 
 return input;
 }
 Else
 {
 //If input not an integer and Forceint = True,
 //Kill Script
 Die ("Invalid input");
 
 }
 
 ///_post[' name '] should be a string
 //_post[' ID '] should is a integer, if not the script dies
 ID = _post[' id '];
 name = _post[' name '];
 
 Query = "Update users SET name=". Verifyinput (name). " ";
 Query. = "Where id=". Verifyinput (ID, true);
 
 //query should be safe to run
 mysql_query (query);
 ?>
 |