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

时间:2018-12-24 08:27:14

标签: mysql database security sql-injection

通常,我使用类似这样的方法来过滤输入。如图所示,使用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 个答案:

答案 0 :(得分:2)

您可能应该只在此处使用准备好的语句,PHP提供了许多实现此功能的API。话虽如此,如果以下正则表达式通过:

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

然后id_to_clear的POST值应仅包含数字,在这种情况下,我看不到可以注入您向我们显示的查询的任何方式。

但是当心,因为即使现在情况可能安全了,将来您的查询也可能有问题。没有太多困难,我可以想象稍后进行重构,该重构再次将查询公开给SQL注入。因此,请坚持声明,除非有令人信服的理由这样做。