首頁  >  問答  >  主體

android - 如何判断HTTP请求来源的正确性

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

高洛峰高洛峰2714 天前365

全部回覆(4)我來回復

  • 天蓬老师

    天蓬老师2017-04-17 12:09:13

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


    update:

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

    首先,把問題細分化看。

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

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

    回覆
    0
  • 阿神

    阿神2017-04-17 12:09:13

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

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

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

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

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

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

    回覆
    0
  • 黄舟

    黄舟2017-04-17 12:09:13

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 12:09:13

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

    回覆
    0
  • 取消回覆