我刚接触数据库,并且正在尝试为我的数据库编写自己的处理程序。我有一个PHP文件,其中包含一个带有变量和函数的类来处理它。然后将此文件导入到需要以任何方式访问数据库的项目。在项目中,数据处理程序作为对象创建,然后设置变量以告知对象服务器名称,用户,密码和数据库名称。一旦定义了该数据,就可以使用所有必要的数据调用函数来构建查询,包括表名等。
我最初尝试将所有数据作为参数插入IE:
$stm = $pdo->prepare("UPDATE ? SET ? = ? WHERE ? = ?");
然而,这不起作用所以我最终得到了这个:
$stm = $pdo->prepare("UPDATE $table SET $records = ? WHERE $compare = ?");
我处理$ table,$ records和$ compare变量,因此它们只包含字母数字字符,下划线和逗号。此外,我已将此文件设置为只有服务器可以访问它的位置。我知道准备好的声明的全部目的是防止用户输入输入查询字符串来对抗注入,这是否被认为是安全的做法?凭借我已经拥有的编程知识,这似乎是合理的。这些函数在一个类中,因此攻击者不应该只调用我的包含文件并运行自己的输入。数据从服务器端PHP脚本发送到此文件,用户绝不会以任何方式触及。
这被认为是安全的做法吗?或者为了保护这一点,我还需要做些什么,或者只是将它们全部废弃?
澄清:在本文中:(Can PHP PDO Statements accept the table or column name as parameter?)它指出将表和列列入白名单的原因是为了防止用户输入自己的数据。据我所知,我已经做到了。我看到用户能够这样做的唯一方法是让他们将脚本上传到我的服务器以访问它,或者他们的服务器将无权访问该文件。最重要的是,保存此编码的文件上没有服务器或数据库信息(即:没有用户名,密码或数据库名称)。我看到它的方式,如果他们能够使用这个脚本,他们已经完全访问我的服务器,我有更大的顾虑。