2016-12-25 63 views
1

我試圖谷歌我的問題,但我什至不知道如何問我的問題:當用戶在我的網站上執行一個特定的事件我想調用這個函數,這增加另一用戶的MySQL數據庫的信用:只從這個Ajax調用php腳本

function incrasecredit(){ 
    $.ajax({ 
    type: "POST", 
    url: "/increasecredit.php", 
    data: {}, 
    success: function(html) { 
    } 
    }); 
    } 

...容易。問題是(如腳本名稱所示)此事件與「信用系統」/金錢有關。所以我想它應該是安全的。 「/increasecredit.php」不應該以任何其他方式被用戶訪問。例如。只需通過瀏覽器執行即可。只有在這個特殊情況下,當我在我的jQuery腳本中調用它。更準確地說,當用戶點擊一個iframe時,incrasecredit()應該被執行。只有在這種情況下。我怎樣才能保護這個腳本免於以錯誤的方式執行?我試圖用令牌來解決它,但還沒有弄明白。我有感覺,我沒有得到更大的圖片。提前致謝。

+4

你使用某種形式的用戶認證? 我認爲一個更好的方法來做這個事情是在increasecredit.php腳本中進行檢查,因爲ajax請求(以及任何其他類型的前端驗證)可以簡單地「欺騙」 – flynorc

+0

是的,用戶驗證是通過會話完成的。但是,如何檢查用戶是否有權增加其他用戶的信用額度? – tyler

+1

這是您自己的系統;不應該*你*知道?交易有什麼限制?更經常地這樣做是否符合用戶的利益? –

回答

3

您應該在您的頁面上實施CSRF令牌,通過合法的機制檢查請求是否源自您的網站。這歸結爲使用POST請求傳遞一個只使用一個令牌,該請求需要匹配存儲在用戶會話cookie中的令牌。此標記也應該在一段時間後自動過期。

另外,後端應該實現某種ACL來授權事務。用戶的角色可以通過會話爲經過身份驗證的用戶進行檢查。

+0

好的,這已經幫了我很多。儘管沒有達到100%。讓我直截了當:創建會話時存儲在用戶會話中的標記。當我執行我的ajax調用時,我也發送我的令牌。 php會檢查發送的令牌是否與會話中的令牌相同?像這樣: xhr.setRequestHeader('X-CSRF-Token',getCSRFTokenValue()); 所以PHP知道如果請求來自網站。一個問題:其他消息來源表示,將標頭髮送給標頭並不安全? – tyler

+0

這也幫助:http://stackoverflow.com/a/10336360/1352320 – tyler