十种常见的web攻击

软件开发离不开安全这个话题,确保网站或者网页应用的安全性,是每个开发人员都应该了解的事。本篇主要简单介绍在web领域十种常见的攻击手段及防御方式。

1. Dos拒绝服务攻击

介绍:Dos拒绝服务攻击(Denial of Service attack)是一种能够让服务器呈现静止状态的攻击方式。其原理就是发送大量的合法请求到服务器,服务器无法分辨这些请求是正常请求还是攻击请求,所以会照单全收。海量的请求造成服务器进入停止工作或拒绝服务的状态。

DDOS分布式拒绝服务攻击(Distributed Denial of Service)就是在DOS攻击基础上借助公共网络,将大数量的计算机设备联合起来,向一个或多个目标发送大量请求使使服务器瘫痪。DDoS攻击可以针对网络通讯协议的各层,大致有:TCP类的SYN Flood、ACK Flood,UDP类的Fraggle、Trinoo,DNS Query Flood,ICMP Flood,Slowloris类。CC攻击也是DDOS攻击的一种形式。

防御:DDoS 防御的技术核心是检测技术和清洗技术。检测技术就是检测网站是否正在遭受 DDoS 攻击,而清洗技术就是清洗掉异常流量。而检测技术的核心在于对业务深刻的理解,才能快速精确判断出是否真的发生了 DDoS 攻击。清洗技术对检测来讲,不同的业务场景下要求的粒度不一样。

2. CSRF跨站点请求伪造

介绍:CSRF跨站点请求伪造(Cross-Site Request Forgeries)是指攻击者通过已经设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息状态更新,属于被动攻击。更简单的理解就是攻击者盗用了你的名义,以你的名义发送了其他请求。JSON 劫持(JSON Hijacking)是用于获取敏感数据的一种攻击方式,也属于 CSRF 攻击的范畴。

防御:1)将cookie设置为HttpOnly。CSRF攻击很大程度是利用了浏览器的cookie,为了防止站内XSS漏洞,cookie设置HttpOnly属性,JS脚本就无法读取到cookie中的信息,避免攻击者伪造cookie的情况出现。

2)增加token。CSRF攻击之所以成功,主要是攻击中伪造了用户请求,而用户请求的验证信息都在cookie中,攻击者就可以利用cookie伪造请求通过安全验证。因此抵御CSRF攻击的关键就是,在请求中放入攻击者不能伪造的信息,并且信息不在cookie中。鉴于此,开发人员可以在http请求中以参数的形式加一个token,此token在服务端生成,也在服务端校验,服务端的每次会话都可以用同一个token。如果验证token不一致,则认为是CSRF攻击,拒绝请求。

3)通过Referer识别。Http头中有一个字段Referer,它记录了Http请求来源地址。但是注意不要把Rerferer用在身份验证或者其他非常重要的检查上,因为Rerferer非常容易在客户端被改变。

3. SOL注入攻击

介绍:SOL注入攻击是攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。

举例:' OR '1'='1,这是最常见的 SQL注入攻击。当我们输入用户名 admin ,然后密码输入' OR '1'=1='1的时候,我们在查询用户名和密码是否正确的时候,本来要执行的是SELECT * FROM user WHERE username='' and password='',经过参数拼接后,会执行 SQL语句 SELECT * FROM user WHERE username='' and password='' OR '1'='1',这个时候1=1是成立,自然就跳过验证。

防御:对进入数据库的特殊字符('"\<>&*;等)进行转义处理,或编码转换。在应用发布之前建议使用专业的SQL注入检测工具(如sqlmap、SQLninja)进行检测,以及时修补被发现的SQL注入漏洞。避免网站打印出SQL错误信息,比如类型错误、字段不匹配等,容易把代码里的SQL语句暴露出来。

4. XSS跨站脚本攻击

介绍:XSS跨站脚本攻击(Cross-Site scripting)是指在通过注册的网站用户的浏览器内运行非法的HTML标签或javascript,从而达到攻击的目的,如盗取用户的cookie,改变网页的DOM结构,重定向到其他网页等。XSS攻击分类包含反射型,存储型,DOM型,FLASH。

防御:坚决不要相信用户的任何输入,并过滤掉输入中的所有特殊字符。这样就能消灭绝大部分的XSS攻击。主要有两种方式:过滤特殊字符和使用HTTP头指定类型。

5.文件上传漏洞

介绍:倘若web网站没有对文件类型进行严格的校验,导致可执行文件上传到了服务器,恶意程序就会执行。

防御:客户端检测 :程序员一般使用 JavaScript 来拒绝非法文件上传。

服务器端检测:

1)白名单与黑名单验证:定义不允许或允许上传的文件扩展名;

2)MIME验证:php 中通过 $_FILE['file']['type'] 来检验;

3)目录验证:在文件上传时,程序通常允许用户将文件放到指定的目录中,如果指定的目录存在,就将文件写入目录中。

6. DNS查询攻击

介绍:DNS查询攻击(DNS Query Flood)是向被攻击的服务器发送海量的随机生成的域名解析请求,大部分根本就不存在,并且通过伪造端口和客户端IP,防止查询请求被ACL过滤。

被攻击的DNS服务器在接收到域名解析请求后,首先会在服务器上查找是否有对应的缓存,当没有缓存并且该域名无法直接由该DNS服务器进行解析的时候,DNS服务器会向其上层DNS服务器递归查询域名信息,直到全球互联网的13台根DNS服务器。

大量不存在的域名解析请求,给服务器带来了很大的负载,当解析请求超过一定量的时候,就会造成DNS服务器解析域名超时,这样攻击者便达成了攻击目的。

防御:根据域名 IP 自学习结果主动回应,减轻服务器负载(使用 DNS Cache);对突然发起大量频度较低的域名解析请求的源 IP 地址进行带宽限制;在攻击发生时降低很少发起域名解析请求的源 IP 地址的优先级;限制每个源 IP 地址每秒的域名解析请求次数。

7.暴力破解

介绍:这个一般针对密码而言,弱密码(Weak Password)很容易被别人猜到或被破解工具暴力破解。

防御:防御方法主要有两种,其一密码复杂度要足够大也要足够隐蔽,其二限制尝试次数。

8.信息泄露

介绍:由于 Web 服务器或应用程序没有正确处理一些特殊请求,泄露 Web 服务器的一些敏感信息,如用户名、密码、源代码、服务器信息、配置信息等。

防御:敏感信息加密传输;应用程序报错时,不对外产生调试信息;过滤用户提交的数据与特殊字符;保证源代码、服务器配置的安全。

9.业务漏洞

介绍:业务漏洞是跟具体的应用程序相关,比如参数篡改(连续编号 ID / 订单、1 元支付)、重放攻击(伪装支付)、权限控制(越权操作)等。

防御:系统设计阶段就需要考虑业务漏洞的问题,尽量避免连续编号、越权操作等。

10.后门程序

介绍:后门程序一般是指那些绕过安全性控制而获取对程序或系统访问权的程序方法。在软件的开发阶段,程序员常常会在软件内创建后门程序以便可以修改程序设计中的缺陷。但是如果这些后门被其他人知道,或是在发布软件之前没有删除后门程序,那么它就成了安全风险,容易被黑客当成漏洞进行攻击。

防御:使用非对称后门接口进行软件更新,避免对称后门接口, 给后端程序加壳,更新去除后门的补丁程序。



文章首发于公众号

欢迎关注公众号【技术型项目经理】,获取软件行业动态、技术和管理理念文章。

你可能感兴趣的:(十种常见的web攻击)