基于Nginx+lua实现简单的XSS攻击拦截

 更新时间:2024年01月30日 08:47:46   作者:银空飞羽  
WAF即web应用防火墙,Nginx是一个主流的代理服务,除了本身的Nginx日志,作为用户肯定也支持对请求信息进行操作, 很多都是通过在代理服务器上挂载规则特征,实现软件层面的软WAF进行WEB防护,本文主要给大家介绍了Nginx+Lua实现一个简单的XSS攻击拦截,需要的朋友可以参考下

Lua

关于Lua,它是一个脚本语言,因为它极其轻量级,所以一般广泛应用于游戏脚本等高性能的领域。Nginx也有专门对Lua脚本支持的模块,后续的软WAF实现主要就是依赖于Nginx挂载Lua脚本,关于Lua的语法比较简单,可以参考上述文档,不过多赘述。

Nginx的Lua支持

Nginx本身就是模块化的,可以针对模块进行增加修改。那么对于lua的能力支持,主要就是 ngx_http_lua_module 模块来提供的。

location /lua {
	default_type "text/html";
	content_by_lua 'ngx.say("<h1>hello world</h1>")';
}

如果发现不能成功执行,这里便用如下命令,手动安装一下扩展再试试

sudo apt update
sudo apt install nginx-extras

XSS检测lua脚本

这里我写了一个简单XSS检测,直接上代码

local function has_xss(payload)
    if payload and type(payload) == "string" then
        if string.find(payload, "<script>") or string.find(payload, "javascript:") or string.find(payload, "onerror=") then
            return true
        end
    end
    return false
end


ngx.req.read_body()
local args = ngx.req.get_uri_args()

for key, val in pairs(args) do
    if has_xss(val) then
        ngx.exit(ngx.HTTP_FORBIDDEN)
    end
end

可以看到,我写了一个xss的检测函数has_xss,当然规则比较简单。同时接下来,用了ngx.req.read_body()函数,当你需要处理HTTP请求时,必须优先调用该函数,随后才可以获取HTTP的请求数据。

这里调用过该函数后,我取到了uri的参数数据,当然也可以通过ngx.req.get_post_args()获取post参数,也可以通过ngx.req.get_body_data()来获取请求数据,更多的用法函数可以参考最上方的文档进行查询。

最后就是循环遍历参数并执行has_xss进行判断,如果发现命中匹配字符,则返回FORBIDDEN也就是403状态码。

挂载Lua

这里我的lua脚本路径为:/home/ssremex/nginx_lua/xss_check.lua

打开nginx的配置文件 /etc/nginx/nginx.conf

http{
	...
  server {
    ...
		location / {
    	access_by_lua_file /home/ssremex/nginx_lua/xss_check.lua;
			try_files $uri $uri/ /index.html;
  	}
    ...
  
  }
  ...
}

通过access_by_lua_file来使lua脚本挂载到根路由下。

同时,因为咱们定义了拦截返回状态码403,所以希望拦截的时候能够返回这个页面,先简单写个403页面 attack_403.html,

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WARNNING</title>
</head>
<body>
<h1>发现攻击,已禁止</h1>
</body>
</html>

在nginx.conf中配置上error_page,因为之前我已经设定了web的全局跟路径root,所以我直接将attack_403.html文件放到根路径下也就是home_demo下,路径为/home/ssremex/home_demo/attack_403.html

nginx相关配置如下

http {
	...
    server {
            listen 8088; # 更换成自己像监听的端口
            server_name 0.0.0.0;
            root /home/ssremex/home_demo;

            error_page 403 /attack_403;
            location = /attack_403 { 
                    try_files $uri $uri/ /attack_403.html;
                    internal;
            }

            location / {
                    access_by_lua_file /home/ssremex/nginx_lua/xss_check.lua;
                    try_files $uri $uri/ /index.html;
            }
            location /lua {
                    default_type "text/html";
                    content_by_lua 'ngx.say("<h1>hello world</h1>")';
            }
    }
	...
}

查看效果

本次我们实现的是GET请求的xss检测

nginx -t

通过该命令,测试配置文件没啥问题。

随后,重启nginx服务

systemctl restart nginx

访问WEB服务

一切正常,添加xss参数:http://ip:port/?a=%3Cscript%3E

可以看到直接跳转到403界面,完美实现一个简单的拦截。

到此这篇关于基于Nginx+lua实现XSS攻击拦截的文章就介绍到这了,更多相关Nginx+lua实现XSS攻击拦截内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nginx-ingress-controller部署配置详解

    nginx-ingress-controller部署配置详解

    这篇文章主要为大家介绍了nginx ingress controller的部署配置,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 使用nginx设置代理服务器

    使用nginx设置代理服务器

    今天小编就为大家分享一篇关于使用nginx设置代理服务器,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Mac环境Nginx配置和访问本地静态资源的实现

    Mac环境Nginx配置和访问本地静态资源的实现

    这篇文章主要介绍了Mac环境Nginx配置和访问本地静态资源的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 基于Nginx 反向代理获取真实IP的问题详解

    基于Nginx 反向代理获取真实IP的问题详解

    下面小编就为大家分享一篇基于Nginx 反向代理获取真实IP的问题详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • 访问nginx显示未找到站点的问题分析及解决方案

    访问nginx显示未找到站点的问题分析及解决方案

    当我们在安装好nginx准备访问80端口时,突然出现您的请求在Web服务器中没有找到对应的站点,所以本文给大家介绍了访问nginx显示未找到站点的问题分析及解决方案,需要的朋友可以参考下
    2024-03-03
  • LNMP 解决Access Denied错误详细介绍

    LNMP 解决Access Denied错误详细介绍

    这篇文章主要介绍了LNMP 解决Access Denied错误详细介绍的相关资料,需要的朋友可以参考下
    2016-10-10
  • 利用Nginx反向代理解决跨域问题详解

    利用Nginx反向代理解决跨域问题详解

    这篇文章主要介绍了利用Nginx反向代理解决跨域问题详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Nginx配置并兼容HTTP实现代码解析

    Nginx配置并兼容HTTP实现代码解析

    这篇文章主要介绍了Nginx配置并兼容HTTP实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • nginx反向代理踩坑实战记录(容器方式)

    nginx反向代理踩坑实战记录(容器方式)

    Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,下面这篇文章主要给大家介绍了关于nginx反向代理踩坑(容器方式)的相关资料,需要的朋友可以参考下
    2022-04-04
  • nginx 502、413和404错误原因排查和解决办法总结

    nginx 502、413和404错误原因排查和解决办法总结

    这篇文章主要给大家介绍了NGINX 502错误排查,办法总结,Nginx 413错误的排查以及Nginx 400错误排查,文中通过代码示例给出了详细的排查方法和解决方案,需要的朋友可以参考下
    2023-12-12

最新评论