gpt4 book ai didi

php - ctype_alnum 对抗 SQL 注入(inject)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:08:24 26 4
gpt4 key购买 nike

准备好的语句不允许参数化表名。为了确保无法插入任何代码,我想使用 ctype_alnum 来验证进入数据库模块的所有表名(删除下划线后),以保护应用程序免受其他部分错误的影响。

function insert($table) {
if(!ctype_alnum(str_replace("_", "", $table)))
throw new Exception("Invalid table name");
$sql = "INSERT INTO $table VALUES value=:value";
#... prepare and execute
}

是否存在这不足以抵御的攻击?我在想例如multibyte character exploits

最佳答案

我不知道在这种情况下会发生什么攻击,但我不会像你那样做,因为 $table 也可以包含可能不存在的表。

你应该有你接受的 $tables 的白名单,所以我宁愿这样做:

function insert($table)
{
$table = trim($table);

if (!ctype_alnum(str_replace("_", "", $table))
|| !in_array($table, $this->tables)
) {
throw new Exception("Invalid table name");
}


$sql = "INSERT INTO $table VALUES value=:value";

echo $sql;
#... prepare and execute
}

它将确保您的代码安全,如果有人拼错了表名,您甚至不会尝试执行代码。事实上,在这种情况下,您可以在检查值是否存在于白名单数组中时从条件中删除 ctype_alnum

关于php - ctype_alnum 对抗 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25747875/

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