这个问题在这里已经有答案了:
如何防止php中的sql注入(28个答案)
两年前关门了。
我经常使用这样的方法来过滤输入。使用 preg_match( )
如图所示,或有时使用 switch( )
只有当post/get变量是特定数量的关键字之一时,它才起作用。
if (preg_match("/^[0-9]+$/",$_POST['id_to_clear']))
{
db_query("UPDATE `table` SET `error`=0, `progress`=0 WHERE `id` = {$_POST['id']}");
}
一般来说,在sql查询中直接使用post/get变量是一个巨大的危险信号。但在这种情况下,它似乎是完全安全的。有什么办法会出错吗?我没看见的东西?
1条答案
按热度按时间7fyelxc51#
您可能应该在这里使用准备好的语句,php提供了许多实现这一点的api。也就是说,如果以下正则表达式通过:
然后
id_to_clear
post值应该只包含数字,在这种情况下,我看不到任何方法可以注入您显示给我们的查询。但是要小心,因为即使现在和将来事情可能是安全的,您的查询也可能有问题。不需要太多困难,我可以想象稍后的重构会再次将查询暴露给sql注入。所以,坚持陈述,除非有令人信服的理由。