在Prosody Lua模块中对SQL输入进行清洗处理。

我想让 Prosody 从我的 mysql 数据库中读取用户名和密码。 Prosody 提供了一个模块,我想编辑这个模块,可以从 SQL 数据库获取这些信息。

我的问题是:这个 Lua 代码是如何防止 SQL 注入攻击的?我在 Lua 代码中找不到任何输入过滤器。

点赞
用户298029
用户298029

它使用预处理语句。SQL 包含参数的占位符,参数被单独给出:

getsql("SELECT `password` FROM `authreg` WHERE `username`=? AND `realm`=?", username, module.host);

然后将语句和参数发送到数据库:

local stmt, err = connection:prepare(sql);
local ok, err = stmt:execute(...);

因为参数是分开发送的,所以不存在 SQL 注入风险。只有第一个参数中的 SQL 被视为 SQL。其他参数仅视为数据。

2015-01-29 08:29:52