2016-01-13 65 views
1

我爲我的網站上的每個訪問者生成會話值。如果他們提交表單,它會通過jQuery AJAX請求將數據發送到我的PHP驗證器腳本。在JavaScript中訪問PHP SESSION值

此腳本對用戶提交的數據執行多項檢查。如果所有內容都已經過驗證,它將返回一個sha256散列,該散列由函數hash_hmac('sha256', 'success', $_SESSION['secret_key'])生成。我對此進行了哈希處理,以便用戶無法使用Charles等軟件來處理響應。

jQuery請求接收到散列字符串,我必須再次用密鑰散列'success'以檢查它們是否匹配。但是,密鑰存儲在PHP會話中,我無法弄清楚如何通過JavaScript訪問它。

對PHP腳本的AJAX請求並不理想 - 攻擊者可以編輯響應以使其與自己的散列字符串匹配。

+0

你不能用JavaScript訪問PHP會話變量。因爲JavaScript是客戶端和PHP是服務器端。 你可以使用這個http://stackoverflow.com/questions/4365738/how-to-access-php-session-variables-from-jquery-function-in-a-js-file的接受答案,但然後我沒有看到AJAX調用和文件加載與變量之間的區別。因爲它仍然很容易訪問。 – Gvidas

+0

爲什麼用戶提交有效數據的成功或失敗需要散列?用戶不應該知道他們是否做錯了什麼?特別是如果你想讓用戶檢查比賽。什麼是用例。總之,AJAX只是解決方案。他們可以編輯響應,但如果全部完成了客戶端,他們仍然可以編輯他們需要的任何內容。 – Goose

+0

是的,他們知道他們是否做錯了什麼。成功字符串只是一個例子:如果他們例如輸入了一個錯誤的用戶名,它將散列'invalid-username'。 jQuery將根據POST請求的結果顯示一條消息。是的,他們可以編輯它,但他們不知道他們的祕密密鑰,這樣他們就無法通過散列自己來影響結果。 – Indy

回答

0

我會簡單闡述一下我在這個答案中的評論。

你說

一個Ajax請求PHP腳本不是很理想 - 攻擊者可以 然後編輯響應,使其與自己的哈希字符串匹配。

他們可以編輯響應,但如果全部完成客戶端,他們仍然可以編輯它。

你想發送數據散列,然後你希望客戶端能夠檢查散列,所以我不確定散列中的點會是什麼,除了傳輸中的安全。我不能告訴你你真正需要什麼,因爲我沒有看到這裏的用例。

我知道你要麼需要去服務器的東西,你想保密的客戶端。客戶端沒有安全性。

+0

用戶不檢查哈希,jQuery腳本會。例如,它用他們的祕密密鑰散列,然後相應地執行。 – Indy

+0

我編輯我的答案使用單詞客戶端。用戶可以對客戶端做任何他們想做的事情,包括jQuery。 jQuery中沒有什麼是祕密的。 – Goose

+0

謝謝你的闡述。我想我只會使用jQuery進行基本驗證。然後,我會讓PHP再次驗證它並執行檢查。 – Indy

0

只要你在你的PHP文件中使用JavaScript,這樣的事情就足夠了......

<script> 
    var secret_key = <?php echo json_encode($_SESSION['secret_key']); ?> 
<script> 
+0

客戶端仍然會收到OP不需要的密鑰。 – Goose