如何防止客户端和服务器端的SQL注入?

时间:2016-02-04 10:02:59

标签: php sql sql-injection

我避免sql注入的方法:: Html表单

<form method="post" action="" style="padding:0;">
 <p> <span class="cclogin-addon"><i class="fa fa-user fa-2x fa-spin"></i></span>
  <input type="text" name="firstname" value="" placeholder="First Name">
 </p>
  <p>
  <p> <span class="cclogin-addon"><i class="fa fa-envelope fa-2x fa-spin"></i></span>
   <input type="text" name="Email" value="" placeholder="Your Email">
 </p>
  <p>
  <input type="submit" name="Login" value="Submit">
  </p>
 </form>

使用ajax我正在提交表单,我也在我的表单中实现了验证码。     在操作文件上,接下来是将数据保存到数据库的代码:

   if(isset($_POST['Login'])&& ( $_POST['Login'] )) // submit button name
   {
     if($_POST['type_code']==$_SESSION['vercode']) // checking captcha code
    {
      $firstname = strip_tags($_POST['firstname']);
      $email = strip_tags($_POST['email']);
      $phone = $_POST['phone'];
      $sql = "INSERT INTO table_name (firstname,email,phone)
      VALUES ('".$firstname."', '".$email."','".$phone.")";
      if ($conn->query($sql) === TRUE) {
         echo ‘records save successfully’;
       }
      Else
      {
         Echo ‘not saved data’;
       }

但是在跨站点脚本扫描后我得到了很多sql注入错误              例如 ::                 URL编码的POST输入firstname设置为ttqevjod“onmouseover = prompt(949671)

输入反映在双引号之间的标记参数内。     为避免此类错误,我的第二种方法是限制用户将转义序列字符输入文本字段

如下::     1.检查按键事件

     function blockSpecialChar(id)
      {
          var spclChars = "!@#$%^&*,\'\"(;:?.|-_)<>&[]{}+=`\/";
           var content =  $('#'+id).val(); 

                   for (var i = 0; i < content.length; i++) 
                       { 
                            if (spclChars.indexOf(content.charAt(i)) != -1) 
                            { 
                               alert ("Special characters are not allowed."); 
                                $('#'+id).val(''); 
                                return false; 
                           } 
                       } 
                }
   While saving data
     if(isset($_POST['Login'])&& ( $_POST['Login'] )) // submit button name
           {
               if($_POST['type_code']==$_SESSION['vercode']) // checking     captcha code
               {
     $firstname = htmlspecialchars ($_POST['firstname']);
     $email = htmlspecialchars ($_POST['email']);
     $phone = htmlspecialchars($_POST['phone']);
     $sql = "INSERT INTO table_name (firstname,email,phone)
      VALUES ('".$firstname."', '".$email."','".$phone.")";
     if ($conn->query($sql) === TRUE) {
        echo ‘records save successfully’;
     }
    Else
    {
       Echo ‘not saved data’;   
    }

但是我的主管说这是防止sql注入的错误方法。请引导我正确的防止sql注入的方法。

0 个答案:

没有答案
相关问题