通過HttpModule實現IP位址遮蔽功能

2021-06-18 15:12:12 字數 2157 閱讀 2246

本文將介紹通過實現ihttpmodule介面,進行判斷和遮蔽ip位址的方法。

(httomodule的基礎知識可以參閱這裡:

閱讀前請先參閱《

細說asp.net的ip位址遮蔽功能設計

首先,新建乙個類,名為ipfilter,繼承自ihttpmodule介面:

實現ihttpmodule介面,並為context物件的acquirerequeststate事件新增事件處理:

(因為我們要用到session,而在早於acquirerequeststate的事件中session還未被初始化。參考於:

事件處理方法:

這裡的主要功能是從session中讀取使用者ip,再從快取中讀取ip位址遮蔽列表,遍歷ip位址遮蔽資料,判斷是否應當遮蔽當前ip,如果判斷為遮蔽,就關閉輸出,讓客戶端無法訪問。

黃色高亮區域:這裡是在判斷session是否為空,其原因是不能保證執行到這裡時session總是存在的,我曾在有非同步訪問的頁面中遇到過這裡報錯的情況,所以這樣處理比較穩妥。

綠色高亮區域:這是在《細說asp.net的ip位址遮蔽功能設計》一文中提供的實體類方法。

藍色高亮區域:輔助方法,其**見下文:

此方法用於獲取ip位址。

此方法用於從資料庫中讀取有效的ip位址遮蔽資料,並將其裝入快取。

快取時間設定為固定3分鐘。

至此,過濾類就實現了。

接下來還需要向web.config檔案中註冊此httpmodule處理程式:

這樣就全部完成了。

遮蔽測試:

新增ip遮蔽資料後3分鐘內(依據快取時間設定),被遮蔽的訪問者繼續瀏覽**就會出現這樣的提示了。

源**:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.web;

using

system.net;

namespace

mysite

else ip = c.session["ip"] as

ipaddress;

if (c.cache["ipfilter"] ==

null) 

更新ip

遮蔽列表快取

();

var l = c.cache["ipfilter"] as

list

<

ip位址遮蔽

>;

foreach (var f in l)

} }

void

更新ip

遮蔽列表快取()

}///

///獲得當前頁面客戶端的ip

///

public

static

string

獲取客戶端

ip位址

ihttpmodule 成員

public

void dispose()

public

#endregion }

}

通過HttpModule實現資料庫防注入

昨天剛把資料庫防注入的原型發了上去,發覺好像還漏了點東西,現在把它全部補上.sql注入是常常被一些菜鳥級黑客高手慣用的手法,就是基於sql的注入實現,防注入程式其實就是處理http請求,把get和post的請求資料中做過濾.通過相應的關鍵字去識別是否有 sql注入攻擊 string sqlstr a...

HttpModule實現使用者身份驗證

本文資源全部來自於園子裡各牛 之前看jimmyzhang的asp.net執行原理,開篇既說要明白驗證就要先看asp.net執行原理,不然用控制項就是 微軟的使用者 了 現在看到這總算反應過來,原來驗證是在httpmodule裡進行的 目前觀點 首先來看一下httpmodule的生命週期 為了證明這個...

Linux通過ifconfig命令檢視IP

eth0 乙太網裝置編號 mtu 位元組數 設定網絡卡的最大傳輸單元 bytes netmask 子網掩碼 設定網絡卡的子網掩碼。掩碼可以是有字首0x的32位十六進製制數,也可以是用點分開的4個十進位制數。網路中每乙個系統必須有相同子網掩碼。broadcast 位址 為指定網絡卡設定廣播協議 txq...