几种常见的Web攻击

几种常见的Web攻击

一、DoS攻击

  • DoS(Denial of Service),拒绝服务,顾名思义这种攻击是为了让服务器无法提供正常服务,最常见的DoS攻击是网络带宽攻击和连通性攻击
  • 带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求无法通过。
  • 连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。
  • 可以看出来,DoS攻击本身也受网络规模和网络速度的限制,单个计算机没办法做到攻破一台服务器,所以DoS攻击者开发了分布式攻击DDoS(Distributed Denial of Service),集合许多计算机的带宽来同时对一台服务器发动攻击。

下面我们来看三种典型的DoS攻击:SYN洪水攻击、IP欺骗和Land攻击。

1.SYN洪水攻击

  • SYN洪水攻击是利用TCP协议的缺陷,通过发送大量的半连接请求消耗资源,造成网络拥塞甚至宕机以达到攻击者不可告人的秘密。
  • 我们都知道标准的TCP连接需要经过三次握手,首先是客户端发送SYN,服务端收到后发送ACK-SYN,客户端收到后再回复ACK连接建立成功。
  • 黑客针对TCP协议栈在两台主机间初始化连接握手的过程进行攻击,黑客通过包装第三次握手的ACK包使得服务端不能收到客正确的户端ACK包
  • 而由于TCP协议具有超时重传机制,服务端会一直重传直到超时。这些虚假连接会一直占用缓冲区,正常的请求被丢弃,引起严重的网络阻塞甚至系统瘫痪

2.IP欺骗

  • 这种攻击同样是利用TCP协议栈的漏洞,我们知道TCP协议有一个RST位用于连接出错时的复位。
  • 这种攻击利用IP欺骗,使得服务器将合法的用户连接复位,影响正常用户的使用。
  • 比如说现在有一个合法连接(172.111.222.123),攻击者构造一个TCP数据报,伪装自己的IP是172.111.222.123,并向服务器发送一个带RST位的数据报。
  • 服务器接收到后会认为该连接发生错误,将该连接从缓冲区中移除
  • 所以正常用户只能重新发起连接。

3.Land攻击

  • 进行Land攻击时,黑客特别打造一个源地址和目标地址都被设置成某一个服务器的SYN包,此举将导致接受服务器向它自己的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并创建一个空连接,每一个这样的连接都将保留直到超时。大量的连接将严重影响服务器性能

4.针对DoS攻击的防御

那么我们面对DoS攻击是否是束手无策呢?当然不是,我们可以做以下防范:

  • 缩短SYN超时时间,以减少缓冲区中保留的半连接个数
  • 限制同时打开的半连接个数,当半连接个数已经达到上限时,后面未成功的TCP连接将被丢弃而不会保存在缓冲区中。
  • 设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被一概丢弃。
  • 一般来说,第三种方法在防范该类问题上表现更佳。
  • 同时可以在Web服务器端采用分布式组网、负载均衡、提升系统容量等可靠性措施,增强总体服务能力

二、CSRF攻击

CSRF(Cross Site Request Forgery)攻击,即跨站请求伪造,是一种常见的Web攻击。

几种常见的Web攻击

  • 攻击者可以盗用我们的登陆信息,以我们的身份模拟发送各种请求。
  • 例如:我们正常打开一个网站,输入账号密码登陆,此时服务器会返回一个cookie,浏览器将其保存在本地来识别身份信息。
  • 这时如果我们不小心打开了一个钓鱼网站,这个钓鱼网站就可以带着cookie冒充我们为所欲为。
  • 归根结底是源于Web的隐式身份验证,Web的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的。

1. CSRF攻击的发生有三个必要条件:

  • 已经登录一个站点,并在本地保存下cookie。
  • 在没有退出刚刚站点的情况下,打开了某第三方钓鱼网站或网站本身存在问题。
  • 原站点没有CSRF防护

前两个条件我们很难完全杜绝,所以为了保证安全,网站必须有必要的CSRF防护机制。

2.几种防护方法:

我们已经知道CSRF攻击的原理是伪造用户请求,所以我们防护的时候就要从这里出发,试想如果我们的请求里有黑客伪造不出来的东西那就可以杜绝这种攻击方式了。

  • 对于POST请求使用验证码,这个方案可以完全杜绝CSRF攻击,但验证码过多会使用户体验很差,所以可以对敏感操作加验证码。
  • 非GET请求中添加token,当客户端请求页面,服务器渲染页面时给每个表单生成一个随机数token,并且将token放置到session当中,然后将token发给客户端(一般通过构造hidden表单)。下次客户端提交请求时,token会随着表单一起提交到服务器端。接收到请求后,服务器端会对token值进行验证,判断是否和session中的token值相等,如果不相等则拒绝访问。

CSRF的防御工作确实会在正常业务逻辑的基础上带来很多额外的开发量,但是这种工作量是值得的,毕竟用户隐私以及财产安全是产品最基础的根本。

三、XSS漏洞攻击

XSS(Cross Site Scripting)跨站脚本攻击,XSS的原理是黑客向Web页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而可以达到黑客盗取用户信息或其他侵犯用户安全隐私的目的

XSS漏洞主要分为持久型XSS漏洞和非持久性XSS漏洞

1.非持久型XSS漏洞

  • 非持久性XSS漏洞主要有以下几个特点:

  • 不经过服务器储存

  • 黑客需要诱导用户点击恶意url

  • 反馈率低,难以发现和修复

  • 为了防止出现非持久性XSS漏洞,必须确保以下几点:

  • 尽量不要从URL,document.referrer,document.forms 等这种DOM API中获取数据直接渲染。

  • 尽量不要使用 eval, document.write(),document.writeln(), innerHTML,document.creteElement()等可执行字符串的方法。

  • 对涉及DOM渲染的方法传入的字符串参数做转义(破坏html语法,使得展示字符而不是执行代码)。

  • 必要的话,前端渲染的时候对任何的字段都需要做转义编码。

2.持久型XSS漏洞

  • 持久性XSS漏洞被攻击有以下几个必要条件:
  • POST请求提交表单后端没做转义直接入库
  • 后端从数据库中取出数据没做转义直接输出给前端
  • 前端拿到后端数据没做转义直接渲染页面
  • 防止出现持久性XSS漏洞,需要前后端的配合,要做到以下几点:
  • 后端在数据入库时,不能相信任何前端数据,将所有的字段统一进行转义处理。
  • 后端对返回给前端的数据统一进行转义处理。
  • 前端在渲染页面的时候不能相信任何后端数据,任何字段都需要做转义处理。
  • 转义操作可以手动编写js函数进行转义,也可以借助开源工具包转义。

四、SQL注入

为什么会存在sql注入呢,只能说SQL出身不好。

  • 因为sql作为一种解释型语言,在运行时是由一个运行时组件解释语言代码并执行其中包含的指令的语言。

  • 基于这种执行方式,产生了一系列叫做代码注入(code injection)的漏洞 ,它的数据其实是由程序员编写的代码和用户提交的数据共同组成的。

  • 程序员在web开发时,没有过滤敏感字符,绑定变量,导致攻击者可以通过sql灵活多变的语法,构造精心巧妙的语句,不择手段,达成目的,或者通过系统报错,返回对自己有用的信息。

1.SQL注入的危害

  • 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露;
  • 网页篡改:通过操作数据库对特定网页进行篡改;
  • 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改;
  • 服务器被远程控制,被安装后门;
  • 删除和修改数据库表信息.

2.SQL注入的方式

通常情况下,SQL注入的位置包括:

  • 表单提交,主要是POST请求,也包括GET请求;
  • URL参数提交,主要为GET请求参数;
  • Cookie参数提交;
  • HTTP请求头部的一些可修改的值,比如Referer、User_Agent等;

3.防止SQL注入的解决方案

  • 对用户的输入进行校验,使用正则表达式过滤传入的参数;
  • 使用参数化语句,不要拼接sql,也可以使用安全的存储过程;
  • 不要使用管理员权限的数据库连接,为每个应用使用权限有限的数据库连接;
  • 检查数据存储类型;
  • 重要的信息一定要加密;