我想从我的mysql数据库中读取用户名和密码。 Prosody提供了一个我想编辑的module,可以从sql数据库中获取这些信息。
我的问题是:这个lua代码如何阻止sql注入?我在lua代码中找不到任何输入消毒剂。
答案 0 :(得分:1)
它使用prepared statements。 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注入的风险并不相同。只有getsql
的第一个参数中的sql被视为sql。其他参数仅作为数据处理。