㈠ 如何限制客戶端對WebService的訪問
如何設置能限制某個IP某一時間段的訪問次數是一個讓人頭疼的問題,特別面對惡意的ddos攻擊的時候。其中CC攻擊(Challenge Collapsar)是DDOS(分布式拒絕服務)的一種,也是一種常見的網站攻擊方法,攻擊者通過代理伺服器或者肉雞向向受害主機不停地發大量數據包,造成對方伺服器資源耗盡,一直到宕機崩潰。
cc攻擊一般就是使用有限的ip數對伺服器頻繁發送數據來達到攻擊的目的,nginx可以通過HttpLimitReqMol和HttpLimitZoneMole配置來限制ip在同一時間段的訪問次數來防cc攻擊。
HttpLimitReqMol用來限制連單位時間內連接數的模塊,使用limit_req_zone和limit_req指令配合使用來達到限制。一旦並發連接超過指定數量,就會返回503錯誤。
HttpLimitConnMol用來限制單個ip的並發連接數,使用limit_zone和limit_conn指令
這兩個模塊的區別前一個是對一段時間內的連接數限制,後者是對同一時刻的連接數限制
文章目錄
1 HttpLimitReqMol 限制某一段時間內同一ip訪問數實例
2 HttpLimitZoneMole 限制並發連接數實例
3 nginx白名單設置
HttpLimitReqMol 限制某一段時間內同一ip訪問數實例
http{
...
#定義一個名為allips的limit_req_zone用來存儲session,大小是10M內存,
#以$binary_remote_addr 為key,限制平均每秒的請求為20個,
#1M能存儲16000個狀態,rete的值必須為整數,
#如果限制兩秒鍾一個請求,可以設置成30r/m
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
...
server{
...
location {
...
#限制每ip每秒不超過20個請求,漏桶數burst為5
#brust的意思就是,如果第1秒、2,3,4秒請求為19個,
#第5秒的請求為25個是被允許的。
#但是如果你第1秒就25個請求,第2秒超過20的請求返回503錯誤。
#nodelay,如果不設置該選項,嚴格使用平均速率限制請求數,
#第1秒25個請求時,5個請求放到第2秒執行,
#設置nodelay,25個請求將在第1秒執行。
limit_req zone=allips burst=5 nodelay;
...
}
...
}
...
㈡ java web 登錄次數限制,該如何解決
java web 登錄次數限制
一個用戶登錄系統,如果他一分鍾之內連續登錄 3 次,就讓他在 15 分鍾之內無法再登錄,
------解決方案--------------------------------------------------------
將用戶的每次登錄都記入登錄日誌表
每次登錄的時候,去查最近15 分鍾內,是否存在連續3 次登錄發生在一分鍾之內的
------解決方案--------------------------------------------------------
呵呵,好方法啊.但這樣會不會資料庫伺服器很累啊
------解決方案--------------------------------------------------------引用:
將用戶的每次登錄都記入登錄日誌表
每次登錄的時候,去查最近15 分鍾內,是否存在連續3 次登錄發生在一分鍾之內的
這是個方法. 不過總查資料庫應該是有些不妥的.!
不過暫時還想不到更好的辦法.! 再去想想
------解決方案--------------------------------------------------------
如果以後不需要日誌查詢和審計,可以使用緩存而不是資料庫,把每次登陸的信息(登陸名、
時間) 這些放入緩存。然後每次登陸時查詢緩存就可以了。
------解決方案--------------------------------------------------------
------解決方案--------------------------------------------------------
如果你不想用資料庫的形式的話,用session 存下試試。
先聲明下,我沒用過:
在用戶登錄時候,如果成功不記錄session,如果登錄不成功,記錄下session +1;
到第三次,就不讓登錄了。session 的有效期設置為15 分鍾。.setMaxInactiveInterval(15
分鍾);當然,感覺這樣有個弊端,session 的丟失是根據客戶端的瀏覽器關閉來的。
㈢ web發一次請求與資料庫交互多少次合適,如果一次請求中需要交互5次以上,對性能影響多大
單純從交互對系統性能影響的話,肯定是次數越少越好。
從資料庫查詢方面,如果多次查詢的結果與一次查詢的結果一樣,一次查詢的效率正常情況下會高於多次查詢。
現在都使用連接池技術,建立資料庫連接,釋放連接方面的開銷不是很大。
對於你說的一次請求中需要與資料庫交互5次以上的情況,我覺得對性能影響挺大的。 web是並發的,如果一個請求就交互這么多,多個請求時連接池就不夠用了。
感覺你說的這種情況挺另類。
只從你問題的字面上理解,沒法告訴你影響有多大。 性能方面的東西,單純分析是沒有太大作用的。需要真實的數據。
希望能夠幫到你
㈣ 高性能WEB開發 為什麼要減少請求數,如何減少請求數
減少請求一般是為了提高頁面渲染速度吧,瀏覽器支持的並發連接有限。
為了減少請求可以合並文件,server端的文件合並解決方案可以用jawr。
也可以考慮非同步載入文件 或者 按需載入文件來減少渲染階段的請求
㈤ 關於JAVA的WEB開發,想在頁面中實現在一段時間內限制同一個IP登陸失敗次數過多
給出在doXX(get或者post)方法里的一點,其他自己完善。
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {
int resc = 6 ;//定義次數,比如六次
HttpSession sess = request.getSession(true);//獲取一個session
//這里使用偽碼,假設你已經有了驗證是否登錄失敗的方法,假設這個方法名字為 validate(),返回類型為boolean,為true則為登錄成功
if(validate()){
//繼續你的程序流程。。
}else{//登錄失敗了。。。
String add = request.getRemoteAddr();//獲取當前用戶的IP
Integer times = (Integer) sess.getAttribute(add);
if(times == null ){//當前第一次登陸
sess.setAttribute(add, new Integer(1));//設置為登錄了一次
}else{
times = times + 1;//這樣做不太好,但是也有效。嚴謹點,你可以取出times的intValue,然後再操作
if(times >= resc){//超過次數限制。。。
//執行你需要的程序。。。
}else{//沒有超過次數,繼續。。。
sess.setAttribute(add,times);
}
}
}
}
㈥ Java web怎麼限制同一個ip(或mac地址)訪問網站,查詢資源次數的
獲取並保存IP,每次查詢前,遍歷IP,若相等,跳過查詢,提示次數受限!
㈦ 網頁有瀏覽次數限制 怎麼破解
網頁次數的限制一般都是IP限制,你可以看完一遍後,直接點擊文件->另存為,就是把整個網頁保存下來,你再看就沒有限制啦,因為是離線模式啦
還有一種方法對技術的要求比較高,那就是設置代理伺服器,這樣,就可以多次瀏覽啦,希望對你有用,謝謝
㈧ web項目用攔截器對IP進行頻率限制,1秒最多訪問5次
可以使用攔截器,獲得客戶端IP,然後session緩存計數,超過的就直接攔截。