代码之家  ›  专栏  ›  技术社区  ›  l008com

这是防止数据库注入的安全方法吗[[副本]

  •  -1
  • l008com  · 技术社区  · 6 年前

    我经常使用这样的方法来过滤输入。使用 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 回复  |  直到 6 年前
        1
  •  2
  •   Tim Biegeleisen    6 年前

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

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

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

    但是 当心 ,因为即使事情现在可能是安全的,但在将来,您的查询可能会有问题。不需要太多困难,我可以想象稍后的重构会再次将查询暴露给SQL注入。所以,坚持陈述,除非有令人信服的理由。