我正在研究PHP中的一个模块,该模块使用来自另一个系统的登录身份验证,并具有以下特征:
- 登录
- 是通过表单提交完成的,然后基于用户登录,允许基于后端处理访问不同的子模块集。
- 页面交互都是通过jQuery完成的。与后端的通信都是在Ajax中完成的。
- 子模块包括报表和 CRUD 窗体,每个都需要访问控制,例如,一个部门无法查看报表 A,但可以查看报表 B,而另一个部门可以同时查看报表 B。表格严格适用于某些群体。
- 所有 AJAX 请求都返回 JSON
我可以在后端找出 ACL,但我不确定是否保护 AJAX 请求。
我能想到的最好的办法是为每个用户、每个子模块提供 API 密钥,并检查每个请求的用户会话。
澄清一下,我无法触及登录过程,因为它仅限于另一个系统。我只能获取cookie并查询其他系统以验证它们是否已登录。
在这种情况下,您将如何强化 AJAX 安全性?
我可以在后端找出ACL
是的,你可以...并且必须。您不能相信客户端会告诉您是否允许客户端访问某些内容。
但我不确定是否保护 AJAX 请求。
Ajax 请求只是由 JavaScript 发出的 HTTP 请求。在保护它们方面,唯一的区别是你编写的JavaScript必须为"权限被拒绝"的响应做好准备(这样它才能向用户显示合适的消息)。
我能想到的最好的办法是为每个用户、每个子模块提供 API 密钥,并检查每个请求的用户会话。
通常,您只需使用会话来跟踪用户的登录状态,并且他们访问级别/角色。您说您可以访问 cookie,请使用它们。
基本上确保 http 请求的安全性始终相同,无论是否为 ajax。
有不同类型的检查:
- 数据
- 一致性:在服务器接收数据时检查可能的注入,但也应在客户端接收时检查数据以避免间接注入。
- 数据源:检查发件人是谁,并尽可能使用 SSL。
RGDS。