2015-06-09 21 views
1

我已經看到幾個php登錄系統,它們在用戶登錄後使用簽名機制來驗證後續請求。例如,登錄類似以下內容時存儲在會話變量中。然後在應用程序的每個頁面請求中,重新創建此簽名並與會話變量中的簽名進行匹配。什麼是登錄系統中的簽名或令牌?它如何工作?

$_SESSION["signature"] = sha1($salt . $_SERVER['REMOTE_ADDR'] . $_SERVER["HTTP_USER_AGENT"]); 

我的這個問題是:

  1. 爲什麼我們使用簽名或令牌?它如何保護一般?
  2. 什麼是鹽,爲什麼在簽名中使用它。 IP地址和用戶代理是否足夠?
  3. 此外,爲什麼在簽名被存儲爲服務器上的會話變量時使用哈希函數呢?
+0

1. [反對跨網站僞造請求](http://en.wikipedia.org/wiki/Cross-site_request_forgery)。 2.因爲它足夠獨特。不,他們還不夠。那些可以被欺騙。 3.因爲它很容易製作,並且正如我所說在會話的整個過程中都是獨一無二的。 – Andrew

+1

你的意思是像'記得我'的cookie嗎? [在具有長期持久性的PHP應用程序中實現安全用戶身份驗證](https://paragonie.com/blog/2015/04/secure-authentication-php-with-long-term-persistence#title.2) –

回答

0

這些令牌用於防止CSRF。它正式被稱爲「同步器令牌模式」。通過檢查此令牌是否有效,可以防止攻擊者愚弄其他用戶執行某些操作(例如:讓其他用戶通過讓他們向給定URL提交POST請求來欺騙其他用戶。讓他們點擊註銷URL)。

使用salt是因爲它使得令牌更難以欺騙(不僅攻擊者需要欺騙IP地址和用戶代理,他們還需要弄清楚它是什麼)。

+0

評論我的問題也非常有用。 –

相關問題