基于域名限制PaaS平台HTTP触发器响应JavaScript fetch请求是否可行?
无服务器API域名限制与规模化鉴权方案解答
一、无服务器平台的域名限制支持
GCF、Amazon Lambda这类PaaS平台的HTTP触发器都原生支持跨域访问规则配置,你可以直接在平台的触发器管理页指定允许的域名列表,不符合规则的请求会直接在平台网关层被拦截,不需要自己在业务代码里处理前置过滤。
二、Origin字段校验的可行性与安全性
通过读取请求头的Origin字段校验域名的方案是可行的,但安全性是否达标取决于你的业务场景:
- 浏览器发起的跨域fetch请求的Origin头是浏览器自动添加的,前端无法篡改,符合同源策略的约束
- 非浏览器发起的请求(比如curl、Postman等服务端模拟请求)可以随意伪造Origin头,所以纯Origin校验只适用于非敏感、无配额限制、仅允许浏览器端调用的公开接口
- 如果你的接口有调用频次限制、涉及计费配额或者防爬需求,仅靠Origin校验安全性不足,需要搭配其他校验逻辑
三、规模化客户的鉴权优化方案
你当前的按客户配置独立passcode的方案确实不适合规模化拓展,推荐两个零客户配置的方案:
- 方案1:动态Origin白名单校验
你在服务端维护一个允许的客户域名白名单数据库,请求进来后先读取Origin头和白名单匹配,匹配通过才返回正常响应,否则直接返回403。新增客户只需要你在后台添加一条域名记录即可,客户侧只需要引入你的公开JS脚本,不需要做任何额外配置,拓展成本极低。 - 方案2:短时效签名校验
你部署的公开JS脚本内置固定公开盐值,用户站点加载脚本后,发起API请求时自动用当前站点域名location.origin+ 盐值 + 当前时间戳生成短时效签名,和时间戳一起作为请求参数传给后端。后端用相同规则校验签名有效性,同时限制签名有效期(比如5分钟),既可以防Origin伪造,也可以防重放攻击,客户侧同样不需要做任何额外配置。
内容的提问来源于stack exchange,提问作者Kantumrobot
相关产品推荐
相关产品推荐

