欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Lua

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

Nginx的Lua支持

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

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檢測(cè)lua腳本

這里我寫了一個(gè)簡(jiǎn)單XSS檢測(cè),直接上代碼

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的檢測(cè)函數(shù)has_xss,當(dāng)然規(guī)則比較簡(jiǎn)單。同時(shí)接下來(lái),用了ngx.req.read_body()函數(shù),當(dāng)你需要處理HTTP請(qǐng)求時(shí),必須優(yōu)先調(diào)用該函數(shù),隨后才可以獲取HTTP的請(qǐng)求數(shù)據(jù)。

這里調(diào)用過(guò)該函數(shù)后,我取到了uri的參數(shù)數(shù)據(jù),當(dāng)然也可以通過(guò)ngx.req.get_post_args()獲取post參數(shù),也可以通過(guò)ngx.req.get_body_data()來(lái)獲取請(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

打開(kāi)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;
  	}
    ...
  
  }
  ...
}

通過(guò)access_by_lua_file來(lái)使lua腳本掛載到根路由下。

同時(shí),因?yàn)樵蹅兌x了攔截返回狀態(tài)碼403,所以希望攔截的時(shí)候能夠返回這個(gè)頁(yè)面,先簡(jiǎn)單寫個(gè)403頁(yè)面 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)聽(tīng)的端口
            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檢測(cè)

nginx -t

通過(guò)該命令,測(cè)試配置文件沒(méi)啥問(wèn)題。

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

systemctl restart nginx

訪問(wèn)WEB服務(wù)

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

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

到此這篇關(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)論