2012-03-23 51 views
2

我有一個php頁面「server1.com/page1.php」(不是真實的)和另一個頁面「server2.com/page2.php」如何驗證php中的請求服務器?

page1.php響應根據URL傳遞的參數可以來從任何服務器。

但我如何檢查「server1.com/page1.php」是否從「server2.com/page2.php」調用或不。

在此先感謝

+0

說明:server2.com _ itself_正在使用server1.com上的頁面,還是從另一個鏈接到另一個頁面,並且它是同時使用它們的用戶? – halfer 2012-03-23 17:55:15

回答

4

有很多方法可以實現。

最簡單的方法是檢查$ _SERVER ['HTTP_REFERER']以查看它是否匹配,但這不是100%可靠,並且不是真正的安全性。

第二種方法是使用PHP的會話功能。這需要兩臺服務器使用共享會話跟蹤區域,這是一個更高級的服務器設置。

第三種方法是使用共享MySQL服務器,這兩個服務器都可以訪問來驗證請求。這會引入延遲,這可能會減慢請求的速度。

第四種方法是使用回呼到始發服務器來驗證它是否發出請求。 Server2向Server1發出請求,然後Server1與Server2聯繫,並詢問它剛剛收到的請求是否真的來自它。

第五種方法是使用私鑰/公鑰對對您的請求進行簽名。通過這種方式,您可以確定該請求是否來自它聲稱的服務器。

1

有page1.php設置會話變量,page2.php檢查。

+0

這不適用於兩臺不同的服務器,除非它們的會話數據庫是共享的。 – 2012-03-23 17:46:00

+0

此外,您將不得不使用粗略的URL會話,因爲cookie不起作用。 – Brian 2012-03-23 17:49:34

+0

但我無法訪問server2.com/page2.php! – fean 2012-03-23 17:53:04

3

我以前做過這個,使用哈希,已知的祕密和時間戳。時間戳對確保潛在竊聽者無法在他們選擇的任何時間重放此過程是必要的。

  • 服務器1的時候產生,其四捨五入爲最接近的分鐘
  • 存儲在一個文件中已知的祕密串連它(長的隨機字符串,說40個字符)
  • 以級聯的SHA1字符串(或任何散列系統你喜歡)
  • 發送到服務器2
  • 服務器2做下面和當前時間上面的圓時,它允許在服務器的時鐘不準確一些相同的過程。

或者,我會考慮加入用戶名的散列,以便即使重放攻擊是可能的,它將被鎖定到一個用戶名。

這些日子SHA1聽起來有點太快了。 password_hash的算法可能會更好,因爲它們故意慢一些 - 如果你願意,你可以輕鬆配置額外的輪。

+0

我想知道更多關於此 – codingbiz 2012-06-10 04:26:49

+0

這裏是我的問題 - http://stackoverflow.com/questions/10966398/allow-login-from-another-site/10966496#10966496 - 謝謝 – codingbiz 2012-06-10 12:45:20

相關問題