我設計了一個使用AJAX的網站。我有一個名爲store.php的PHP頁面,它接受通過POST方法發送的數據並存儲在數據庫中。如何驗證AJAX調用?
如何在store.php中實現身份驗證?我只想讓一個登錄到我的網站的用戶使用store.php。
目前我正在使用htaccess重定向store.php的請求,但我不認爲這是一個好的解決方案。
我設計了一個使用AJAX的網站。我有一個名爲store.php的PHP頁面,它接受通過POST方法發送的數據並存儲在數據庫中。如何驗證AJAX調用?
如何在store.php中實現身份驗證?我只想讓一個登錄到我的網站的用戶使用store.php。
目前我正在使用htaccess重定向store.php的請求,但我不認爲這是一個好的解決方案。
任何對服務器腳本的AJAX調用都將在請求中包含會話標識。如果您要在您的站點中實施會話,請啓動會話,您將能夠查看當前登錄用戶的會話變量。
Ajax請求的安全性不是一件簡單的事情。它們可能容易受到中間人攻擊和重放攻擊的影響,僅舉幾例。我推薦讀這本書:http://www.amazon.com/Ajax-Security-Billy-Hoffman/dp/0321491939。它會給你很多關於這個問題的很好的信息。
至於你的問題,特別是:一旦你的PHP會話已經建立,這些會話cookie也將適用於Ajax請求。
您正在尋找的是用戶的持久狀態。在PHP中實現這個最好的方法是利用會話。
存儲在數據庫中的用戶相關聯的令牌。確保令牌是唯一的,不可猜測。還將相同的標記存儲在隱藏的表單字段中,以便將其重新發布回頁面。確保服務器上的標記存在於發佈的表單值中,並檢查它是否有效。
只是注意到Jeff Lambert接受的答案是正確的。我在這裏給出的答案在技術上是正確的,但最好不要在可能的情況下實現自己的安全。只需使用默認會話安全性即可。 – KyleM 2016-12-26 17:22:28
我通常只包含完全相同的代碼,用於在我的網站的其餘部分在ajax調用頁面進行身份驗證。我使用SESSION
來保存sessionID,其餘部分在我的數據庫中處理。我通常最終只是添加一條這樣的線..
require_once('loginProcedures.php');
//Login Authentication takes place here using SESSION ID
if (!$me['validLogin']) die("Invalid Authentication");
//perform actions and echo your result for a valid login.
您目前在您的網站中使用什麼進行身份驗證? – 2011-04-25 20:53:56
基於用戶名/密碼的認證。如果有一個有效的匹配,我使用$ _SESSION來存儲一些值,該值被檢查以查看用戶是否登錄。 – Cracker 2011-04-25 20:57:12
會話也在Ajax請求中發送,因此基本規則是,如果允許Ajax請求執行允許正常(網頁)請求執行的操作,那麼您幾乎可以安全地進行操作。 – 2011-04-25 20:58:23