【发布时间】:2012-10-04 23:00:57
【问题描述】:
我在 php 中使用 PDO,因此无法使用准备好的语句转义表名或列名。以下是我自己实现它的万无一失的方法吗:
$tn = str_replace('`', '', $_REQUEST['tn']);
$column = str_replace('`', '', $_REQUEST['column']);
$sql = "SELECT * FROM `tn ` WHERE `column` = 23";
print_r(
$pdo->query($sql)->fetchAll()
);
或者还有一些可以攻击的途径?
【问题讨论】:
-
@Petah 我需要在添加更多表后能够使用这个类,而不必不断更新白名单
-
向数据库询问有效列名的列表,如果每个请求的两个查询存在问题,则缓存它们。如果你允许用户输入列名,你可能需要改变你的数据库设计。
标签: php mysql sql security pdo