我正在学习 RESTful 接口。要更新服务器资源,例如使用 (id = 1) 的联系人,我将其放入:
PUT /contact/1
现在假设当前用户属于组织 1,组织 1 拥有联系人 1。还有组织 2,拥有联系人 2。当前用户不属于组织 2,没有权限。如果用户入侵网页(使用 Mozilla 的 Firebug 或 MSIE 的“F12 调试器”)并将网页请求更改为指向 /contact/2,浏览器将愉快地提交请求。
我的服务器必须防止这种跨组织攻击。在我当前的网站设计中,一旦用户登录,我就会在会话中存储一个数据对象(我使用的是 Tomcat/Java)。该对象存储用户所属的组织。安全检查代码将回传 PUT 请求的组织与用户所属的组织进行比较,并查看回传数据是否属于用户的组织。在检测到黑客攻击(组织 1 的用户正在尝试修改属于组织 2 的联系人 2)时,会向浏览器返回错误。
我知道 REST 应该是无状态的,但我目前正在使用某种状态。然而,如果我将用户信息传递到网页中,我认为这也可以通过 Firebug 等人进行黑客攻击。
如何在不调用服务器状态的情况下实现这种安全性?
谢谢,杰罗姆。