前言

笔记来于 《web前端黑客技术揭秘》 第三章

书上原话:

第二个:http://www.foo.com/xss/re-flect2.php的代码如下

<?php
header('Location: '.$_GET['x']);
?>

输入x的值作为响应头部的Location字段值输出,意味着会发生跳转,触发XSS的其中一种方式如下

http://www.foo.com/book/reflect2.php?x=data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ%2b

跳转到data:协议上,text/html是MIME或Content-Type,表明文档类型,base64是指后面字符串的编码方式,后面这段base64解码后的值为:

<script>alert(document.domain)</scrip>

于是,当发生跳转时,就会执行这段JS。

错误

上面这段话有点错别字,对比 第二个:http://www.foo.com/xss/re-flect2.php的代码如下。与地址的 http://www.foo.com/book/reflect2.php?x=data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ%2b。可以看到网址不对,一个是/xss/re-flect2.php,另一个是/book/reflect2.php

已经issue给作者。

测试

谷歌21及75均报错。

ie11及ie5均报错。

火狐69空白不显示。

仅火狐15执行成功。