ASP.NET網站限制訪問頻率
最近做了一個免費發簡訊的小網站(http://freesms.cloudapp.net/),但發現最近有人破解了我的驗證碼,以每3秒/條的速度用我的簡訊服務來發他的廣告。更換驗證碼程式和過濾關鍵字只是治標不治本的方法,為了徹底阻止此類事件的發生,我們還是來看一下怎樣通過優化程式來實現。
其實同樣的程式除了防止別人濫發請求以外,還對預防拒絕服務(DoS)攻擊同樣適用哦。不妨來看看。
基本目標:限制同一IP訪問網站的頻率。比如,我們限制為每240分鐘來自同一IP的使用者最多隻能夠訪問首頁40次、其他頁面200次。
比如您現在可以開啟http://freesms.cloudapp.net/
基本思想:
-
- 用HttpContext.Cache記錄訪問次數
- 將IP值與使用者訪問方式作為共同的Key,可以對使用者的不同訪問方式做不同的限制。
- 超出限額時呼叫Response.End()。
具體程式碼:
一、 定義持續時間
在本例中,我們使用240分鐘作為一次限制的時間。
-
private const int DURATION = 240
二、定義訪問方式列舉
針對不同的訪問方式進行不同的限制。在本例中,我們只區分兩種訪問方式:正常訪問與PostBack。在正常應用中,您還可以根據需要增加訪問不同頁面的限制。
public enum ActionTypeEnum { Normal=40, Postback=100 }
三、判斷邏輯
-
-
- 在某IP第一次採用某種訪問方式進行訪問時,增加Cache的Key=訪問方式+IP,返回True
- 如果Key已經存在,增加訪問次數,返回True
- 如果超出次數,返回False
-
public static bool IsValid(ActionTypeEnum actionType) { HttpContextcontext = HttpContext.Current; if (context.Request.Browser.Crawler) return false; string key = actionType.ToString() + context.Request.UserHostAddress; int hit = (Int32)(context.Cache[key] ?? 0); if (hit > (Int32)actionType) return false; else hit++; if (hit == 1) { context.Cache.Add(key, hit, null, DateTime.Now.AddMinutes(DURATION), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null); } else { context.Cache[key] = hit; } return true; }
四、在頁面中呼叫
判斷函式需要在頁面的OnInit方法中呼叫。在這裡需要使用一些自己定義的邏輯,來進行不同訪問方式的判斷。下面的例子是一個最簡單的,只區分正常訪問與Postback。
protected override void OnInit(EventArgs e) { base.OnInit(e); if (!IsPostBack) { if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.Normal)) { Response.Write("您傳送得太頻繁,被系統判斷為廣告。廣告或其他定製業務請聯絡郵箱[email protected],謝謝。- http://freesms.cloudapp.net"); Response.End(); } } else { if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.Postback)) { Response.Write("您傳送得太頻繁,被系統判斷為廣告。廣告或其他定製業務請聯絡郵箱[email protected],謝謝。- http://freesms.cloudapp.net"); Response.End(); } } }PS: 敵人總是狡詐的 ,後來我又發現那個人通過使用代理來變換IP ,繼續通過我的服務傳送廣告。這就要繼續優化程式了,比如把廣告內容的md5也作為key記錄下來。也許您也一樣,需要面對各種各樣的“敵情”。呵呵,希望本文對您有所幫助!
相關推薦
ASP.NET網站限制訪問頻率
最近做了一個免費發簡訊的小網站(http://freesms.cloudapp.net/),但發現最近有人破解了我的驗證碼,以每3秒/條的速度用我的簡訊服務來發他的廣告。更換驗證碼程式和過濾關鍵字只是治標不治本的方法,為了徹底阻止此類事件的發生,我們還是來看一下怎
asp.net 網站訪問變慢
asp.net 網站,開機一會,就會變的很慢,甚至根本不動象宕機一樣,後來發現象如下處理 : 將程式池設定500秒回收一次, 就可以了 以下是引用別人的資料 減少應用程式池回收時間。預設為:1740。。可設為120(每2小時)iis(微軟的WEB伺服器平臺)假死的原因:
如何把asp.net網站釋出到自己的電腦,外網也可以訪問
IIS元件安裝 把自己寫好的asp.net網站釋出到IIS上面 測試內網下是否可以訪問 配置路由器的埠對映 測試外網下是否也可以訪問 IIS元件安裝 第一步 進入控制面板–>程式–>啟用和關閉windows功能 選擇劃線的部分,勾選的
在外網通過伺服器公網IP訪問IIS釋出ASP.NET網站
在把網站部署在伺服器的IIS上以後,我就開始瀏覽我的網站了。如果不會部署,可以看我ASP.NET MVC網站部署在阿里雲伺服器(WindowsServers2012+IIS6.0環境)。 在我的預想中當然是一帆風順了,這種情況在理想中總是豐滿的,但是在我寫程式
Apache服務器部署ASP.NET網站
apache服務 tle 資源 服務 art asp sina com tar 資源羅列: apache如何支持asp.net 用 Apache 發布 ASP.NET 網站 Apache服務器部署ASP.NET網站
asp.net 網站開發常用方法
.sh sql 進行 構造 file rep ria output sender 生成驗證碼: using System; using System.Data; using System.Configuration; using System.Collections
asp.net -mvc框架復習(1)-ASP.NET網站開發概述
頁面設計 對象 ado 數據庫開發 sqlserve 網站 rip ado.net 面向對象 1.網站開發的基本步驟: 2.網站開發的需要的知識結構 (1)網站開發前臺頁面技術 頁面設計:HTML 、CSS+DIV 頁面特效:JavaScript、jQery (2)
IIS部署ASP.NET網站後提示只有在配置文件或 Page 指令中將 enableSessionState 設置為 true 時,才能使用會話狀態...
text 效果 handlers 用戶空間 ren 分享 tpc out 調試 今天,在IIS上部署網站後,出現了下面錯誤: 只有在配置文件或 Page 指令中將 enableSessionState 設置為 true 時,才能使用會話狀態。還請確保在應用程序配置的 <
RestFramework自定制之認證、權限、限制訪問頻率
[1] eal val def app http asi col basic 認證 所謂認證就是檢測用戶登陸與否,通常與權限對應使用。網站中都是通過用戶登錄後由該用戶相應的角色認證以給予對應的權限。 自定制認證規則的重點是繼承內置的BaseAuthenticatio
Django Restful Framework【第三篇】認證、權限、限制訪問頻率
authent per ted inf png ip限制 users -a python 一、認證 認證請求頭 views.py #!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views
VS2010 Chart控件(一)Chart控件在ASP.NET網站中的應用示例詳解(C#語言)
[1] 設置 cti write conf int 應用程序 itl config 步驟如下: 1、 Chart控件(一)Chart控件在ASP.NET網站中的應用示例詳解(C#語言)" title="VS2010 Chart控件(一)Chart控件在ASP.NET網站中的
asp.net 網站監控方案
imu methods 分享圖片 idt color ase tab 一個 jpg 前言:監控web網站方法有很多種,這篇文章說一下對windows服務器 asp.net網站的監控 采用的方案,Powershell + Influxdb + Grafana 1、P
asp.net網站性能優化
技術分享 ima 請求 asp.net wid htm 圖片緩存 asp pre 前端: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"&
ASP.NET中 C#訪問資料庫用三種方式顯示資料表
第一種方式:使用DataReader從資料庫中每次提取一條資料,用迴圈遍歷表 下面是我寫的一個例子: &nbs
Django rest framework 限制訪問頻率(原始碼分析三)
基於 當用發出請求時 首先執行dispatch函式,當執行當第二部時: #2.處理版本資訊 處理認證資訊 處理許可權資訊 對使用者的訪問頻率進行限制 self.initial(request, *args, **kwargs)
asp.net網站部署問題
500.21:管理員cmd下重新註冊: %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i 500.19: 管理員cmd下: 取消handlers鎖定: %windir%\system32\inetsrv\appcmd un
不修改程式碼就能優化ASP.NET網站效能的一些方法
目錄 配置OutputCache 啟用內容過期 解決資原始檔升級問題 啟用壓縮 刪除無用的HttpModule 其它優化選項 本文將介紹一些方法用於優化ASP.NET網站效能,這些方法都是不需要修改程式程式碼的。 它們主要分為二個方面: 1. 利用ASP.NET自身的
IE11等新版本的瀏覽器更新 User-Agent 導致的 ASP.Net 網站無法寫入Cookie 問題
一個專案裡用到forms身份認證,近來突然在谷歌瀏覽器裡以及相應的360等瀏覽器,不能儲存COOKIE,試了很多辦法,終於解決了,做個記錄以備候查。 web.config 裡需要 增添machineKey, 如: <machineKey validationKey="88CB6CA6
ASP.NET網站不能在VS中除錯
點選VS2010工具欄中綠色的小箭頭執行網站沒問題,按說執行後,應該處於正在執行狀態,這個小箭頭會變成灰色。但是沒有變化,仍然是綠色的小箭頭。所以設定斷點根本沒有截獲。工作列右下角顯示的DevelopmentServer是啟動狀態。 清理解決方案再重新生成解決方案不管用 以為是VS版本的問題,試了VS
ASP.NET 網站部署到IIS上如何進行除錯
1:在一個網站成功部署後,有可能會遇到一些錯誤,但是又不能直接看出錯誤源(如果能在源程式裡下斷點進行除錯就好了,這樣就能準確的找出錯誤程式碼),下面介紹如何在一個已經部署的網站上進行斷點除錯(前提有網站的Debug模式下的原始碼) 2:通過VS(以管理員身份開啟)開啟該專案的原始碼(這裡以VS2010為