比如,有個視頻網站,那麼首先客戶端要向服務端發送請求,服務端是怎麼確認這是正常的請求而不是有人惡意發送的無意義請求,客戶端怎麼確認傳過來的數據是服務端發送的正常數據不是有人惡意傳來的垃圾數據呢


你這裡說場景是客戶端伺服器,指的是類似ios或安桌客戶端通過http或https向服務端發起請求吧?

這種方式可以考慮通過驗簽來防止惡意請求的發起。如果介面前面有網關,驗簽可以在網關上實現,減輕業務服務端工作


題主的問題可能不太嚴謹。正常來說,一種是攻擊,一種是臟數據。

臟數據是指不符合後端校驗的數據,包括但不限以下幾種:

  • 必填數據缺失
  • 類型錯誤
  • 參數類型不匹配
  • URL地址不匹配
  • 數據不合法

攻擊是通常包括但不限以下幾種:

  • DDOS攻擊
  • 漏洞攻擊(SQL注入等)

對於第一種,就是要做好數據校驗,分別對應:

  • 必填項校驗
  • 類型校驗
  • 數據校驗

對於第二種,就是要做好安全防範:

  • 限制訪問頻率或者是IP
  • SQL過濾等

再來看題主的問題,其實伺服器並不是保證客戶端或者是其他端傳來的數據一定是有效的,但是一定要保證對於無效或者是惡意的請求可以做出正確的響應

那麼客戶端是否存在同樣的問題呢?

是的。

但主要是被劫持,也就是說,你以為你是在向正常的伺服器端請求數據,其實不是的。

運營商的DNS劫持,惡意植入廣告來獲取利潤的事兒,很常見。

怎麼解決?

Https。

可以多關注一下證書機制。


從安全形度來看,一般會根據數據的特徵,與已存在的病毒庫,漏洞庫進行比對,區分異常與正常。

如果你發的數據是正常的但無意義的數據,那就確認不了。


人和人,不,機器和機器之間基本的信任呢?

如果發散思維,這題沒解了,還是聚焦幾個具體場景比較好。

伺服器端,對請求要有基本驗證,這個估計你也清楚。驗證邏輯完善很重要,除此以外,就應該是反爬蟲,這個就說來話長了,略過。再一個,應該是防流量攻擊,比如ddos攻擊,這個你也可以看看相關文章。

而客戶端,你要是不信任伺服器端,那麼這個客戶端也不要用了,是吧?怎麼信任伺服器端?比如用https,再加上內容的hash校驗來防篡改,基本也夠了

也許你到互聯網公司做開發,自然知道該怎麼去做,我這種做企業內部開發的,也只能憑想像來強答,羞愧


首先,客戶端如何確保服務端是真正的服務端,而不會被欺騙:

一個正常的伺服器是不會發送垃圾給你的。我覺得題主的意思是怎麼防止偽伺服器冒充正牌伺服器發送垃圾消息給你。

這可以用很多方法來搞定。伺服器的ip一般是固定的,客戶端通過ip找到伺服器,建立通道進行通信。因為同一個地址不可能對應兩個伺服器,所以假冒伺服器不可能頂在正牌伺服器前面冒充,和客戶端建立通道。

接下來就是有沒有可能假伺服器打破這個通道,硬塞一些垃圾進去。這個點對點通信是直接由運營商的網路硬體實現的,不公開的,依然無法被外部破解。

但是,就算如此,黑客也可以利用一些漏洞往你客戶端塞垃圾消息的。比如用病毒感染你的機器,將你訪問的域名解析到他的伺服器上,或者直接篡改你的客戶端等等。而且如果你的電腦是無線上網,那所有的通信都是暴露在空氣中的。黑客頂著個大天線,背個大書包,就可以為所欲為了。

接下來是伺服器如何防止客戶端發垃圾數據。客戶端搞事確實是經常發生的。黑客就喜歡看見一個網站,隨便發點包過去試試能不能注入點東西。

這裡,垃圾數據又分為很多種。

首先是無意義的位元組流。客戶端伺服器之間通信傳輸的都是byte數組。所以你要傳輸數據,需要有一個編碼方式,能讓數據和byte數組之間相互轉換。一個聰明的程序員會確保程序會判斷輸入的byte流是否有效,如果無效會棄之不用並報錯,而不是在解析過程中懵逼死機。

還有一種可能是發欺騙數據。比如一個用戶還沒登錄,是不可能修改密碼的。但是可以通過發包的方式,直接向伺服器發送修改密碼的請求。還比如黑客利用數據包解析過程的漏洞,把代碼塞進數據包里,在伺服器解析數據包的過程中代碼就會不知不覺地被執行。

解決這種問題,也是後端程序員的主要任務。後端程序員需要從數據包的設計來儘可能杜絕注入漏洞,同時在每次接受數據包的時候也要加上各種防守代碼,來確保這是個真實有效的合法公民而不是一個一個滿臉淫笑的黑客大佬。

而顯然,這是個世紀性難題,道高一尺魔高一丈,雖然漏洞一個個被修復,但黑客總能發現漏洞並往伺服器里塞一些其奇奇怪怪的東西。


根據我個人淺薄的理解(指web端)

偽造服務端向客戶端傳輸垃圾數據的,是不大可能的,畢竟客戶端都是向指定伺服器IP發起請求,而IP是具有唯一性的,頂多就是中間抓包,破解數據包,只能拿到請求數據而已

最有機會下手的當然還是客戶端

臭名昭著的XSS和CSRF攻擊,黑客找到各種機會和漏洞,向你的服務端提交惡意代碼或者欺騙用戶,偽造惡意請求,服務端要是沒處理好,就會被破解獲取想要的信息,從而造成損失


剛好看到這篇文章

API 介面應該如何設計?如何保證安全?如何簽名?如何防重??

mp.weixin.qq.com圖標

你是問服務端怎麼判斷數據是生成器生產的垃圾數據

還是客戶端怎麼判斷服務端給的數據是否有質量問題

如果是前者,本人不專業,回答不了你。

如果是後者,我覺得你沒必要顧慮這種問題。咱們開發項目不是搞宮斗的,不會亂給你塞垃圾,如果真存在,你這問題應該問你的上司

如何你單純想校驗api給出是否符合問題,那麼應該有很多api的相關工具可以使用的


推薦閱讀:
相关文章