亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于Nginx+lua實(shí)現(xiàn)簡單的XSS攻擊攔截

 更新時(shí)間:2024年01月30日 08:47:46   作者:銀空飛羽  
WAF即web應(yīng)用防火墻,Nginx是一個(gè)主流的代理服務(wù),除了本身的Nginx日志,作為用戶肯定也支持對(duì)請(qǐng)求信息進(jìn)行操作,?很多都是通過在代理服務(wù)器上掛載規(guī)則特征,實(shí)現(xiàn)軟件層面的軟WAF進(jìn)行WEB防護(hù),本文主要給大家介紹了Nginx+Lua實(shí)現(xiàn)一個(gè)簡單的XSS攻擊攔截,需要的朋友可以參考下

Lua

關(guān)于Lua,它是一個(gè)腳本語言,因?yàn)樗鼧O其輕量級(jí),所以一般廣泛應(yīng)用于游戲腳本等高性能的領(lǐng)域。Nginx也有專門對(duì)Lua腳本支持的模塊,后續(xù)的軟WAF實(shí)現(xiàn)主要就是依賴于Nginx掛載Lua腳本,關(guān)于Lua的語法比較簡單,可以參考上述文檔,不過多贅述。

Nginx的Lua支持

Nginx本身就是模塊化的,可以針對(duì)模塊進(jìn)行增加修改。那么對(duì)于lua的能力支持,主要就是 ngx_http_lua_module 模塊來提供的。

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

如果發(fā)現(xiàn)不能成功執(zhí)行,這里便用如下命令,手動(dòng)安裝一下擴(kuò)展再試試

sudo apt update
sudo apt install nginx-extras

XSS檢測lua腳本

這里我寫了一個(gè)簡單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

可以看到,我寫了一個(gè)xss的檢測函數(shù)has_xss,當(dāng)然規(guī)則比較簡單。同時(shí)接下來,用了ngx.req.read_body()函數(shù),當(dāng)你需要處理HTTP請(qǐng)求時(shí),必須優(yōu)先調(diào)用該函數(shù),隨后才可以獲取HTTP的請(qǐng)求數(shù)據(jù)。

這里調(diào)用過該函數(shù)后,我取到了uri的參數(shù)數(shù)據(jù),當(dāng)然也可以通過ngx.req.get_post_args()獲取post參數(shù),也可以通過ngx.req.get_body_data()來獲取請(qǐng)求數(shù)據(jù),更多的用法函數(shù)可以參考最上方的文檔進(jìn)行查詢。

最后就是循環(huán)遍歷參數(shù)并執(zhí)行has_xss進(jìn)行判斷,如果發(fā)現(xiàn)命中匹配字符,則返回FORBIDDEN也就是403狀態(tài)碼。

掛載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腳本掛載到根路由下。

同時(shí),因?yàn)樵蹅兌x了攔截返回狀態(tài)碼403,所以希望攔截的時(shí)候能夠返回這個(gè)頁面,先簡單寫個(gè)403頁面 attack_403.html,

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WARNNING</title>
</head>
<body>
<h1>發(fā)現(xiàn)攻擊,已禁止</h1>
</body>
</html>

在nginx.conf中配置上error_page,因?yàn)橹拔乙呀?jīng)設(shè)定了web的全局跟路徑root,所以我直接將attack_403.html文件放到根路徑下也就是home_demo下,路徑為/home/ssremex/home_demo/attack_403.html

nginx相關(guān)配置如下

http {
	...
    server {
            listen 8088; # 更換成自己像監(jiān)聽的端口
            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>")';
            }
    }
	...
}

查看效果

本次我們實(shí)現(xiàn)的是GET請(qǐng)求的xss檢測

nginx -t

通過該命令,測試配置文件沒啥問題。

隨后,重啟nginx服務(wù)

systemctl restart nginx

訪問WEB服務(wù)

一切正常,添加xss參數(shù):http://ip:port/?a=%3Cscript%3E

可以看到直接跳轉(zhuǎn)到403界面,完美實(shí)現(xiàn)一個(gè)簡單的攔截。

到此這篇關(guān)于基于Nginx+lua實(shí)現(xiàn)XSS攻擊攔截的文章就介紹到這了,更多相關(guān)Nginx+lua實(shí)現(xiàn)XSS攻擊攔截內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論