php 其他页面获取session_PHP安全:XSS漏洞防御

一次性付费进群,长期免费索取教程,没有付费教程。

进微信群回复公众号:微信群;QQ群:460500587

 教程列表  见微信公众号底部菜单 |   本文底部有推荐书籍 

673e3b287883750f68e572f89e1f0292.png

微信公众号:计算机与网络安全

ID:Computer-network

为了与层叠样式表(Cascading Style Sheets,CSS)的缩写进行区分,故将跨站脚本攻击(Cross Site Scripting)缩写为XSS。跨站脚本攻击指的是攻击者在Web页面里插入了恶意代码,其没有被严格的控制或过滤,最终显示给来访的用户。攻击者通过注入的代码执行恶意指令,这些恶意网页程序通常是JavaScript、VBScript、ActiveX、Flash等,使用户加载并执行攻击者恶意制造的网页程序,从而达到恶意攻击用户的特殊目的。

XSS在研发过程中很难引起研发人员的重视,但它的危害却是很严重的,XSS容易引起的安全问题如表1所示。

e88dc3a4d170fc9fb74a5cb625350338.png

表1  各类危害及危害说明

1、反射型XSS

反射型XSS也叫非持久化型XSS,是指攻击者通过构造非法请求将恶意代码嵌入页面,欺骗用户主动点击浏览进行触发,攻击者主要通过邮件或者聊天窗口向用户发送一些链接,让受害者进行点击。同样也会出现在搜索引擎收录的搜索页面中,当用户进行关键字搜索并点击时可触发XSS攻击。

例如,研发人员为了方便,在页面上显示当前页码直接从浏览器读取。下面的写法会造成XSS漏洞。

当用户在浏览器输入的参数中带有JavaScript可执行脚本时会产生XSS攻击脚本。例如,攻击者可以在地址栏中输入下面的代码进行XSS漏洞探测。

http://test.test.com/index.php?page=1;alert(1);

执行结果如图1所示。

cdeddbf9414c6b7c11468e456af95b21.png

图1  XSS漏洞

这时可以猜到页面是通过$_GET方法获取page参数输出的,那么就可以构造URL,向页面写入JavaScript代码,让其执行。当把该URL进行加密,然后发送给受害者时,受害者就会执行恶意代码。

如果构造请求远程地址如图2所示,将下页的URL输入到浏览器地址栏中(URL开头的“http://”被默认隐藏),可以将获取的Cookie发送给远程的攻击者,造成Cookie泄露,攻击者可以获取用户访问该站的全部权限。

http://test.test.com/index.php?page=1;document.write('')

图2  会话推送给第三方

图3所示是反射型XSS的攻击过程。

图3  反射型XSS

1)用户正常登录Web应用程序,浏览器会保存用户的全部Cookie信息,其中包含Session ID。

2)攻击者将含有恶意代码的URL发送给用户。

3)用户打开攻击者发送过来的恶意URL。

4)浏览器程序执行用户发出的请求。

5)同时执行该恶意URL中所含的攻击者的恶意代码。

6)攻击者使用的攻击代码的作用是将用户的Cookie信息发送到攻击者的服务器并记录下来。

7)攻击者在得到用户的Cookie信息后,将可以利用这些信息来劫持用户的会话,以该用户的身份进行登录。

2、存储型XSS

存储型XSS也叫持久化型XSS。当攻击者输入恶意数据保存在数据库,再由服务器脚本程序从数据库中读取数据,然后显示在页面上时,所有浏览该页面的用户都会受到攻击。攻击行为伴随着攻击数据一直存在,如在发表文章等地方加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候就会触发代码执行。这种XSS比较危险,容易造成蠕虫、盲打后端管理平台、盗窃Cookie等。

图4所示是存储型XSS的攻击过程。

图4  存储型XSS

1)攻击者通过XSS漏洞将恶意代码提交到Web服务器进行永久存储。

2)用户/网站管理员正常登录Web应用程序,登录成功则浏览器保存用户的全部Cookie,其中包含会话ID。用户/网站管理员请求受感染页面。

3)服务器将用户请求的页面返回到浏览器。

4)浏览器执行恶意页面中所含的攻击者的恶意代码。

5)恶意代码将用户的Cookie信息发送到攻击者的服务器并记录下来。

6)攻击者在得到用户的Cookie信息后,利用这些信息来劫持用户的会话,以该用户的身份进行登录,其中包括以平台管理员身份登录。

3、DOM型XSS

DOM型XSS是一种特殊类型的XSS,它也是一种反射型XSS,是基于文档对象模型(Document Object Model,DOM)的一种漏洞。触发漏洞的原因是,使用JavaScript将用户的请求嵌入页面,从而执行了用户的恶意代码。

var s=location.search;

s=s.substring(1,s.length); // 获取URL

var url="";

if(s.indexOf("url=")>-1) {

var pos=s.indexOf("url=")+4; // 过滤掉"url="字符

url=s.substring(pos,s.length); // 得到地址栏里的URL参数值

} else {

url="参数为空";

}

document.write("url: "+url+""); // 输出

当用户使用下面的URL请求进行访问时,会触发地址栏中携带的JavaScript脚本执行,从而引发XSS注入漏洞。

http://127.0.0.1/hacker.php?url='

同样,在HTML中DOM事件函数允许JavaScript在HTML文档元素中注册不同事件处理程序,如果使用不当同时也会引起XSS注入漏洞。

通过PHP程序输出数据到浏览器前,要进行严格的输出检查,以免造成XSS漏洞。表2列举了一些JavaScript中常见的容易触发XSS漏洞的函数,在使用的时候一定要注意。

表2  容易造成XSS的JavaScript函数

4、通过编码过滤和转换进行防御

过滤是指对DOM属性和标签进行过滤,如通过程序逻辑将

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值