在我的网站上,我有登录区域,登录用户可以更改存储在数据库中的文本。每个用户都有一个(或2个或3个)文本,每个文本都有特定的ID。以下是消息数据库的外观:
| 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 :(得分:0)
查看PHP会话。当用户首次登录时,将其用户ID与会话相关联。然后,当他们发布消息时,使用会话中的用户ID而不是从客户端传递它。如果您的登录过程是安全的,这应该避免用户更新其他用户的消息。
答案 1 :(得分:0)
如果您已经为所有POST数据处理提供了干净的PHP解决方案,则可以重复使用相同的验证方法,因为AJAX会将数据作为POST提交给您。 除非您没有任何验证服务器端并且您将用户ID与表单数据一起提交,否则我建议使用PHP会话作为@ Briguy37推荐。 如果你想要一个很好的例子来验证/清理帖子数据CodeIgniter有一个非常好的安全库,它的核心部分很容易实现。