如何限制无用户登录的Angular应用所调用REST API的访问权限
无用户登录的公开Angular应用API访问限制方案
首先需要说明:不存在100%能保证API仅接收来自你的Angular应用请求的方案,所有客户端侧的逻辑都是公开可逆向的,我们能做的是大幅提升攻击者的伪造请求成本,覆盖绝大多数常规攻击场景,满足线下注册类业务的安全需求。
1. 基础防御:CORS配置
- 后端服务配置跨域资源共享(CORS)规则,仅允许你的Angular应用所属域名作为允许的来源域,浏览器会自动拦截其他域名下的前端页面发起的跨域请求。
- 注意:该方案只能防御普通用户通过其他站点的前端页面调用你的接口,Postman、自定义脚本等非浏览器环境可以绕过CORS校验,仅作为基础防护层使用。
2. 核心防护:请求签名机制
- 前端每次发起业务请求时,将请求参数、当前时间戳、前端预置的密钥按约定的算法(比如MD5、SHA256)生成唯一签名,将签名、时间戳一同放入请求头传递给后端。
- 后端收到请求后,先校验时间戳与服务器当前时间差,超过5分钟的请求直接拒绝,防止抓包重放攻击;再用相同的规则重新生成签名,和前端传递的签名对比,不一致直接返回错误。
- 前端的签名算法、密钥不能明文存储在代码中:将密钥拆分为多个片段分散在不同的JS文件中,运行时才动态拼接;使用
javascript-obfuscator等工具对签名相关的逻辑做高强度混淆,大幅提升攻击者逆向提取密钥、还原签名规则的成本。
3. 短期动态令牌补充
- 无需用户登录也可以实现无感知的临时令牌机制:用户首次打开Angular应用时,前端自动向令牌发放接口申请有效期1~2小时的临时访问令牌,令牌发放接口本身用上述的签名机制防护。
- 后续所有业务请求都携带该临时令牌,后端校验令牌有效性,过期后前端自动静默重新申请。即使攻击者抓包拿到令牌,短时间内就会失效,无法长期用于恶意请求。
4. 后端增强防护
- 接口限流:针对IP、设备指纹做请求频率限制,比如注册类接口单个IP10分钟内最多请求5次,超过阈值直接拉黑对应IP1~24小时,阻挡批量刷接口的行为。
- 访问时序校验:后端统计正常用户的访问链路(比如打开页面→获取表单配置→提交注册),不符合正常时序的直接拦截,比如未请求过表单配置直接调用注册接口的请求直接拒绝。
5. 高危场景补充:人机校验
如果存在批量恶意注册的风险,可以在注册提交的关键步骤加入图形验证码、滑动验证码等人机校验环节,基本可以拦截所有自动化脚本的批量请求。
内容的提问来源于stack exchange,提问作者pcdorney
相关产品推荐
相关产品推荐

