常见的Web安全漏洞:SYN攻击/CSRF/XSS
一、SYN攻击(属于DOS攻击)
什么情况下被动方出现SYN_RCVD状态?(flood攻击服务)
客户伪造 ip + 端口, 向服务端发送SYN请求。完成2次握手,第三次服务端 等待客户端ACK确认,但由于客户不存在服务端一直未收到确认,启动超时重发机制,当服务端重发到一定次数后(linux下配置:/proc/sys/net/ipv4/tcp_syn_retries
),仍未收到确认,服务端放弃并断开连接。
对服务端会造成怎样攻击?
- 占满半连接队列,让正常请求无法到达
- 每次重发时都要轮询比较未完成连接队列,占用服务端资源
server端检测SYN攻击:
当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
netstat -nap | grep SYN_RECV
(-n:不做名字解析 -a:显示所有套接字 -p:显示pid和对应程序名)
解决方式:
- 缩短超时时间、增加最大半连接数、过滤网关防护(防火墙代理转发).
- 监视并释放半连接队列中的大量无效连接(无奈之举:可能会影响正常请求)
- 采用 syn cookie(未正常通过三次握手的半连接,服务端不会提前为其分配资源)
- 针对攻击量小且源ip为真实ip的情况,可设置黑名单(or 白名单)
关键就是攻击者发送完syn后,不会再做任何后续的ack回复
二、XSS(跨站脚本攻击):
概念:用户提交的数据中可以构造恶意代码并且执行,从而实现窃取用户信息(比如cookie等)等攻击。
防御手段:
- 对实体字符进行转义
- 使用HTTP Only来禁止JavaScript读取cookie值
三、CSRF(跨站请求伪造):
概念:攻击者盗用你的身份,通过构造跨站请求,欺骗用户在登录认证过的网站上执行恶意操作。
常见的CSRF攻击包括:在受害者账号下发起一些不合法的操作,如发帖、删帖、转账等。
步骤:
- 登录受信任网站A,并在本地生成Cookie
- 在不登出A的情况下,访问恶意网站B
- 必须是同一浏览器,因为不同浏览器不能相互利用COOKIE
防御手段:
- 服务端验证http头部的
Referer
字段,确认请求来源 - 加入
csrf_token
(服务器生成一个随机的token并返回给客户端,客户端在发送请求时需要带上这个token,服务器在接收到请求后会验证这个token的合法性) - 加入验证码 机制(交易场景 等…)
四、XSS和CSRF 两者区别:
- XSS是实现CSRF的诸多手段之一,可以利用XSS实现CSRF攻击。
- XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。