本文將介紹通過實現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...