android - 如何判断HTTP请求来源的正确性
高洛峰
高洛峰 2017-04-17 12:07:13
0
4
388

现在要做这样一个判断,用户下载了某个app(平台不限ios/android)后,在初次启动app时向服务器发起一个http请求,我想判断这个请求是从app发过来的而不是来自其他工具的恶意访问。因为想到http请求中带的参数是可能被截获,所以尽管服务器端通过请求参数的验证和user-agent等的验证,也不能完全确保请求来源的合法性。请教有没有高安全性的解决方案!谢谢!

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(4)
Peter_Zhu

行動app可以考慮自簽名ssl憑證。 ssl pinning保證請求安全。除非反編譯原始碼,否則幾乎為0的可能性偽造請求。


update:

看到這問題又被頂上來了,忍不住更新一下回答。

首先,把問題細分化看。

假設情境1 - App要求內容為公開內容(例如:新聞清單、文章清單、發布評論(假設評論不需要登入)):
如上的回答,自簽名SSL(所謂的自簽名目的是節省那一年幾十或幾百、幾千塊的憑證費用)即可。

假設情境2 - App請求內容為​​私有內容(如網路銀行、內部客戶端等需要使用者登入):
1.登錄,取得用戶唯一證書(每次登陸都產生新的證書,覆蓋已有證書)
2.App端請求攜帶該用戶唯一憑證請求

阿神

這個問題可以進一步升級為: http的請求,如何不被攔截並偽造.

因為 web 是不安全的, 所以很難做到請求會被攔截. 因此, 我們假設請求一定會被攔截.
所以也帶來一個問題: 如果請求所攜帶的參數一直不變, 那麼肯定請求就很容易被偽造了.

因此, 把思路轉向: 每次請求所攜帶的參數都不一樣.
很容易就能想到公鑰私鑰的解決方案. 使用公鑰對某一參數進行加密, 然後到服務端進行解密.
同時, 為了讓這一參數隨時變化, 很明顯一個比較簡單的參數就是時間了.

在對時間進行加密後, 服務端就可以解密出來, 得到時間. 然後時間進行驗證.
考慮到時間會有誤差, 所以服務端可以加一個誤差值.

這個方案的漏洞是: 如果 app 被破解了, 公鑰和參數可以獲取了之後, 就可以認為偽造加密後的數據, 進行請求.

沒有絕對的安全, 只是把破解的難度加大而已.

黄舟

想要傳輸的安全就用https
請求參數可以參考軟體序號的機制,例如透過某種演算法把mac位址和時間戳加密,然後把mac位址和加密後的mac位址、時間戳一同傳過來伺服器校驗

大家讲道理

http沒有很好的防破解方法 只有加強破解的難度
digest認證方式不錯

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!