OpenResty中的几种防止SQL注入的方法

OpenRestyLua大约 963 字

方法介绍

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)

pgmoonPostgreSQLLua客户端连接池,该方法完成对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

开源案例

https://github.com/fendoudebb/z-blog-openresty

阅读 727 · 发布于 2020-03-10

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看换一批