我今天的问题是。我需要在我的脚本中转义 PDO 吗?
$columns = implode(", ",$column);
$query = ''.$query.' '.$columns.' FROM '.$table.'';
$dbh_query = $dbh->prepare($query);
$dbh_query->execute();
$dbh_querys = $dbh_query->fetchAll();
return $dbh_querys;
整个脚本可以在。 https://github.com/joshuahiwat/crud/blob/master/control/query_connector.class.php
谁能解释一下为什么我此时需要逃生或者为什么不需要。
非常感谢您的来信!
最佳答案
查询的动态部分是表名和列名。您不能对查询的这些部分使用绑定(bind)函数。绑定(bind)函数只能用于查询的部分,否则这些部分将是 SQL 查询中的简单值。像数字常量、带引号的字符串或带引号的日期文字。
要避免来自动态表名或列名的 SQL 注入(inject),您有以下选择:
- 使用您类(class)中预定义的值,或者以其他方式确定是安全的。不要使用来自用户或任何其他来源的外部内容。
- 使用转义。请注意,函数
PDO::quote()
不会执行您需要的表名或列名转义。 - 创建已知表名和相应表的列名的“白名单”,并将动态输入与白名单进行比较。如果它与白名单不匹配,则引发错误。
关于php - 转义 pdo 查询,有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282397/