防止使用php插入查询

Posted

技术标签:

【中文标题】防止使用php插入查询【英文标题】:Prevent insert query with php 【发布时间】:2017-03-25 13:15:53 【问题描述】:

我有一个 php,它将在我的数据库中包含我的数据。

但在我的页面中,我有一个可以复制的 div,所以我将这些信息发送到一个数组中(用“#!@”内爆以避免在我将其插入数据库时​​出现任何错误的爆炸)。

我的问题是,如果用户没有在第一个 div 内容字段中插入任​​何内容,我将不会进行插入,但它仍然会这样做。

    if ($_GET['action_ent'] != "#!@#!@#!@")
    
    $myInputs = $_GET['action_ent'];
     foreach ($myInputs as $eachInput) 
     

            $valores = $eachInput;
            print_r($valores);
            $dummy = explode('#!@', $valores);

            $acao = $dummy[0];
            $resp_acao = $dummy[1];
            $inic_plan_acao = $dummy[2];
            $fim_plan_acao = $dummy[3];


            $inicio_acc = explode("/", $inic_plan_acao);
            $fim_acc = explode("/", $fim_plan_acao);

            $inicio_action = $inicio_acc[2]."-".$inicio_acc[1]."-".$inicio_acc[0];
            $fim_action = $fim_acc[2]."-".$fim_acc[1]."-".$fim_acc[0];




                $result2 = mysql_query("INSERT INTO `demv3`.`entraves_action` (`action_id`, `ent_id`, `resp_ent`, `data_fim`,`action_desc`,`action_resp`,`action_comeco`,`action_fim`) VALUES ('0', '$ent_id', '$resp_ent', '$data_fim', '$acao', '$resp_acao', '$inicio_action', '$fim_action')");

     

    
    else
    
        echo "NOTHING";
    

【问题讨论】:

如果输入来自表单,如果您需要他们输入某些内容,则将required 放在第一个输入上,否则只需检查第一个输入的 $_GET 并查看它是否为空。 您的代码完全取决于$_GET['action_ent'] 拥有的内容。这是你无法完全控制的事情。首先,var_dump($_GET) 显示什么? 【参考方案1】:

尝试检查 foreach 中的第一项:

if ($_GET['action_ent'] != "#!@#!@#!@")
        
        $myInputs = $_GET['action_ent'];
         foreach ($myInputs as $eachInput) 
         
                if(empty($eachInput)) 
                      echo 'NOTHING';
                      break;
                

                $valores = $eachInput;
                print_r($valores);
                $dummy = explode('#!@', $valores);

                $acao = $dummy[0];
                $resp_acao = $dummy[1];
                $inic_plan_acao = $dummy[2];
                $fim_plan_acao = $dummy[3];


                $inicio_acc = explode("/", $inic_plan_acao);
                $fim_acc = explode("/", $fim_plan_acao);

                $inicio_action = $inicio_acc[2]."-".$inicio_acc[1]."-".$inicio_acc[0];
                $fim_action = $fim_acc[2]."-".$fim_acc[1]."-".$fim_acc[0];




                    $result2 = mysql_query("INSERT INTO `demv3`.`entraves_action` (`action_id`, `ent_id`, `resp_ent`, `data_fim`,`action_desc`,`action_resp`,`action_comeco`,`action_fim`) VALUES ('0', '$ent_id', '$resp_ent', '$data_fim', '$acao', '$resp_acao', '$inicio_action', '$fim_action')");

         

        
        else
        
            echo "NOTHING";
        

请注意,如果除第一个输入之外的任何其他输入为空,它将中断循环。为了避免您的逻辑发生重大变化,您可以使用计数器或布尔标志来解决此问题:

  if(empty($eachInput) && $counter == 0) 
     echo 'NOTHING';
     break;
  

【讨论】:

以上是关于防止使用php插入查询的主要内容,如果未能解决你的问题,请参考以下文章

Android php插入记录在多次提交中防止DOS攻击和csrf攻击

如何防止在包含的文件中包含两次相同的文件?

如何防止 PHP PDO 通过 jQuery AJAX 插入 MySQL varchar 中的转义字符

php 删除WordPress全尺寸图像插入post +选项并添加最大尺寸以防止用户插入大量i

mysql防止重复插入记录方法总结

MySQL防止重复插入相同记录