82人参与 • 2025-07-14 • MsSqlserver
1. 下载程序
cd /opt wget https://github.com/luajit/luajit/archive/refs/tags/v2.0.5.tar.gz -o luajit-v2.0.5.tar.gz wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.4.tar.gz -o ngx_devel_kit-0.3.4.tar.gz wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz -o lua-nginx-module-0.10.9rc7.tar.gz wget http://nginx.org/download/nginx-1.19.3.tar.gz -o nginx-1.19.3.tar.gz
2. 逐项解压
tar -xzvf luajit-v2.0.5.tar.gz tar -xzvf ngx_devel_kit-0.3.4.tar.gz tar -xzvf lua-nginx-module-0.10.9rc7.tar.gz tar -xzvf nginx-1.19.3.tar.gz
1. 安装lua环境
cd /opt/luajit-2.0.5/ make && make install export luajit_lib=/usr/local/lib export luajit_inc=/usr/local/include/luajit-2.0 echo "/usr/local/lib" >> /etc/ld.so.conf ldconfig
2. 安装nginx,需要包含nginx lua模块
cd /opt/nginx-1.19.3 ./configure --prefix=/usr/local/nginx \ --add-module=/opt/ngx_devel_kit-0.3.4 \ --add-module=/opt/lua-nginx-module-0.10.9rc7 make && make install
1. 下载lua防火墙代码
cd /usr/local/nginx/conf git clone https://github.com/loveshell/ngx_lua_waf.git
2. 加载lua防火墙配置,vi /usr/local/nginx/conf/nginx.conf,http中加入以下红色部分配置
http {
# 其它配置
...
lua_package_path "/usr/local/nginx/conf/ngx_lua_waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /usr/local/nginx/conf/ngx_lua_waf/init.lua;
access_by_lua_file /usr/local/nginx/conf/ngx_lua_waf/waf.lua;
}
3. 修改防火墙配置rulepath值,vi /usr/local/nginx/conf/ngx_lua_waf/config.lua
# 默认值是`/usr/local/nginx/conf/waf/wafconf/` /waf 改为 /ngx_lua_waf rulepath = "/usr/local/nginx/conf/ngx_lua_waf/wafconf/"
4. 启动nginx
/usr/local/nginx/sbin/nginx
1. 测试url中的关键字,出现拦截页面表示配置成功, 拦截参数在/usr/local/nginx/conf/ngx_lua_waf/wafconf/url文件



2. 测试post关键字



1. 前端演示页面
<html>
<head>
<title>登陆</title>
<meta charset="utf-8">
</head>
<body>
<div>
用户名:<input type="text" name="user" id="txtuser"><br>
密码:<input type="password" name="pwd" id="txtpassword"><br>
<input type="button" onclick="login('login')" value="登陆"> <br>
<div id="divmsg"></div>
<script>
function login(action) {
var httprequest = new xmlhttprequest()
httprequest.onreadystatechange = function () {
if (httprequest.readystate == 4) {
document.getelementbyid("divmsg").innertext = httprequest.responsetext
}
}
httprequest.open('post', `/api/${action}`, true)
httprequest.setrequestheader(
'content-type',
'application/x-www-form-urlencoded'
)
var user = document.getelementbyid("txtuser").value
var pwd = document.getelementbyid("txtpassword").value
var str = `username=${user}&password=${pwd}`
httprequest.send(str)
}
</script>
</div>
</body>
</html>2. 服务端演示代码,模拟sql注入
@autowired
jdbctemplate jdbctemplate;
/**
* 拼sql查询
*
* @param user
* @return
*/
@postmapping("/login")
public string login(user user) {
string sql = "select * from sys_user where user_name = '" + user.getusername() + "' and pass_word = '" + user.getpassword() + "'";
system.out.println("sql:");
system.out.println(sql);
list<map<string, object>> maps = jdbctemplate.queryforlist(sql);
system.out.println(maps.size());
if (maps.size() > 0) {
return"login success";
} else {
return"login fail";
}
}3. nginx代理设置
location /api/ {
proxy_set_header host $http_host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header remote-host $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_pass http://192.168.1.18:8093/;
}4. 配置拦截参数(lua防火墙通过检测post表单中的关键字实现拦截)。
# 设置sql注入的关键参数 echo "'\s+or\s+" >> /usr/local/nginx/conf/ngx_lua_waf/wafconf/post # 重新加载,使配置生效 /usr/local/nginx/sbin/nginx -s reload

1. 正常登陆

2. 注入成功,在配置post拦截参数以前的效果

3. 注入被拦截,在配置post拦截参数以后的效果

到此这篇关于nginx lua防火墙防sql注入配置的文章就介绍到这了,更多相关nginx lua防止sql注入内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论