點解jwt, oauth, microservice, stateless依D技術可以trust?

由於做開同錢銀有關的system, 所以對security的觸覺會比較敏感

同時技術又較為update, 經常將新技術用在新system上

近年興microservice, stateless, 所以最近又研究了一番, 最後發現依D技術其實並不可靠, 還請支持者指教一下


以下係我做既一些簡單實驗

一般最常見既做法, 就係login後, 將一個ref或者全部data, 以jwt加密當作token, 儲存落local storage/cookie入面


login.php
  1. require_once('JWT/JWT.php');
  2. use \Firebase\JWT\JWT;

  3. $key = "example_key";
  4. $token = array(
  5.     "iss" => "http://example.org",
  6.     "aud" => "http://example.com",
  7.     "iat" => 1356999524,
  8.     "nbf" => 1357000000,
  9.     "userid" => 1234
  10. );

  11. $jwt = JWT::encode($token, $key);


  12. //local storage version
  13. echo "
  14. <script>
  15. localStorage.setItem('jwt', '$jwt');


  16. //cookie version
  17. setcookie("jwt", $jwt, time()+3600);
  18. </script>
  19. ";
複製代碼
然後再submit去另一個page用黎判斷係咪login左

account-detail.php / change-password.php
  1. require_once('JWT/JWT.php');
  2. use \Firebase\JWT\JWT;

  3. $key = "example_key";

  4. //submit from local storage
  5. $jwt = $_GET['jwt'];

  6. //cookie version
  7. $jwt = $_COOKIE['jwt');

  8. $decoded = JWT::decode($jwt, $key, array('HS256'));
  9. print_r($decoded);
複製代碼
依個時候, 我其實係browser的console, 輸入以下code, 就可以輕易拎到個token
  1. document.cookie

  2. localStorage.getItem('jwt')
複製代碼
然後我再去另一部機, 用返相同既code set返入個browser, 就可以輕易破解

由於係直接copy原本個jwt, 所以server會認為個jwt係valid的, 然後就會拎入面個user id做野

所以, 靠依樣野做認証其實都幾唔可靠, 連外國既developer都有講
http://cryto.net/~joepie91/blog/ ... g-jwt-for-sessions/

記得以前這裡都有人提及過係安全的, 篇野搵唔返, 內容大約係話, oauth2係一個公認標準, 所以好安全, 自己定出黎既標準一定唔夠安全

但現在發現, 個方法本身其實都唔係咁安全, 否則可講下有無邊間ebank/payment gateway係用依種方法? 或者唔好ebank咁嚴重, 有無保安要求較高的服務係用佢?

本帖最後由 二師兄 於 2016-7-25 11:41 編輯

問題係個token 會唔會比其他人偷到, 同埋偷到可以玩幾奈.

你可以server side check 下同一(段)時間有幾個ip/device 用同一個token.

TOP

oauth既存在都係唔想比third party知道 user 個password
但關於錢銀既service我淨係知paypal用緊, 某d 小型cloud service provider收信用卡時都有用信用卡公司既payment gateway,   
其他大粒野都直接要人輸入信用卡同cvv, 由佢幫你過數

TOP

最重要係經過network時唔會比人做到attack,你咁講法,如果部電腦比人track左key input,咁密碼都係好唔安全,cookies照樣可以行javascript retrieve到。電腦既physical security要由用家去負責吧。

TOP

jwt 呢類tech
應該唔會用係bank到
不過學chi251155 C兄講
你部電腦都compromised左
咩security都無用

TOP

當你部電腦可以比hacker用到,開到chrome既時候
偷你browser個token已經係你最唔需要擔心既野

TOP

比人偷個 token 同現時比人偷個 session cookie, 有乜分別 ..

TOP

叠單問, 如果我mobile store 個 token 落 shared pref 度, 咁如部機係root 左, 咁點Protect 個token唔比人偷?

TOP

最重要係經過network時唔會比人做到attack,你咁講法,如果部電腦比人track左key input,咁密碼都係好唔安 ...
chi251155 發表於 2016-7-25 13:13


cookie如果係httpOnly的話, js拎唔到

TOP

叠單問, 如果我mobile store 個 token 落 shared pref 度, 咁如部機係root 左, 咁點Protect 個token唔比人 ...
二師兄 發表於 2016-7-28 15:41


就算你部機root左, app request root permission時都會彈出黎問你係咪allow
唔好亂allow就得, 要肯定冇risk先allow

TOP