这是防止数据库注入的安全方法吗?

kninwzqo  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(384)

这个问题在这里已经有答案了

如何防止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变量是一个巨大的危险信号。但在这种情况下,它似乎是完全安全的。有什么办法会出错吗?我没看见的东西?

7uzetpgm

7uzetpgm1#

您可能应该在这里使用准备好的语句,php提供了许多实现这一点的api。也就是说,如果以下正则表达式通过:

preg_match("/^[0-9]+$/", $_POST['id_to_clear'])

然后 id_to_clear post值应该只包含数字,在这种情况下,我看不到任何方法可以注入您显示给我们的查询。
但是要小心,因为即使现在和将来事情可能是安全的,您的查询也可能有问题。不需要太多困难,我可以想象稍后的重构会再次将查询暴露给sql注入。所以,坚持陈述,除非有令人信服的理由。

相关问题