互聯網公司工做,很難避免不和黑客們打交道,我呆過的兩家互聯網公司,幾乎每個月天天每分鐘都有黑客在公司網站上掃描。html
有的是尋找Sql注入的缺口,有的是尋找線上服務器可能存在的漏洞,大部分都是各個黑客檢測工具來掃描,固然更高級一點的入侵須要不少人工協助。前端
通常狀況下,網站被黑客入侵都是由於開發人員平時沒有安全意識致使的,厲害的黑客每每會對平臺的業務和內部流程很是熟悉,不少漏洞是從邏輯上分析出來的。java
固然了,全部的黑客攻擊行爲都是有目的,99%都是由於其中隱藏着暴利。程序員
好比2015-2017年,不少互聯網金融公司遭遇黑客敲詐,最後都是打錢了事。數據庫
和黑客在線上鬥爭過不少年,積累了一些案例,互聯網金融公司工做期間,分享過一系列黑客攻擊的案例,查看案例文章能夠在公號內回覆:003後端
今天給你們分享的是,去年一家公司發生的事情。緩存
2018年的某一天,客服接到個別用戶反饋,公司某款 App 操做時某個界面響應很慢,客服將此問題反饋給了公司的相關技術人員。安全
技術人員接到這個反饋以後,在生產環境屢次測試並沒有復現這個問題,因而給客戶反饋有多是網絡的問題,能夠換個網絡再試試。服務器
客服接到更多用戶反饋,手機操做某個功能時很慢,最長時間要等待超過1分鐘。客服又將相關信息反饋到技術,而且將問題級別提升了一級。微信
技術這邊將問題上升到技術經理,開始排查問題緣由,技術經理經過大量測試發現,這個緩慢現象在測試10次會復現1次。
看來又是一個偶現的問題,偶現的Bug是最難處理的,技術經理帶着研發人員在服務器調了一下前端業務日誌,分析以後也沒有找到具體的緣由。
公司有一個核心代理商將此問題反饋到技術老總,老總安排技術總監來關注此問題。技術總監要求把訪問路徑的關鍵節點都打上日誌,看看具體是哪部分操做慢了。
通過技術經理的排查,是在 App 操做某一個功能的時候出現偶發性的慢,可是這塊的操做也有緩存做爲支撐,緩存的使用率並非很高。
既然問題是偶發而且後面的緩存使用率並不高,那麼應該不是程序哪塊出現Bug了,應該是其它方面的問題,遂要求排查是不是服務器問題。
先給你們畫一下一張圖,方便你們瞭解一下技術背景。
前端用戶使用手機操做某一個功能時,請求通過防火牆路由器分發到最前端的Nginx,Nginx 又經過均衡負載分發到後面的五臺業務服務器。
業務操做的時候須要調用一組數據,這些數據會根據業務規則緩存到背後的緩存服務器集羣中,用來緩解後端數據庫的壓力。
通過和運維人員配合調查發現,在分發的這5臺業務服務器中,其中有1臺服務器的壓力比較大,凡是請求分發到這臺服務器的時候就會出現慢的狀況。
由於線上的服務器已經用了不少年,懷疑是否是服務器配置老化致使的問題,隨後將壓力比較大的服務器進行下線,無縫切換到新的服務器上。
過了半個小時後繼續觀察,又發現另外的一臺服務器也出現負載壓力大的問題。後面變了不少方案,好比減小到3臺服務器來支撐,或者增長到9臺服務器來支撐。
老是切換半個小時到兩個小時的時候,其中的1-2臺服務器的壓力會忽然上來,一直保持比較高的訪問量,通過這些測試排除是服務器的問題。
緊接着排除Nginx是否是分發的策略有問題,致使某個服務器分發的請求過多,試着變了幾回Nginx的分發策略後,仍是會復現出問題,排除Ngingx分發異常。
技術人員繼續跟蹤,負載壓力比較高的服務器線程Down出來和正常的服務器對比,發如今負載壓力比較大的服務器上某個線程的調用數量異常的高。
再繼續跟蹤這個線程,原來是某一個忘記密碼的功能被頻繁的調用,忘記密碼應該是一個普通的接口,爲何會被這樣高頻率的調用呢?
而後再繼續跟蹤是哪些IP在頻繁的調用這些接口,不跟蹤不知道,一跟蹤嚇一跳,把調用最頻繁的 Top100 IP列出來查了一下,發現都是國外的IP。
什麼 巴黎、孟買、菲律賓、泰國,幾乎全部的外國的IP都有,可是做爲一家國內的第三方支付公司,怎麼可能會出現國外的IP呢?
你們都知道在手機上填忘記密碼的時候,絕大部分平臺都是使用手機號做爲其中的一個條件,若是你沒有在這家平臺註冊,那麼就會反饋手機號不存在。
這是一個很是常見的功能,可是對於黑客來說,這個功可以暴利了。
不少同行業的競爭者須要挖角其它公司客戶,可是怎麼知道這些平臺的客戶有哪些?
直接經過這個接口,暴力破解就能夠了。
是否是很黃很暴力!
由於公司處理的業務都是國內業務,因此只要直接在 Nginx 寫腳本,把全部來自國外的IP都給屏蔽,能夠暫時解決被國外 IP 攻擊的問題。
上線後果真消停了,服務器也不過載了,App 訪問也正常了。
可能黑客過了一夜也反應過來了,又開始使用國內的服務器代理IP高頻調用此接口,既然黑客使用了國內的IP地址,確定不能把國內IP都封了吧。
不過在 Nginx 以後還有一個前置服務器,在前置服務器中加一個很是簡單的過濾器:設置一個IP地址在某個時間段內(可配置)只能訪問此接口5次,便可解決此問題。
而後再以用戶爲維度加限制,一個用戶在某個時間段內(可配置)只能訪問此接口5次。
上面這些手段都上完以後,一切都安靜了,再也沒有出現過服務過載或者用戶反饋操做反應慢的問題了。
可是若是黑客有足夠多的國內 IP 呢,爲了防止出現這樣的問題,咱們再接着對產品進行升級,來防止黑客的這種可能性。
咱們都知道如今不少 APP 頁面,爲了方便用戶操做在忘記密碼的時候沒有圖形驗證碼,或者有圖形驗證碼卻比較簡單能夠機器破解。
因此須要升級新一代的智能驗證措施,如今不少創業公司均可以提供這種服務,這樣就從各個維度防止了黑客經過暴力手段獲取客戶信息。
其實據我所知,不少互聯網公司到如今仍然存在這種漏洞,很容易讓黑客經過暴力破解就拿到用戶註冊的手機號,只要拿到了用戶的手機號後面就能夠採用各類營銷策略。
這是目前不少公司,採用的一種競爭手段。
有的時候,產品的易用性和安全性實際上是有衝突的,產品在設計的時候,其實就應該和技術多考慮風控的相關設計,否則在產品運營的後期容易出現問題。
一個大型互聯網公司中風險點很是多,服務器風險點、業務風險點都須要作提早考慮,同時公司必須配備相應的安全人員,對公司網站作常規安全巡檢。
監控公司全部的訪問接口頻次,按期把公司裏面全部的IP訪問狀況作成圖表進行分析,看哪些是正常的請求,哪些是異常的訪問。
按期排查統計分析訪問的全部請求,能夠提早發現不少問題。
開發人員和黑客鬥爭實際上是一個長期的工做,任何一個訪問量比較大的公司都會遇到相似的問題,遇到問題不要驚慌,仔細排查每個細節,最終確定會找到問題的答案。
在個人職場經歷中,和黑客有過很是多交手的經歷,如今回過頭來看,這些經歷纔是我提高最快的最好營養。
解決問題是程序員成長的第一動力,解決大問題是成爲大牛的關鍵。程序員的一輩子,也就是不斷解決問題的一輩子。
這樣看來,咱們要感謝職場上遇到的那些困難!
全部能爬過去的問題都成爲了經歷和談資,只有那些越不過的 BUG 才能稱之爲問題。
做者簡介:純潔的微笑,一個有故事的程序員。曾在互聯網金融,第三方支付公司工做,現爲一名自由職業者,和你一塊兒用技術的角度去看這個世界。個人微信號puresmilea,歡迎你們找我聊天,記錄你個人故事。