最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2024年01月30日 08:47:46   作者:銀空飛羽  
WAF即web應(yīng)用防火墻,Nginx是一個(gè)主流的代理服務(wù),除了本身的Nginx日志,作為用戶肯定也支持對請求信息進(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其輕量級,所以一般廣泛應(yīng)用于游戲腳本等高性能的領(lǐng)域。Nginx也有專門對Lua腳本支持的模塊,后續(xù)的軟WAF實(shí)現(xiàn)主要就是依賴于Nginx掛載Lua腳本,關(guān)于Lua的語法比較簡單,可以參考上述文檔,不過多贅述。

Nginx的Lua支持

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

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

如果發(fā)現(xiàn)不能成功執(zhí)行,這里便用如下命令,手動安裝一下擴(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請求時(shí),必須優(yōu)先調(diào)用該函數(shù),隨后才可以獲取HTTP的請求數(shù)據(jù)。

這里調(diào)用過該函數(shù)后,我取到了uri的參數(shù)數(shù)據(jù),當(dāng)然也可以通過ngx.req.get_post_args()獲取post參數(shù),也可以通過ngx.req.get_body_data()來獲取請求數(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請求的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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx使用反向代理實(shí)現(xiàn)負(fù)載均衡過程解析

    Nginx使用反向代理實(shí)現(xiàn)負(fù)載均衡過程解析

    這篇文章主要介紹了Nginx使用反向代理實(shí)現(xiàn)負(fù)載均衡過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Windows下Nginx的啟動停止等基本操作命令詳解

    Windows下Nginx的啟動停止等基本操作命令詳解

    在Windows下使用Nginx,我們需要掌握一些基本的操作命令,今天為大家分享幾個(gè)Windows下操作Nginx的基本命令
    2018-10-10
  • 詳解Nginx 利用代理轉(zhuǎn)發(fā)請求示例

    詳解Nginx 利用代理轉(zhuǎn)發(fā)請求示例

    這篇文章主要介紹了詳解Nginx 利用代理轉(zhuǎn)發(fā)請求示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Nginx常用技巧使用實(shí)例匯總

    Nginx常用技巧使用實(shí)例匯總

    這篇文章主要介紹了Nginx常用技巧使用實(shí)例匯總,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Nginx中l(wèi)ocation實(shí)現(xiàn)多條件匹配的方法詳解

    Nginx中l(wèi)ocation實(shí)現(xiàn)多條件匹配的方法詳解

    在 Nginx 中,location 指令用于匹配請求的 URI,雖然 location 本身是基于單一匹配規(guī)則的,但可以通過多種方式實(shí)現(xiàn)多個(gè)條件的匹配邏輯,下面小編就來為大家介紹一下具體實(shí)現(xiàn)方法吧
    2025-03-03
  • Nginx狀態(tài)監(jiān)控以及日志分析詳解

    Nginx狀態(tài)監(jiān)控以及日志分析詳解

    這篇文章主要給大家介紹了關(guān)于Nginx狀態(tài)監(jiān)控以及日志分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • nginx中return和rewrite指令同時(shí)存在先執(zhí)行順序哪個(gè)

    nginx中return和rewrite指令同時(shí)存在先執(zhí)行順序哪個(gè)

    在Nginx配置中,當(dāng)return和rewrite指令同時(shí)存在,其執(zhí)行順序取決于配置的具體場景,這篇文章主要介紹了nginx中return和rewrite指令同時(shí)存在先執(zhí)行順序哪個(gè),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • nginx容器配置文件獨(dú)立的實(shí)現(xiàn)

    nginx容器配置文件獨(dú)立的實(shí)現(xiàn)

    本文主要介紹了nginx容器配置文件獨(dú)立,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 詳解Nginx 靜態(tài)文件服務(wù)配置及優(yōu)化

    詳解Nginx 靜態(tài)文件服務(wù)配置及優(yōu)化

    這篇文章主要介紹了Nginx 靜態(tài)文件服務(wù)配置及優(yōu)化,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • Nginx 壓縮(gzip、gunzip、gzip_static、send_file)的實(shí)現(xiàn)

    Nginx 壓縮(gzip、gunzip、gzip_static、send_file)的實(shí)現(xiàn)

    在Web應(yīng)用開發(fā)中,優(yōu)化網(wǎng)站速度是一個(gè)非常重要的工作,本文主要介紹了Nginx 壓縮(gzip、gunzip、gzip_static、send_file)的實(shí)現(xiàn),感興趣的可以了解一下
    2024-09-09

最新評論

清新县| 繁峙县| 南华县| 华坪县| 裕民县| 北安市| 措美县| 滁州市| 杂多县| 安宁市| 兰溪市| 荥经县| 汉沽区| 嘉荫县| 来凤县| 溧水县| 赣榆县| 南靖县| 册亨县| 邵东县| 舞钢市| 玛曲县| 盐边县| 牟定县| 岳池县| 广汉市| 桂平市| 永靖县| 安乡县| 安远县| 海盐县| 同仁县| 和龙市| 泌阳县| 新巴尔虎左旗| 镶黄旗| 合江县| 额尔古纳市| 蚌埠市| 崇信县| 平江县|