向ArangoDB发送请求的正确安全方式及新手实践相关疑问
兄弟,你踩的这些坑其实是新手做数据库+Web应用时非常常见的,我来给你捋清楚核心逻辑,帮你把架构掰回安全靠谱的轨道:
1. 前端暴露数据库凭证:绝对不能碰的红线
你现在直接在前端写await getAuthenticationToken('username here', 'password here');,等于把数据库的大门钥匙直接扔给了所有能打开浏览器控制台的人——这完全是不可行的!
正确的做法是把所有数据库相关的敏感操作全放到后端:
- 不管你用PHP、Node.js还是其他后端语言,搭建一个中间层服务,把ArangoDB的账号密码存在后端的配置文件里(绝对不能提交到代码仓库)。
- 前端只和你的后端API通信,比如用户登录时,前端发送自己的账号密码到后端接口,后端验证通过后,再用自己存的ArangoDB服务账号去请求JWT、执行数据库查询,最后把结果返回给前端。
这样数据库的敏感凭证完全不会暴露到前端,所有危险操作都在后端可控的环境里完成。
2. JWT存储与API通信的架构选择
你的判断是对的:JWT必须存在HTTP-only、Secure的Cookie里,这样前端JS根本读不到,能有效防止XSS攻击窃取令牌。
至于你纠结的“后端部署API还是前端调PHP脚本”——其实这俩本质是一回事,PHP脚本就是你的后端API啊!推荐的流程是:
- 前端发起登录请求到你的PHP接口,PHP先验证用户的登录信息(比如比对你自己维护的应用用户数据库)。
- 验证通过后,PHP用后端存储的ArangoDB服务账号去获取JWT,然后执行对应的数据库查询。
- PHP把查询结果返回给前端,同时把应用级的JWT(或者你可以把ArangoDB的JWT存在后端会话里,不要直接返回给前端)存在HTTP-only Cookie中。后续前端请求时,浏览器会自动带上这个Cookie,后端验证后再继续处理数据库操作。
这里建议你自己生成应用级的JWT,而不是直接用ArangoDB的JWT,这样能把应用的权限体系和数据库权限解耦,更灵活安全。
3. 关于ArangoDB用户机制的理解纠正
你之前的想法完全没错:普通应用用户不需要对应ArangoDB的数据库用户!
ArangoDB的用户系统是用来做数据库层面的权限隔离的——比如给你的后端服务分配不同的账号,一个账号只能读用户数据集合,另一个只能写日志集合,这些账号是给服务用的,不是给终端用户用的。
普通应用用户的权限控制应该在应用层实现:
- 你自己在ArangoDB里维护一个应用用户集合,记录用户的角色、权限范围等信息。
- 用户登录后,后端根据用户的角色判断他能访问哪些数据,再用后端的ArangoDB服务账号去查询对应的数据返回给用户。
除非你有特殊需求(比如给内部运维人员开放数据库直接操作权限),否则绝对不要给普通应用用户创建ArangoDB账号。
最后给你梳理下标准的架构流程:
前端(展示/用户交互) <-> 后端PHP(身份验证/权限控制/数据库代理) <-> ArangoDB(数据存储)
所有敏感逻辑全在后端,前端只负责和用户交互,这样既安全又好维护。
内容的提问来源于stack exchange,提问作者Paul Maxi

