这是一个抽象的例子:
2种类型的用户(user
和admin
)拥有一些数据,可以在他们的个人资料页面上进行更改。
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
参数添加到请求中?
答案 0 :(得分:2)
如果some.php以安全的方式检查用户的身份(例如通过会话中已经建立的内容),并在执行任何事情之前确认用户确实是管理员使用'user_id'参数 - 是的,它应该是安全的。
答案 1 :(得分:1)
他们可以修改他们想要的所有请求,他们仍然需要物理登录到服务器,或者您的some.php
文件可以简单地拒绝未经身份验证的请求(使用会话!)。一旦通过身份验证,服务器就会知道用户是否是管理员,并且可以进一步检查客户端是否具有所请求操作的适当权限。
系统和你做的一样安全(给出或带走一两个意外的错误)。