我有一個php頁面「server1.com/page1.php」(不是真實的)和另一個頁面「server2.com/page2.php」如何驗證php中的請求服務器?
page1.php響應根據URL傳遞的參數可以來從任何服務器。
但我如何檢查「server1.com/page1.php」是否從「server2.com/page2.php」調用或不。
在此先感謝
我有一個php頁面「server1.com/page1.php」(不是真實的)和另一個頁面「server2.com/page2.php」如何驗證php中的請求服務器?
page1.php響應根據URL傳遞的參數可以來從任何服務器。
但我如何檢查「server1.com/page1.php」是否從「server2.com/page2.php」調用或不。
在此先感謝
有很多方法可以實現。
最簡單的方法是檢查$ _SERVER ['HTTP_REFERER']以查看它是否匹配,但這不是100%可靠,並且不是真正的安全性。
第二種方法是使用PHP的會話功能。這需要兩臺服務器使用共享會話跟蹤區域,這是一個更高級的服務器設置。
第三種方法是使用共享MySQL服務器,這兩個服務器都可以訪問來驗證請求。這會引入延遲,這可能會減慢請求的速度。
第四種方法是使用回呼到始發服務器來驗證它是否發出請求。 Server2向Server1發出請求,然後Server1與Server2聯繫,並詢問它剛剛收到的請求是否真的來自它。
第五種方法是使用私鑰/公鑰對對您的請求進行簽名。通過這種方式,您可以確定該請求是否來自它聲稱的服務器。
我以前做過這個,使用哈希,已知的祕密和時間戳。時間戳對確保潛在竊聽者無法在他們選擇的任何時間重放此過程是必要的。
或者,我會考慮加入用戶名的散列,以便即使重放攻擊是可能的,它將被鎖定到一個用戶名。
這些日子SHA1聽起來有點太快了。 password_hash
的算法可能會更好,因爲它們故意慢一些 - 如果你願意,你可以輕鬆配置額外的輪。
說明:server2.com _ itself_正在使用server1.com上的頁面,還是從另一個鏈接到另一個頁面,並且它是同時使用它們的用戶? – halfer 2012-03-23 17:55:15