'坏'用户可以修改ajax post请求吗?

时间:2011-06-22 18:49:11

标签: ajax

这是一个抽象的例子: 2种类型的用户(useradmin)拥有一些数据,可以在他们的个人资料页面上进行更改。

user只能更改自己的数据,但admin可以更改任何user的数据。

在admin的个人资料页面上有这样的代码:

$.ajax({
    type: "POST",
    url: "some.php",
    data: {
        'action' : 'data_change',
        'user_id': $("#user_id").val()
    },
    success: function(msg){
        alert( "Data Saved: " + msg );
    }
});

但是在用户的个人资料页面上有这样的代码:

$.ajax({
    type: "POST",
    url: "some.php",
    data: {
        'action' : 'my_data_change'
    },
    success: function(msg){
        alert( "Data Saved: " + msg );
    }
});

这里,例如my_data_change动作(php函数)从会话中获取用户ID。

安全吗?例如,某些“坏用户”曾经是管理员,但现在是用户。所以他可能知道如何发送请求(可能喜欢在firebug中观看)。 事实证明,通过简单的请求修改,任何用户都可以修改其他用户的数据。

但是真的要从浏览器本地修改请求吗?在此示例中,是否真的要将my_data_change操作更改为data_change并将user_id参数添加到请求中?

2 个答案:

答案 0 :(得分:2)

如果some.php以安全的方式检查用户的身份(例如通过会话中已经建立的内容),并在执行任何事情之前确认用户确实是管理员使用'user_id'参数 - 是的,它应该是安全的。

答案 1 :(得分:1)

他们可以修改他们想要的所有请求,他们仍然需要物理登录到服务器,或者您的some.php文件可以简单地拒绝未经身份验证的请求(使用会话!)。一旦通过身份验证,服务器就会知道用户是否是管理员,并且可以进一步检查客户端是否具有所请求操作的适当权限。

系统和你做的一样安全(给出或带走一两个意外的错误)。