OpenResty 中的几种防止 SQL 注入的方法
OpenResty Lua SQL About 964 words方法介绍
ngx.quote_sql_str
按照MySQL
规则。传入nil
会报错。
ndk.set_var.set_quote_sql_str
调用Nginx
中的C
模板完成对MySQL
的语句转换。传入nil
会报错。
ndk.set_var.set_quote_pgsql_str
调用Nginx
中的C
模板完成对PostgreSQL
的语句转换。传入nil
会报错。
pgmoon:escape_literal(val)
pgmoon
是PostgreSQL
的Lua
客户端连接池,该方法完成对SQL
的语句转换。传入nil
会报错。
封装方法
方法一
使用ndk.set_var.set_quote_pgsql_str
(不同数据库选择对应方法即可),先判断传入的参数是否为空,如果为空则转为字符串null
,在插入或where
条件中可以使用。
function _M.val_escape(val)
if val then
-- 防止SQL注入,OpenResty自带
return ndk.set_var.set_quote_pgsql_str(val)
else
return "null"
end
end
方法二
参考pgmoon:escape_literal
方法,对参数类型分类判断,对字符串进行转义处理。
function _M.val_escape(val)
local type = type(val)
if "string" == type then
return "'" .. tostring((val:gsub("'", "''"))) .. "'"
elseif "number" == type then
return tostring(val)
elseif "boolean" == val then
return val and "TRUE" or "FALSE"
else
return "null"
end
end
开源案例
Views: 6,397 · Posted: 2020-03-10
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...