防止使用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 中的转义字符