網(wǎng)站重復(fù)請(qǐng)求解決方案

這是講述如何防止重復(fù)請(qǐng)求你的網(wǎng)站, 包括如,爬蟲,數(shù)據(jù)采集,刷排名,批量注冊(cè),批量發(fā)帖,利用漏洞獲取網(wǎng)站數(shù)據(jù)等等。

1. 訪問網(wǎng)站所涉及環(huán)節(jié)

簡(jiǎn)單說就是重復(fù)相同的請(qǐng)求

首" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運(yùn)營 > 網(wǎng)站防刷方案

網(wǎng)站防刷方案

時(shí)間:2023-04-18 18:20:01 | 來源:網(wǎng)站運(yùn)營

時(shí)間:2023-04-18 18:20:01 來源:網(wǎng)站運(yùn)營

網(wǎng)站防刷方案:網(wǎng)站防刷方案

網(wǎng)站重復(fù)請(qǐng)求解決方案

這是講述如何防止重復(fù)請(qǐng)求你的網(wǎng)站, 包括如,爬蟲,數(shù)據(jù)采集,刷排名,批量注冊(cè),批量發(fā)帖,利用漏洞獲取網(wǎng)站數(shù)據(jù)等等。

1. 訪問網(wǎng)站所涉及環(huán)節(jié)

簡(jiǎn)單說就是重復(fù)相同的請(qǐng)求

首先看看訪問流程所設(shè)計(jì)的每個(gè)環(huán)節(jié)

User -> Browse -> CDN/Proxy Cache -> Web Server -> App Server / fastcgi pool -> Cache -> Database 大部分網(wǎng)站都是這樣的結(jié)構(gòu):用戶,瀏覽器,CDN或反向代理,Web服務(wù)器,應(yīng)用服務(wù)器,緩存,數(shù)據(jù)庫

這個(gè)訪問過程中所涉及的設(shè)備

PC -> ADSL/Cable/Ethernet -> Route -> ... -> Route -> Firewall -> Load Balance -> Switch -> Server 我們看看從那些環(huán)節(jié)可以截獲用戶的刷新行為

可控制環(huán)節(jié)


  1. CDN / 反向代理,提供一些基本防護(hù)功能,過于簡(jiǎn)單。
  2. 3/4層設(shè)備,防火墻/路由器/交換機(jī),主要還是靠防火墻設(shè)備,例如Cisco ASA 系列防火墻,都提供IPS/IDS服務(wù)(需要單獨(dú)采購,設(shè)備默認(rèn)沒有)主要是針對(duì)IP地址的請(qǐng)求頻率做出策略控制,
  3. 4/7 層負(fù)載均衡設(shè)備, 一半負(fù)載均衡設(shè)備都附帶此功能。但不是他主要的功能,沒有能力購買防火墻設(shè)備的中小公司可以使用該功能,7層功能非常強(qiáng)大,但都是通用功能,不一定滿足你的個(gè)性化需求。
  4. 瀏覽器,這是主要是改變?yōu)g覽器端設(shè)置,利用Cookie變化,Javascript等技術(shù),阻止重復(fù)請(qǐng)求
  5. WEB 服務(wù)器,在web上通過擴(kuò)展模塊與相應(yīng)的配置也能達(dá)到一定的效果
  6. 應(yīng)用服務(wù)器, 主要是通過編寫程序在阻止惡意訪問。



依次從上至下,越能提前在上一層阻止行為越好,否則就在下一層截獲。

2. 瀏覽器款控制方案

通過 Javascript 防止重復(fù)點(diǎn)擊提交按鈕,通常的做法是將按鈕禁用 通過 disabled 屬性實(shí)現(xiàn)。下面是Jquery例子

$("form").submit(function(){ $(":submit",this).attr("disabled","disabled");}); 在上面的例子基礎(chǔ)上可以改良,增加計(jì)時(shí)器,限制一定時(shí)間內(nèi)不可重復(fù)提交。

通過 Cookie技術(shù)控制重復(fù)訪問動(dòng)作

訪問第一個(gè)頁面 login.example.com/form.ext 的時(shí)候設(shè)置一個(gè) cookie 變量訪問第二個(gè)頁面 login.example.com/auth.ext 的時(shí)候判斷上一個(gè)頁面設(shè)置的 cookie 是否有效,如果無效拒絕訪問。 可以進(jìn)一步增加難度,例如用戶注冊(cè)分為很多步驟,每一個(gè)步驟都會(huì)設(shè)置一個(gè)標(biāo)記,如果用戶行為不是按照順序訪問,直接在最后一個(gè)頁面提交,明顯可以判斷是非法行為。

這里的方案是針對(duì)人工操作,更多的時(shí)采用程序?qū)崿F(xiàn)刷新,采集,爬蟲等等。

3. CDN 與 反向代理

CDN 都提供一些基本的防護(hù)功能,主要是針對(duì) IP 地址, URL 做一些限制

如果自己做反向代理,控制權(quán)更大,可以充分使用操作系統(tǒng)帶的包過濾防火墻與代理軟件所提供的7層功能

由于很多web server 具備代理服務(wù)器功能,配置也相差無幾,所有在后面web server 會(huì)詳細(xì)介紹。

4. 網(wǎng)絡(luò)設(shè)備控制方法

每一個(gè)網(wǎng)絡(luò)設(shè)備使用方法都不同,這里無法舉例,但原理都是相同的。

3/4 層網(wǎng)絡(luò)設(shè)備可以按照IP地址與端口號(hào)訪問情況做具體限制,如單位時(shí)間內(nèi)允許的訪問次數(shù),這種對(duì)于大量的攻擊比較有效

7層網(wǎng)絡(luò)設(shè)備功能非常強(qiáng)大,就可以根據(jù)HTTP頭做規(guī)則策略,如限制URL的單位時(shí)間訪問的IP數(shù)量,判斷 Cookie 等信息,

5. 服務(wù)器上做控制

這部分分為,操作系統(tǒng)與web服務(wù)器兩個(gè)部分

5.1. 操作系統(tǒng)部分

操作系統(tǒng)部分,主要是通過linux內(nèi)核提供的包過濾功能,通常所說的iptables

iptables -A INPUT -p icmp -m limit --limit 3/s -j LOG --log-level INFO --log-prefix "ICMP packet IN: "iptables -N syn-floodiptables -A INPUT -p tcp --syn -j syn-floodiptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURNiptables -A syn-flood -j REJECT 限制源IP的訪問數(shù)量

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 50 --connlimit-mask 32 -j REJECT --reject-with icmp-port-unreachable-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 50 --connlimit-mask 32 -j REJECT --reject-with icmp-port-unreachable 關(guān)鍵字,字符串過略

iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string "XXDD0S" -j DROP 以上所講都是被動(dòng)方法,需要系統(tǒng)管理一條一條添加規(guī)則。

提示
基于IP與端口的方法有明顯的不足,經(jīng)常會(huì)誤將某些正常的IP地址封鎖。

下面通過腳本實(shí)現(xiàn)主動(dòng)防御,通過提取 access.log 文件定位更精準(zhǔn),同時(shí)實(shí)現(xiàn)了黑/白名單可以將安全I(xiàn)P放置在白名單中。

#!/bin/bash######################################### Homepage: http://netkiller.github.io# Author: neo <netkiller@msn.com>########################################PIPE=/tmp/pipepidfile=/tmp/firewall.pidACCCESS_LOG=/tmp/access.logTIMEPOINT='24/May/2012'BLACKLIST=/var/tmp/black.lstWHITELIST=/var/tmp/white.lst########################################if [ -z "$( egrep "CentOS|Redhat" /etc/issue)" ]; then echo 'Only for Redhat or CentOS' exitfiif [ ! -f ${BLACKLIST} ]; then touch ${BLACKLIST}fiif [ ! -f ${WHITELIST} ]; then touch ${WHITELIST}fifor deny in $(grep ${TIMEPOINT} ${ACCCESS_LOG} | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -r -n | head -n 30| awk '{print $2}')do if [ $(grep -c $deny ${WHITELIST}) -ne 0 ]; then echo 'Allow IP:' $deny iptables -D INPUT -p tcp --dport 443 -s $deny -j DROP iptables -D INPUT -p tcp --dport 80 -s $deny -j DROP continue fi if [ $(grep -c $deny ${BLACKLIST}) -eq 0 ] ; then echo 'Deny IP:' $deny echo $deny >> ${BLACKLIST} iptables -I INPUT -p tcp --dport 443 -s $deny -j DROP iptables -I INPUT -p tcp --dport 80 -s $deny -j DROP fidone 相比前面腳本,這個(gè)腳本更高級(jí),實(shí)現(xiàn)關(guān)鍵字過濾,管道實(shí)時(shí)處理,這樣不回因?yàn)槿罩境叽缱兇?,影響到腳本的處理性能。

#!/bin/bash######################################### Homepage: http://netkiller.github.io# Author: neo <netkiller@msn.com>########################################ACCESSLOG=/www/logs/www.example.com/access.$(date +'%Y-%m-%d').logTIMEPOINT='24/May/2012'KEYWORD=send.phpBLACKLIST=/var/tmp/black.lstWHITELIST=/var/tmp/white.lstPIPE=/var/tmp/pipepidfile=/var/tmp/firewall.pidlogfile=/var/tmp/firewall.log########################################if [ -z "$( egrep "CentOS|Redhat" /etc/issue)" ]; then echo 'Only for Redhat or CentOS' exitfiif [ -z $1 ]; then echo "$0 clear|fw|collect|process|close"fiif [ "$1" == "clear" ]; then rm -rf $BLACKLIST rm -rf $PIPE echo "Clear OK!!!"fiif [ "$1" == "close" ]; then killall tail kill `cat $pidfile` echo > $pidfilefiif [ ! -e $PIPE ]; then mkfifo $PIPEfiif [ "$1" == 'fw' ]; then iptables -A OUTPUT -p tcp --dport 2049 -j REJECT iptables -A OUTPUT -p tcp -m multiport --dports 22,21 -j REJECT for ipaddr in ${WHITELIST} do if [ $(grep -c $ipaddr ${WHITELIST}) -ne 0 ]; then iptables -A INPUT -p tcp --dport 443 -s $ipaddr -j ACCEPT iptables -A INPUT -p tcp --dport 80 -s $ipaddr -j ACCEPT echo 'Allow IP:' $ipaddr >> $logfile fi if [ $(grep -c $ipaddr ${BLACKLIST}) -eq 0 ] ; then iptables -D INPUT -p tcp --dport 443 -s $ipaddr -j DROP iptables -D INPUT -p tcp --dport 80 -s $ipaddr -j DROP echo 'Deny IP:' $ipaddr fi donefiif [ "$1" == "collect" ]; then killall tail for (( ; ; )) do tail -f $ACCESSLOG | grep $KEYWORD | cut -d ' ' -f1 > $PIPE done & echo $! > $pidfilefiif [ "$1" == "process" ]; then if [ ! -f $BLACKLIST ]; then touch $BLACKLIST fi if [ ! -f ${WHITELIST} ]; then touch ${WHITELIST} fi for (( ; ; )) do while read ipaddr do if [ $(grep -c $ipaddr ${WHITELIST}) -ne 0 ]; then echo 'Allow IP:' $ipaddr >> $logfile continue fi grep $ipaddr ${BLACKLIST} if [ $? -eq 1 ] ; then echo $ipaddr >> ${BLACKLIST} iptables -I INPUT -p tcp --dport 80 -s $ipaddr -j DROP echo "Deny IP: $ipaddr" >> $logfile fi done < $PIPE done & echo $! >> $pidfilefi 5.2. WEB 服務(wù)器部分

下面所講技術(shù),適用于反向代理,負(fù)載均衡,web服務(wù)器

Web 服務(wù)器也可以實(shí)現(xiàn)前面所說的防火墻等設(shè)備3/4層的功能,同時(shí)具備七層功能,很多負(fù)載均衡設(shè)備7層采用web服務(wù)器實(shí)現(xiàn),例如 F5 7層的高級(jí)功能是由 Apache httpd 來完成(apache 是經(jīng)過二次開發(fā)的), 所以7層的部門我們主要在這里深入討論

如果你有防火墻設(shè)備應(yīng)該首先考慮在防火墻端做控制,如果沒有防火墻那麼就考慮在負(fù)載均衡設(shè)備中做控制,這些設(shè)備你都沒有,最后考慮在反向代理中處理,最后考慮web服務(wù)器。

限制IP地址在這里可以做到更細(xì)膩的控制,例如實(shí)現(xiàn)某個(gè)目錄的,某URL的IP訪問策略。請(qǐng)自行查找手冊(cè)或參考《Netkiller Web 手札》

HTTP 協(xié)議頭

我們要做以下幾種限制


  1. 限制 http_referer, 常說的防盜鏈。
  2. 限制 http_user_agent, 主要是防爬蟲
  3. 限制 request_method, 不是所有頁面都允許 POST
  4. 限制 http_cookie, 沒有攜帶正確的 cookie 不允許訪問



上面7層訪問控制還是比較粗糙的,主要是給應(yīng)用程序減壓,更細(xì)膩的控制需要通過程序手段,實(shí)現(xiàn)更智能判斷。 不過同上上面的層層限制,已經(jīng)足矣改善你的狀況,如果還是無效繼續(xù)往下看。

valid_referers none blocked *.example.com example.com;if ($invalid_referer) { #rewrite ^(.*)$ http://www.example.com/cn/$1; return 403;} if ($http_user_agent = "") { return 403; } 6. 通過程序控制訪問行為

設(shè)計(jì)應(yīng)用防火墻,將所有資源納入管理范圍

IP地址,上面已經(jīng)反復(fù)強(qiáng)調(diào)怎樣封鎖IP地址,但都過于粗糙,很多時(shí)候是一刀切。在程序中實(shí)現(xiàn)禁止IP訪問,更靈活

我們要做以下幾種限制


  1. 單位時(shí)間內(nèi)訪問次數(shù)
  2. 訪問時(shí)間間隔設(shè)置
  3. 封鎖時(shí)間設(shè)置
  4. 黑白名單



驗(yàn)證碼,最常用的,最有效的方法,分為圖片扭曲法,問提/答案 法,手機(jī)驗(yàn)證碼,語音驗(yàn)證碼等等方法,形式多重多樣

http_referer, 雖然上面已經(jīng)做了 http_referer 限制,但是web 服務(wù)器只能做粗糙限制,允許 *.http://example.com 域進(jìn)行訪問,但我需要更精確的控制。例如:

www.example.com (此時(shí) http_referer 為空,或者其他,這不重要) -> login.example.com (http_referer: www.example.com)-> login.example.com/auth.ext (http_referer: login.example.com) -> login.example.com/secussed.ext (http_referer: login.example.com/auth.ext) 看明白了嗎 http_referer 每次都是上一個(gè)頁面,我們程序中判斷,如果上一個(gè)頁面不是我們所指定的,或者不再允許列表內(nèi),就拒絕訪問

request_method

www.example.com (GET) -> login.example.com (GET)-> login.example.com/auth.ext (POST) -> login.example.com/secussed.ext (GET) 同理,在不允許的頁面POST操作,將立即拒絕

http_cookie

www.example.com (cookie 1) -> login.example.com (cookie 2)-> login.example.com/auth.ext (cookie 3) -> login.example.com/secussed.ext (cookie 4) 沒有按照指定流程訪問,cookie 值不會(huì)變化,屬于異常行為

cookie + redis 間隔時(shí)間

提示
上面所有的操作都將計(jì)入日志,通過腳本可以將異常訪問行文達(dá)到一定次數(shù)后,放入iptables DROP鏈中。

7. 總結(jié)

上面提方法單一使用過于簡(jiǎn)單,需要組合使用,同時(shí)經(jīng)常調(diào)整組合方式才能更有效阻止各種良性與惡性網(wǎng)站訪問行為。






關(guān)鍵詞:方案

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉