api設計 - php 介面 token 資料加密

來源:互聯網
上載者:User
最近在用php寫app的介面,有一些疑問

首先關於token(令牌)
token是使用者登入的時候產生的
使用者token在服務端儲存入庫 用戶端則緩衝在本地 大部分介面都要求用戶端發送token 和服務端資料庫中的token進行驗證

每個使用者唯一token 是由 年月 和 用戶端機器碼標識 使用者id 組成的
(年月是做登入儲存期限用的 機器碼是在持保證使用者下次登入時,快捷識別登入來源,判斷是否需要重新登入的重要憑證,使用者id其實是順便加的)

問題來了
=。= 這東西感覺做出來就和session沒什麼區別
**如果直接抓一下包
每個使用者通一個平台的用戶端的token都是一樣的 對於防攻擊並沒有什麼用**
而且這種token是基於使用者的 所以使用者的登入 註冊驗證(防機器人)驗證上這種token是幫不了忙的
=。=我還在再設計一個啥 來驗證 (有辦法在這種token思路上 把登入註冊驗證也做了嗎)

回複內容:

最近在用php寫app的介面,有一些疑問

首先關於token(令牌)
token是使用者登入的時候產生的
使用者token在服務端儲存入庫 用戶端則緩衝在本地 大部分介面都要求用戶端發送token 和服務端資料庫中的token進行驗證

每個使用者唯一token 是由 年月 和 用戶端機器碼標識 使用者id 組成的
(年月是做登入儲存期限用的 機器碼是在持保證使用者下次登入時,快捷識別登入來源,判斷是否需要重新登入的重要憑證,使用者id其實是順便加的)

問題來了
=。= 這東西感覺做出來就和session沒什麼區別
**如果直接抓一下包
每個使用者通一個平台的用戶端的token都是一樣的 對於防攻擊並沒有什麼用**
而且這種token是基於使用者的 所以使用者的登入 註冊驗證(防機器人)驗證上這種token是幫不了忙的
=。=我還在再設計一個啥 來驗證 (有辦法在這種token思路上 把登入註冊驗證也做了嗎)

此問題簡單至極,以php舉例。
但和session不一樣,和cookies有點接近,設計這個是為瞭解決cookies傳值麻煩的問題。

首先在登陸的過程中,使用者向服務端提交資料應有
usernamepasswordclient_key
php在服務端拿到這些資料之後,用校正演算法擷取校正值,如md5
(ps:不加密碼是不行的,否則使用者修改密碼後之前的還是可以快捷登陸,這不坑人嗎)
$salt是一個加密key,防止別人猜到密碼編譯演算法。

$token=md5($username.$password.date('yyyy').date('mm').$client_key.$salt);

計算完成後將$token返回到用戶端,作為儲存。以後用戶端只需要向服務端發送此$token和使用者名稱。

當php收到這個$token就再做一次上面的運算,看是否一致即可快捷判斷。

如果需要防止惡意註冊和登陸,就需要在用戶端對client_key進行加密,然後服務端解密做驗證,然而這並沒有什麼卵用,一切用戶端的代碼都是不安全的,可以通過反編譯,反混淆來分析,然後照樣偽造。所以用戶端的加密沒有意義。
另外,伺服器通過ip判斷也是一個辦法。
然而,從根源上來講,防止惡意攻擊就需要驗證手機號才能註冊,目前基本上通過此種方法實現。

我也在寫,還沒有實現

1.如果使用者是通過token驗證登陸的,在app上也就是類似cookie的東西,使用者拿來登陸是沒什麼問題,如果是當使用者換用戶端登陸,則需要重新登陸,那在驗證的時候再擷取用戶端機器碼匹配一下.

另外用戶端的token也可以做複雜,用js進行加密處理,在php擷取再進行解析.

雖然token在一定程度上是不安全的,但是相比較,比傳遞使用者密碼來的安全。
使用token的情境一般是無狀態無cookies的模式,如果有token充當cookies中的sessionID的作用。
token雖然不安全,但是由一定程度的驗證模式,那麼還是可以使其可信的

剛好前不久自己寫了篇部落格,雖然沒有涉及到一些技術細節,但思路還是有的,看看對你有沒有協助吧。

首先你要明確,Token是用於登入後驗證身份的,所以一開始就否決了你期待用它來做防惡意註冊,這兩者完全不搭嘎。其次,要說TokenSession有什麼區別,那區別就在於Token更具有定製型,因為它是由你實現的,就能幹很多Session不方便乾的事情,比如更好的做裝置認證,更方便的控制有效期間,更好的跨平台性……最重要的,HTTP協議本身定義就是無狀態的,而Cookie這種東西的存在無疑有損無狀態這個定義,所以幾乎所有的介面都拒絕使用Cookie,棄了Cookie,那Token自然成了驗證的首選。最後,Token的安全性著重於其不會被破解,不會被篡改,而不在於它傳輸時會不會被截取造成中間者攻擊。截取的防護應該是由你加強傳輸過程中的安全性來實現的,比如增加參數簽名,或者直接上HTTPS。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.