0

我正在学习 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 等人进行黑客攻击。

如何在不调用服务器状态的情况下实现这种安全性?

谢谢,杰罗姆。

4

1 回答 1

0

RESTful 服务通常是无状态的。这意味着每个请求都必须使用 apikey 或其他方式进行身份验证。

所以请求将是/path?apikey=MYKEY,服务器将处理该 apikey 的权限。

顺便说一句,我也尝试过有状态的休息服务,并且服务器能够通过在登录期间初始化的 cookie 来理解会话(但这并不是真正的 RESTful)。

如果你想用 curl 尝试它们,请执行以下操作:

curl -c cookie.txt -d "user=username&password=pass" "my.login.path"
curl -b cookie.txt "do.something"
于 2013-02-07T16:26:48.193 回答