2012-11-10 78 views
0

有一種方法可以通過ajax注入代碼或僞造信息?如何修復ajax安全性?

像從我的網站發送Ajax到另一個使用Ajax的網站?

如果是這樣,我怎麼能阻止這個,我只能從我的網站發送Ajax?

+2

您正在尋找術語'CSRF保護'。 – arkascha

+0

這個問題相當模糊,但我同意@arkascha,你似乎在尋找CSRF保護。 – Mahn

+0

什麼是CSRF在哪裏可以找到關於該指南的指南? – user1801625

回答

2

您可能正在尋找CSRF(跨站點請求僞造)保護。問題是您的網站不知道AJAX請求來自哪裏。普遍接受的解決方案是創建一個從您的站點發送的令牌,該令牌需要隨AJAX請求一起發送。

此令牌對用戶會話是唯一的,並輸出到頁面HTML的某處。這使得其他站點難以捕獲此令牌。

給你基本的想法,你會做這樣的事情:

$_SESSION['csrf_token'] = md5(uniqid(rand(), TRUE)); 

然後,你可以例如輸出這是一個JavaScript變量

<script> 
window.CSRF_TOKEN = '<?php echo $_SESSION['csrf_token']; ?>'; 
</script> 

如果你碰巧使用jQuery ,你可以使用ajaxSend()令牌添加到每個請求

$.ajaxSend(e, jqXHR, settings) { 
    if (!settings.data) settings.data = {}; 
    settings.data['csrf_token'] = window.CSRF_TOKEN; 
} 

最後,在後端,你會檢查$_REQUEST['csrf_token'] == $ _SESSION ['csrf_token']`來驗證請求。如果可能的話,這些令牌一次性使用通常是個好主意。存儲令牌生成的時間並確保它在合理的時間範圍內使用也是一個好主意。

+0

謝謝你這個很好的答案我現在明白了 – user1801625

+0

@ user1801625沒問題。很高興我能幫上忙 :) –