gpt4 book ai didi

php - 安全转义表名/列名

转载 作者:可可西里 更新时间:2023-11-01 07:33:14 29 4
gpt4 key购买 nike

我在 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()
);

或者还有什么途径可以攻击它?

最佳答案

您可以通过询问数据库哪些列对给定的数据库表有效来使用动态白名单。这是一个额外的sql查询,但安全性很好。

select COLUMN_NAME 
from INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = :databaseName
and TABLE_NAME = :tableName

获取结果,然后确保所有动态列名都在结果集中。

我相信 View 包含在 INFORMATION_SCHEMA.COLUMNS 中,因此它应该一切正常。

然后在组装动态 sql 时只需在经过验证的列名周围使用反引号(我假设您使用纯 ascii 列名,否则您可能有其他考虑因素)。

关于php - 安全转义表名/列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12887696/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com