我爲我的網站上的每個訪問者生成會話值。如果他們提交表單,它會通過jQuery AJAX請求將數據發送到我的PHP驗證器腳本。在JavaScript中訪問PHP SESSION值
此腳本對用戶提交的數據執行多項檢查。如果所有內容都已經過驗證,它將返回一個sha256散列,該散列由函數hash_hmac('sha256', 'success', $_SESSION['secret_key'])
生成。我對此進行了哈希處理,以便用戶無法使用Charles等軟件來處理響應。
jQuery請求接收到散列字符串,我必須再次用密鑰散列'success'以檢查它們是否匹配。但是,密鑰存儲在PHP會話中,我無法弄清楚如何通過JavaScript訪問它。
對PHP腳本的AJAX請求並不理想 - 攻擊者可以編輯響應以使其與自己的散列字符串匹配。
你不能用JavaScript訪問PHP會話變量。因爲JavaScript是客戶端和PHP是服務器端。 你可以使用這個http://stackoverflow.com/questions/4365738/how-to-access-php-session-variables-from-jquery-function-in-a-js-file的接受答案,但然後我沒有看到AJAX調用和文件加載與變量之間的區別。因爲它仍然很容易訪問。 – Gvidas
爲什麼用戶提交有效數據的成功或失敗需要散列?用戶不應該知道他們是否做錯了什麼?特別是如果你想讓用戶檢查比賽。什麼是用例。總之,AJAX只是解決方案。他們可以編輯響應,但如果全部完成了客戶端,他們仍然可以編輯他們需要的任何內容。 – Goose
是的,他們知道他們是否做錯了什麼。成功字符串只是一個例子:如果他們例如輸入了一個錯誤的用戶名,它將散列'invalid-username'。 jQuery將根據POST請求的結果顯示一條消息。是的,他們可以編輯它,但他們不知道他們的祕密密鑰,這樣他們就無法通過散列自己來影響結果。 – Indy