2012-08-02 19 views
-1

在我的網站上,我有登錄區域,登錄用戶可以在其中更改存儲在數據庫中的文本。每個用戶都有一個(或2或3個)文本,每個文本都有特定的ID。以下是消息的數據庫外觀:驗證ajax發送的數據

| message_id | message_text | user_id | time | 

Message_id和userid是三位或四位數字。

到現在爲止,我使用乾淨的PHP來保存/從基地獲取數據。但現在我想使用AJAX,這裏是我的電話看起來如何(當用戶完成編輯他的消息,並點擊提交):

var msg = $("#msg").val(); 
var usrid = $("usrid").val(); 
var msgid = $("#msgid").val(); 

$.ajax({ 
    type: 'POST', 
    data: { 
    action: 'save_message', 
    message: msg, 
    user_id: usrid, 
    message_id: msgid 
}, 
url: 'http://example.com/update.php', 
success: function(data) { 
     $('#info').html('<b>Message saved!!!</b>'); 
     } 
}) 

但是,正如我們都知道的是,jQuery(JS)是客戶端語言,並且用戶可以輕鬆地更改usrid,msgid的值,並且在幾次嘗試後,他將更改其他某個用戶的消息。

什麼是正確的解決方案?爲了傳遞某種令牌,使id更復雜(10,20位數字)或其他解決方案?

+0

看看這個:http://advosys.ca/papers/web/60-form-tampering.html – jeremyharris 2012-08-02 14:42:33

回答

0

如果您已經有了一個適用於所有POST數據處理的乾淨的PHP解決方案,您可以重複使用相同的驗證方法,因爲AJAX會將數據作爲POST提交給您。 除非您沒有任何驗證服務器端,並且您將用戶標識與表單數據一起提交,那麼我建議使用PHP會話作爲@ Briguy37推薦。 如果你想要一個很好的例子來驗證/清理髮布數據CodeIgniter有一個非常好的安全庫,它的核心部分很容易實現。

+0

那麼,在我的PHP版本中,對於userid,我使用php會話中的userid。 – SomeoneS 2012-08-02 14:50:49

0

調查PHP會話。用戶首次登錄時,將其用戶標識與會話相關聯。然後,當他們發佈消息時,從會話中使用用戶標識而不是從客戶端傳遞它。如果您的登錄過程是安全的,這應該避免用戶更新其他用戶的消息。

+0

我在現有的PHP解決方案中使用PHP會話。但如何發送會話與AJAX ID,以便ID不能改變? – SomeoneS 2012-08-02 14:51:57

+0

@SomeoneS:你不能,因爲客戶端可以構造併發送他們想要的任何AJAX請求。因此,如果您提供發送userId的方式,並且不檢查服務器上的userId,則用戶將能夠爲其他用戶發佈帖子,如果他們擁有正確的ID。它可能工作,如果你保持ids祕密或爲他們用於發佈的每個用戶生成一個祕密密鑰/ guid。但是,如果其他用戶獲得祕密的userId/key/guid,他們將能夠代表該用戶發帖。在我看來,這隻會增加複雜性並且不會提高安全性,所以我強烈建議使用會話驗證。 – Briguy37 2012-08-02 15:18:34

+0

你說我應該堅持PHP嗎? – SomeoneS 2012-08-02 16:15:19