如何防止網(wǎng)站被爬蟲?
1、使用協(xié)議條款
robots.txt 是一個放置在網(wǎng)站根目錄下的文件,用于告訴搜索引擎的爬蟲哪些部分不希望被抓取。
舉個例子,可以在 robots.txt 文件中添加如下規(guī)則來禁止特定目錄或文件被抓?。?/p>
User-agent: *
Disallow: /private/
Disallow: /important/
- 1
- 2
- 3
- 4
雖然大多數(shù)合規(guī)的爬蟲會遵守這些規(guī)則,但惡意爬蟲可能會忽視它,所以,僅憑 robots.txt 不能完全阻止所有爬蟲。但它是防護的第一步,起到一個聲明和威懾的作用。
可以在網(wǎng)站的服務(wù)條款或使用協(xié)議中明確禁止爬蟲抓取數(shù)據(jù),并將違反這些條款的行為視為違法,如果網(wǎng)站內(nèi)容被惡意爬蟲抓取并造成了損害,robots.txt 可以作為違反這些條款的證據(jù)之一。
2、限制數(shù)據(jù)獲取條件
比起直接暴露所有數(shù)據(jù),可以要求用戶登錄或提供 API 密鑰才能訪問特定數(shù)據(jù)。還可以為關(guān)鍵內(nèi)容設(shè)置身份驗證機制,比如使用 OAuth 2.0 或 JWT(JSON Web Tokens),確保只有授權(quán)用戶能夠訪問敏感數(shù)據(jù),有效阻止未經(jīng)授權(quán)的爬蟲獲取數(shù)據(jù)。
3、統(tǒng)計訪問頻率和封禁
可以利用緩存工具如 Redis 分布式緩存或 Caffeine 本地緩存來記錄每個 IP 或客戶端的請求次數(shù),并設(shè)置閾值限制單個 IP 地址的訪問頻率。當(dāng)檢測到異常流量時,系統(tǒng)可以自動封禁該 IP 地址,或者采取其他的策略。
需要注意的是,雖然 Map 也能夠統(tǒng)計請求頻率,但是由于請求是不斷累加的,占用的內(nèi)存也會持續(xù)增長,所以不建議使用 Map 這種無法自動釋放資源的數(shù)據(jù)結(jié)構(gòu)。如果一定要使用內(nèi)存進行請求頻率統(tǒng)計,可以使用 Caffeine 這種具有數(shù)據(jù)淘汰機制的緩存技術(shù)。
4、多級處理策略
為了防止 “誤傷”,比起直接對非法爬蟲的客戶端進行封號,可以設(shè)定一個更靈活的多級處理策略來應(yīng)對爬蟲。比如,當(dāng)檢測到異常流量時,先發(fā)出警告;如果爬蟲行為繼續(xù)存在,則采取更嚴厲的措施,如暫時封禁 IP 地址;如果解封后繼續(xù)爬蟲,再進行永久封禁等處罰。
具體的處理策略可以根據(jù)實際情況來定制,也不建議搞的太復(fù)雜,別因此加重了系統(tǒng)的負擔(dān)。
5、自動告警 + 人工介入
可以實現(xiàn)自動告警能力,比如在檢測到異常流量或爬蟲行為時,系統(tǒng)能自動發(fā)出企業(yè)微信消息通知。然后網(wǎng)站的管理員就可以及時介入,對爬蟲的請求進行進一步分析和處理。
這點之前也給大家分享過,不止是針對爬蟲,企業(yè)的線上系統(tǒng)最好接入全方面的告警,比如接口錯誤、CPU / 內(nèi)存占用率過高之類的。
6、爬蟲行為分析
非法爬蟲和正常用戶的行為一般是有區(qū)別的,爬蟲往往遵循特定的訪問模式。比如正常用戶每道題目都要看一會兒、看的時間也不一樣,而爬蟲一般是按照固定的順序、固定的頻率來獲取題目,很明顯就能識別出來。
比如下面這種情況,有可能就是爬蟲:
7、請求頭檢測
每個發(fā)送到服務(wù)器的請求都有請求頭信息,可以通過檢查請求頭中的 User-Agent 和 Referer 等標識符,對爬蟲請求進行攔截。
當(dāng)然,這招只能防防菜鳥,因為請求頭是可以很輕松地偽造的,只要通過瀏覽器自帶的網(wǎng)絡(luò)控制臺獲取到響應(yīng)正常的請求頭信息,就可以繞過檢測了。
8、自主公開數(shù)據(jù)
記得大學(xué)上信息安全課的時候,學(xué)到一個知識點:防止網(wǎng)絡(luò)攻擊的一種方法是,讓攻擊者的成本大于實際的收益。比如密碼 10 分鐘有效,破解密碼要花 15 分鐘,就不會有人去破解。
用到爬蟲場景上,我們的做法是,不做任何限制,直接讓所有人不登錄也能查看到我們網(wǎng)站的題目數(shù)據(jù)!而且還提供了題目的各種篩選功能、收藏功能。大多數(shù)同學(xué)只是為了自己學(xué)習(xí),這樣一來,就沒有必要花時間去爬數(shù)據(jù)了~
9、溯源技術(shù)
雖然題目都是公開的,但有些我們專門請大廠大佬們來寫的優(yōu)質(zhì)題解是僅會員可見的。如果有用戶使用爬蟲抓取了這部分數(shù)據(jù),可就要小心了!一般來說,只要你在一個網(wǎng)站登錄了,就一定會有訪問記錄,如果你泄露了網(wǎng)站登錄后才可見的內(nèi)容、尤其是付費內(nèi)容,網(wǎng)站管理員一定有辦法追溯到你是誰。
比較常用的溯源技術(shù)就是水印、盲水印等。對于我們的面試鴨,本身就是通過微信登錄的,而且如果你是會員,肯定還有支付記錄。這些技術(shù)不僅幫助標記數(shù)據(jù)源,還可以在數(shù)據(jù)被濫用時追蹤其來源,從而增強數(shù)據(jù)的保護。
10、科普法律
除了上面這些方法外,還可以通過接入反爬服務(wù)、接入驗證碼、增加動態(tài)時間戳等方式進一步限制爬蟲。但是要記住,爬蟲是沒有辦法完美防御的!因為你無法限制真實的用戶,攻擊者完全可以模擬真實用戶的訪問方式來獲取你的網(wǎng)站數(shù)據(jù),比如找 10 個用戶,每人獲取幾百題。
所以我的最后一個方法是 —— 科普法律??梢栽诰W(wǎng)站上發(fā)布明確的法律聲明,告知用戶未經(jīng)授權(quán)的抓取行為是違法的,可以對爬蟲行為起到一定的威懾作用。并且還通過發(fā)布視頻和文章的方式,讓廣大程序員朋友們提高法律意識。爬蟲是有一定風(fēng)險的,自己學(xué)習(xí)倒沒問題,但是千萬別給人家的網(wǎng)站造成壓力了,搞不好就有破壞計算機系統(tǒng)的嫌疑了!
最后
從時代發(fā)展的角度看,網(wǎng)絡(luò)安全的知識是學(xué)不完的,而且以后要學(xué)的會更多,同學(xué)們要擺正心態(tài),既然選擇入門網(wǎng)絡(luò)安全,就不能僅僅只是入門程度而已,能力越強機會才越多。