更新两篇之前在其他地方发过的文章
1. 关于request merging和其会产生的问题
request merging : 浏览器会把多次相同的请求(并非所有请求)合并成一次,以加快资源加载速度。
e.g.
1 2 3
| <script type="text/javascript" src="https://0.0.0.0:8888/jsonp/1"></script> <script type="text/javascript" src="https://0.0.0.0:8888/jsonp/1"></script> <script type="text/javascript" src="https://0.0.0.0:8888/jsonp/1"></script>
|
只会请求并加载一次”https://0.0.0.0:8888/jsonp/1"资源。
曾经有研究指出,这种请求合并想象在iframe里也存在,那么浏览器的这种特性就可以用来bypass部分程序的referer的判断,如jsonp的防御机制。
2. 环境和POC
绕过referer检测,攻击者能否拿到进行referer保护的用户信息?
攻击者服务器: https://example.com:8081
目标服务器: https://example.com:8082
referer检测: referer是否以“https://example.com:8082”开头
目标: 攻击者拿到属于用户的 “security content”
环境:
/jsonp.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?php
function startsWith($url, $domain) { $length = strlen($domain); return (substr($url, 0, $length) === $domain); }
$referrer = @$_SERVER['HTTP_REFERER'];
if (startsWith($referrer, "https://example.com:8082")) { $js_code = 'function jquery() { return "security content";}'; echo $js_code; } else { $js_code = 'function jquery() { return "nothing";}'; echo $js_code; }
|