我们可以使用 OOPS 概念在直接查询中使用变量值吗?- SQL 注入 [重复]

Can we use variable value in direct query using OOPS concept ? - SQL Injection [duplicate]

提问人:Vishal Rana 提问时间:2/15/2023 最后编辑:Your Common SenseVishal Rana 更新时间:2/15/2023 访问量:44

问:

我正在使用 PHP PDO oops 概念创建一个网站。对于喜欢 - 我想计算不同列的列数。我在一个类中创建了一个函数。我遵循所有步骤来保护数据(SQL注入)。 我的函数 -

public function count_by_id($table,$col,$val)
{ 
 $table=$this->sanitize($table,'string');
 $col=$this->sanitize($col,'string');
$val=$this->sanitize($val,'string');
 $sql= "SELECT count(*) FROM $table WHERE $col=:val"; 
     $stmt = $this->dbConnection->prepare($sql);
     $stmt->bindParam(':val', $val, PDO::PARAM_STR);
    $stmt->execute();
        $number_of_rows = $stmt->fetchColumn(); 
        return $number_of_rows;  
}

$table 是一个静态变量,不会更改任何值。我只将它用于表名,也用于列名。最终用户不会更改表和列值。最终用户将只更改$val值,我已使用准备好的语句绑定了该值。

Like - 调用函数 -

  count_by_id('users','username',$username); 

用户和用户名不会改变,但$username会改变,我已经绑定了它。SQL注入有什么原因吗?我没有从表单中获取表名和列名。 我可以将它用于不同的表和列,如下所示-

 count_by_id('posts','slug',$slug);

我完全感到困惑,因为许多程序员都像我一样,许多人说这可能是SQL注入的原因。 您对此有何看法?

php mysql pdo sql 注入

评论

0赞 Your Common Sense 2/15/2023
伙计,我为您提供了解决这个问题的完美解决方案。你为什么不直接使用它呢?我什至费心为你写了这个函数。请参阅 ?Find by column: found
0赞 Vishal Rana 2/15/2023
我已经检查了这两个问题,但我的问题不同。请删除重复的问题标签。
1赞 Your Common Sense 2/15/2023
你的问题并不是什么新鲜事。我已经告诉过你,将一个不受保护的变量直接添加到 SQL 字符串中就是所谓的 SQL 注入。没有一个程序员会告诉你。你的清理功能是无稽之谈,它什么也保护不了,只会破坏你的数据。重复的答案也是如此
1赞 deceze 2/15/2023
只要您确定并且永远只能是控制的值,并且永远不会意外地成为用户输入:是的。因此,请参阅上面链接的第二个副本:stackoverflow.com/q/182287/476$this->table$fieldName
1赞 Vishal Rana 2/15/2023
好的,谢谢@YourCommonSense。我一定会尝试这种类型的结构。

答: 暂无答案