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

nginx利用lua語言實(shí)現(xiàn)軟waf的示例代碼

 更新時(shí)間:2024年03月04日 11:43:36   作者:475.35  
這篇文章主要介紹了nginx利用lua語言實(shí)現(xiàn)軟waf,文中通過代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下

首先下載nginx的安裝包:

wget http://nginx.org/download/nginx-1.14.0.tar.gz

這里下載的是nginx1.14的包,感覺安裝包太老的話可以去官網(wǎng)下載新的版本:

官網(wǎng)地址:http://nginx.org/

但是我這里測試使用的不是nginx的安裝包,而是使用的淘寶開發(fā)師提供的OpenResty;

其官方網(wǎng)站OpenResty® - Open source我們讀起來是非常的方便。OpenResty是一個(gè)基于Nginx與 Lua 的高性能 Web 平臺(tái),其內(nèi)部集成了大量精良的 Lua 庫、第三方模塊以及大多數(shù)的依賴項(xiàng)。

用于方便地搭建能夠處理超高并發(fā)、擴(kuò)展性極高的動(dòng)態(tài) Web 應(yīng)用、Web 服務(wù)和動(dòng)態(tài)網(wǎng)關(guān)。所以本身OpenResty內(nèi)部就已經(jīng)集成了Nginx和Lua,所以我們使用起來會(huì)更加方便。

下載OpenResty:

wget https://openresty.org/download/openresty-1.19.3.2.tar.gz

解壓縮:

tar -zxvf openresty-1.19.3.2.tar.gz && cd openresty-1.19.3.2

編譯安裝:

./configure && make && make install

進(jìn)入OpenResty的目錄,找到nginx:

cd /usr/local/openresty/nginx/

在conf目錄下的nginx.conf添加如下內(nèi)容:

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

通過瀏覽器訪問測試:

測試nginx沒問題后,就開始本次實(shí)驗(yàn):

利用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()或者ngx.req.get_body_data()來分別獲取post參數(shù)和請(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/gsl/xss_check.lua

打開nginx的配置文件:

/usr/local/openresty/nginx/conf/nginx.conf

在配置文件中添加location:

            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>")';
            }

這里將默認(rèn)的發(fā)布文件目錄修改為/home/gsl,因?yàn)樵谶@里我還有兩個(gè)html文件;

接下來那就是要編寫html文件了:

第一個(gè)是發(fā)現(xiàn)uri不正確/檢測到有問題的,需要提醒被攻擊,這個(gè)html文件的路徑為:

/home/gsl/attack_403.html

html代碼如下:

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

另外一個(gè)就是如果檢測到正確就訪問index文件:

路徑為:/home/gsl/index.html

html代碼如下(我這里為了測試找了一個(gè)簡單的代替):

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>我的網(wǎng)頁</title>
</head>
<body>
    <h1>這是標(biāo)題</h1>
    <p>這是段落。</p>
 
    <!-- 在此處添加其他內(nèi)容 -->
 
</body>
</html>

nginx.conf的配置文件也像上邊一樣配置完成,那么這時(shí)就可以使用Nginx命令來檢測一下nginx的語法是否正確,并且重新加載一下配置文件:

我這里是編譯安裝的nginx,并且也沒有將nginx的可執(zhí)行文件配置在/usr/sbin(已經(jīng)配置的環(huán)境變量)目錄下,所以我需要進(jìn)入:/usr/local/openresty/nginx/sbin下執(zhí)行命令

./nginx -t

nginx -s reload

然后正常訪問一下:

添加xss參數(shù)模擬一下錯(cuò)誤:

http://ip:port/?a=%3Cscript%3E

已經(jīng)被檢測到;

OK,本次實(shí)驗(yàn)結(jié)束;

以上就是nginx利用lua語言實(shí)現(xiàn)軟waf的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于nginx lua實(shí)現(xiàn)軟waf的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Nginx跨域訪問配置方式(Web反向代理跨域訪問配置)

    Nginx跨域訪問配置方式(Web反向代理跨域訪問配置)

    這篇文章主要介紹了Nginx跨域訪問配置方式(Web反向代理跨域訪問配置),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Nginx Rewrite使用場景及配置方法解析

    Nginx Rewrite使用場景及配置方法解析

    這篇文章主要介紹了Nginx Rewrite使用場景及配置方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Nginx配置使用詳解

    Nginx配置使用詳解

    Nginx是一個(gè)高性能的HTTP和反向代理web服務(wù)器。本文詳細(xì)講解了Nginx配置使用的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • nginx反向代理60s超時(shí)報(bào)錯(cuò)問題解決

    nginx反向代理60s超時(shí)報(bào)錯(cuò)問題解決

    本文主要介紹了Nginx反向代理時(shí)遇到60秒超時(shí)報(bào)錯(cuò)的問題,經(jīng)過排查發(fā)現(xiàn)是由于代理服務(wù)執(zhí)行時(shí)間過長導(dǎo)致的,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • shell腳本實(shí)戰(zhàn)之部署nginx腳本實(shí)例

    shell腳本實(shí)戰(zhàn)之部署nginx腳本實(shí)例

    最近自己編寫的Linux一鍵部署腳本,可以一鍵部署Nginx,分享給大家,這篇文章主要給大家介紹了關(guān)于shell腳本實(shí)戰(zhàn)之部署nginx腳本的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 教你如何快速搭建和配置 Nginx 服務(wù)器

    教你如何快速搭建和配置 Nginx 服務(wù)器

    Nginx 是一個(gè)高性能的 HTTP 和反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器,本文將詳細(xì)介紹如何在 Linux 上安裝、配置和管理 Nginx 服務(wù)器,感興趣的朋友一起看看吧
    2024-07-07
  • Nginx部署https網(wǎng)站并配置地址重寫的步驟詳解

    Nginx部署https網(wǎng)站并配置地址重寫的步驟詳解

    今天小編就為大家分享一篇關(guān)于Nginx部署https網(wǎng)站并配置地址重寫的步驟詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Nginx代理導(dǎo)致請(qǐng)求頭某些內(nèi)容丟失的問題解決

    Nginx代理導(dǎo)致請(qǐng)求頭某些內(nèi)容丟失的問題解決

    本文主要介紹了在使用NGINX代理時(shí)請(qǐng)求頭中的下劃線被自動(dòng)忽略的問題,通過兩種方法解決了這個(gè)問題,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • nginx全局塊的user指令的實(shí)現(xiàn)示例

    nginx全局塊的user指令的實(shí)現(xiàn)示例

    user用于配置運(yùn)行Nginx服務(wù)器的worker進(jìn)程的用戶和用戶組,本文主要介紹了nginx全局塊的user指令的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • ubuntu中如何使用nginx監(jiān)聽80端口進(jìn)行轉(zhuǎn)發(fā)

    ubuntu中如何使用nginx監(jiān)聽80端口進(jìn)行轉(zhuǎn)發(fā)

    這篇文章主要介紹了ubuntu中如何使用nginx監(jiān)聽80端口進(jìn)行轉(zhuǎn)發(fā)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評(píng)論