XSS 跨站脚本攻击
原理
- 恶意攻击者将代码通过网站注入到其他用户浏览器中的攻击方式。
- 攻击者会把恶意JavaScript 代码作为普通数据放入到网站数据库中;
- 其他用户在获取和展示数据的过程中,运行JavaScript 代码;
- JavaScript 代码执行恶意代码(调用恶意请求,发送数据到攻击者等等)。
防御
根本的解决方法:从输入到输出都需要过滤、转义。
对重要的 cookie设置 httpOnly, 防止客户端通过document.cookie读取 cookie,此 HTTP头由服务端设置。
关键字符过滤,从而避免 HTML 和 Jascript 代码的运行。
CSRF 跨站请求伪造
恶意攻击者在用户不知情的情况下,使用用户的身份来操作
原理
- 黑客创建一个请求网站A 类的URL 的Web 页面,放在恶意网站B 中,这个文件包含了一个创建用户的表单。这个表单加载完毕就会立即进行提交。
- 黑客把这个恶意Web 页面的URL 发送至超级管理员,诱导超级管理员打开这个Web 页面。
防御
token 校验
最常用的一种是通过token去校验请求是否合法:
在访问敏感数据请求时,要求用户浏览器提供不保存在 Cookie 中,并且攻击者无法伪造的数据作为校验。例如服务器生成随机数并附加在表单中,并要求客户端传回这个随机数。
检查 Referer 首部字段
用于标识请求来源的地址。检查这个首部字段并要求请求来源的地址在同一个域名下,可以极大的防止 CSRF 攻击。
输入验证码
因为 CSRF 攻击是在用户无意识的情况下发生的,所以要求用户输入验证码可以让用户知道自己正在做的操作。
SQL注入攻击
SQL 注入漏洞: 攻击者直接对网站数据库执行任意SQL语句,在无需用户权限的情况下即可实现对数据的访问、修改甚至是删除。
防御
注意避免拼接字符串
部分ORM框架自带防御
拒绝服务攻击
拒绝服务攻击(denial-of-service attack,DoS),亦称洪水攻击,在短时间内发起大量请求,耗尽服务器的资源,无法响应正常的访问,造成网站实质下线。
分布式拒绝服务攻击(distributed denial-of-service attack,DDoS),指攻击者使用两个或以上被攻陷的电脑作为“僵尸”向特定的目标发动“拒绝服务”式攻击。
防护措施
HTTP 请求的拦截
恶意请求都是从某个 IP 段发出的,那么把这个 IP 段封掉就行了。或者,它们的 User Agent 字段有特征(包含某个特定的词语),那就把带有这个词语的请求拦截。可以使用本机防火墙或者Web服务器拦截。
带宽扩容
正的 DDOS 攻击是没有特征的,它的请求看上去跟正常请求一样,而且来自不同的 IP 地址,所以没法拦截。
CDN
网站的静态内容分发到多个服务器,用户就近访问,提高速度。因此,CDN 也是带宽扩容的一种方法,可以用来防御 DDOS 攻击。
网站内容存放在源服务器,CDN 上面是内容的缓存。用户只允许访问 CDN,如果内容不在 CDN 上,CDN 再向源服务器发出请求。这样的话,只要 CDN 够大,就可以抵御很大的攻击。不过,这种方法有一个前提,网站的大部分内容必须可以静态缓存。对于动态内容为主的网站(比如论坛),就要想别的办法,尽量减少用户对动态数据的请求。
其他
1、降低SYN timeout时间,使得主机尽快释放半连接的占用
2、采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击,丢弃来自该IP的后续请求报文
3、使用防火墙或者代理设备,缓冲SYN洪泛攻击