CORS请求中Referrer检查到底有没有用?
我最近在做前端调用后端API,遇到CORS问题。后端同事说他们加了Referrer检查来防止跨域请求,但我听说这并不安全?我自己试了一下,发现即使设置了Referer,浏览器还是会因为CORS策略拦掉请求。
比如我这样发请求:
fetch('https://api.example.com/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ msg: 'hello' })
})
结果控制台报CORS错误,但网络面板里看到请求其实发出去了,只是响应被浏览器拦截了。那后端做Referrer检查还有意义吗?是不是完全防不住恶意请求?
先说CORS,你需要让后端设置正确的
Access-Control-Allow-Origin响应头,允许你的前端域名访问才行。比如:至于Referrer检查,它确实能增加一点安全性,但不能完全依赖它防止恶意请求。因为Referrer是可以被伪造的,特别是一些低版本浏览器或者自定义客户端请求。
如果要加Referrer验证,建议用正则表达式严格匹配来源域名,记得转义特殊字符。不过别指望它能防住所有攻击,最好还是结合其他手段,比如JWT认证、CSRF token这些。
总的来说,解决CORS问题得从源头来,把跨域配置做好。Referrer检查可以作为额外的安全层,但别把它当成主要防线。累死我了,每次遇到这种跨域问题都要解释半天。