Azure WebApp跨站带Referer的GET请求返回403 Forbidden求助
Azure Linux容器WebApp跨站GET请求403排查思路
问题概述
Azure上运行的Ruby-Sinatra容器WebApp,直接浏览器发起GET请求正常,但外部网站带Referer的跨站GET请求返回403 Forbidden,请求未到达应用代码,已配置允许所有CORS、关闭网络访问限制,本地运行无此问题。
排查步骤
- 检查App Service认证/授权配置:进入Azure门户的WebApp → Authentication,确认是否启用了“App Service Authentication”。如果开启且未配置对应允许规则,可能会拦截未认证的跨站请求,尝试临时关闭测试。
- 查看详细日志定位拦截源:
- 启用WebApp的HTTP日志和容器日志:进入WebApp → Monitoring → Logs,开启“Application Logs (Filesystem)”和“HTTP Logs”。
- 触发失败请求后,查看日志里的请求路径、响应来源,确认403是Azure平台层、容器反向代理还是应用返回的。如果日志显示请求未进入容器,重点排查Azure平台规则;如果进入了容器但被拦截,检查容器内的代理配置。
- 检查容器内的反向代理规则:如果容器内置Nginx等反向代理,查看是否存在Referer拦截规则。比如Nginx的
valid_referers配置,若只允许特定Referer,会拦截跨站请求。对比本地和Azure上的容器启动配置,确认是否有Azure环境下的配置覆盖。 - 验证WAF或Front Door规则(若使用):如果WebApp前端配置了Azure Front Door或App Service WAF,进入对应服务的WAF模块,查看是否有拦截跨站请求的规则(比如“跨站请求伪造”类规则),临时禁用测试或调整规则优先级。
- 检查应用中间件安全设置:排查Sinatra应用使用的rack-protection等中间件,确认是否开启了
referrer_check或CSRF保护。部分中间件在生产环境默认启用跨站拦截,本地开发模式可能自动关闭,可尝试在代码中添加disable :protection临时测试(仅用于排查,生产环境需谨慎)。 - 核对App Service应用设置:进入WebApp → Configuration → Application settings,确认
WEBSITE_CORS_ALLOWED_ORIGINS设置为*,同时检查是否存在其他可能影响请求的环境变量(比如RACK_ENV是否为production,导致中间件行为变化)。
内容的提问来源于stack exchange,提问作者RedYggdrasil
相关产品推荐
相关产品推荐

