我想知道代码是否易受sql注入攻击?
我的困境是基于这样一个事实 $_POST
变量是直接使用的,而不是像 $something = $_POST['src']
.
$sql = "update posts set img = :aimg where id = :aid";
$st = $db->prepare($sql);
$st->execute(array(
":aimg" => $_POST['src'],
":aid" => $_POST['id']
));
echo $_POST['src'];
2条答案
按热度按时间fiei3ece1#
基本上,$post=$\u post['src']&&$\u post['src']是相同的。通过将值赋给一个变量,没有任何安全增强。查询看起来是安全的。准备好的语句和参数化的变量使事情变得安全。
jpfvwuh42#
您应该验证每个输入,在本例中是$\u post['src']和$\u post['id']。例如,如果$\u post['id']必须是一个数字,请验证该数字,依此类推。请记住,客户端可以是另一个东西,而不是浏览器。当然,参数化是一个很好的实践,但你不能仅仅依靠它。顺便说一句,分配$something=$\u post['src'];没什么区别。