总结几种常见的网络攻击,及解决方案

背景:最近公司技术分享,同事分享了常见的安卓系统攻击方式,作为一个服务端的开发工程师,当然是也要科普一下web安全。本文章会简单介绍一下目前常见的web常见攻击方式,跟如何应对这些攻击方式。如果你对这方面有兴趣,就一起看下去吧(✪ω✪)!!

常见的网络攻击有哪些

首先呢简单介绍一下目前常见的几种网络攻击:
XSS攻击、SQL注入、CSRF攻击、上传文件攻击、DDos攻击

XSS攻击:Cross Site Script跨站脚本攻击,它指的是恶意攻击者往Web页面里插入恶意的html+javascript的脚本和代码,当用户浏览该页之时,嵌入其中Web里面的恶意脚本会被执行,从而达到恶意用户的特殊目的。
XSS攻击又分:反射型攻击跟持久型攻击。

  1. 第一种XSS攻击是反射型攻击,可能通过图片或者flash的动图之类的诱导你点击一个URL链接。在这个URL链接里就嵌入他自己的恶意脚本,你点击URL链接之后,URL指向的是黑客自己的服务器上的一段恶意脚本,然后恶意脚本被返回到你的浏览器里就会运行,就可以控制你的浏览器里的行为了,比如说脚本可以自动让你关注某个用户ID,然后控制你自动发布一个带有病毒的微博等。
  2. 另外一种XSS攻击叫持久型攻击,举个例子,比如某个论坛、或者社交网站之类的系统,你可以发布一些帖子,或者是评论,此时黑客就可以在里面写一段恶意脚本,然后把恶意脚本混杂在评论内容里提交到你的网站的数据库里去。后面比如其他用户在社交网站里浏览到了你的这个评论,评论内容会被返回到浏览器里去,此时评论内容是包含恶意js脚本的,马上恶意脚本运行。达到攻击的目的。

解决方案

  • 消毒机制,对用户输入的内容进行转义,比如说把>转义为>之类的,这样就可以把恶意脚本里的html标签、js代码之类的东西,都给转义掉,让这些恶意脚本失效。
  • HttpOnly方式,如果你在浏览器里存放cookie的时候,可以设置一个HttpOnly属性,比如说存放用户加密认证信息的cookie,这样的话,在浏览器里运行的js脚本是被禁止访问这些HttpOnly
    cookie的,他就无法窃取你在浏览器里存储的cookie了。

sql注入攻击
SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,比如删库等。
但是如果要给你搞SQL注入,其实也不是那么容易的,因为必须要知道你的数据库表结构才行,一般获取数据库表结构的方式就下面几种:

  • 如果你使用的是开源软件,比如开源的博客系统,论坛系统等,那么人家自然知道你的表结构了,这种情况是比较少见的
  • 错误回显,大意就是你的程序报错了,结果直接在浏览器页面上显示出来了你的异常堆栈信息,包括有错误的SQL语句,通过这个,黑客直接就知道你的表结构了
  • 根据你的请求参数的名称,大致推测你的数据库表结构,这个一般不太现

防止sql注入的办法:

  • 别让人家知道你的数据表结构,关闭web服务器的错误回显,显示一个400,500之类的错误码就可以了。
  • 要用预编译的方法,mybatis、hibernate都是支持预编译的。不要直接拼接SQL语句。

CSRF Cross Site Request Forgery,垮站点请求伪造
攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
简单来说,例如利用XSS跨站点脚本攻击,获取cookie,拿到你的用户信息,然后再伪造成你发送垮站点伪造请求。

防御CSRF的方法主要是以下几种:

  • 防止cookie被窃取,可以给你的网站的cookie设置HttpOnly属性,禁止被别人的script脚本窃取,那么别人就无法伪造用户登录请求了
  • 随机token,每次返回一个页面给你的时候,都生成一个随机token附加在页面的隐藏元素里,同时在你的redis里可以存一下,然后页面发送请求的时候附加随机token,验证通过才能执行请求。
  • 验证码,页面提交必须验证码通过了才能执行你的请求,避免黑客直接伪造请求发送过来,最好是在用户进行支付交易等重要业务,要求必须在页面上拖拽一个拼图验证码。
  • Referer请求头,http请求里有一个referer请求头,带有这个请求的来源,验证这个请求是不是从自己的页面里来的,如果是的话才执行,否则就不要执行。

上传文件攻击
如果我们的网站允许别人上传文件,那么文件可能是可执行的脚本,可能是病毒或者木马文件,如果是脚本的话,可能会在服务器执行,比如黑掉你的服务器、连接你的数据库之类的。
解决方案

  • 进行白名单校验,限制上传文件的类型,只能是我们指定的,而且要限制文件的大小,对文件重命名。
  • 限制文件类型不能简单的根据后缀来判断,后缀可能被篡改,要根据文件二进制数据的开头几个字节代表的magic number来判断文件的类型。读取这个文件的二进制数据流,读取开头的几个字节,提取这个文件的魔数,根据魔数的值去判断他是什么类型的
  • 最好对文件进行一定的压缩,这样可以破坏原来的文件结构,避免文件在服务器执行,利用imagemagick这种开源包,可以很方便进行文件缩放。

DDoS:distributed denial of service分布式拒绝服务攻击
DoS攻击,简单来说就是黑客发送大量的请求,导致你的服务器线程资源全部打满,正常用户根本无法发送请求,你的网站就宕机了。DoS攻击是一对一的,就是黑客搞一台高性能服务器,拼命发送请求给你的一台服务器。
DDoS的意思就是黑客控制大量的机器,比如普通人的电脑,或者是一些公司的服务器,被他的一些木马植入给控制了,就是所谓的“肉鸡”,然后黑客下达指令,让所有肉鸡一起发送请求给攻击目标,直接搞瘫你的服务器。

DDos常见的几种攻击方式

- 基于SYN Flood模式的DDoS攻击:

  • 先了解一下TCP三次握手:
    1、客户端发送一个SYN请求,指明客户端的端口号以及TCP连接的初始序列号
    2、服务器收到SYN后,返回一个SYN+ACK,表示请求被接收,TCP序列号加1
    3、客户端收到服务器的SYN+ACK后,返回一个ACK给服务器,TCP序列号加1,连接建立完毕,接着可以通信了。

  • 如果服务器没有收到第三步的ACK,会重试返回SYN+ACK给客户端,同时处于SYN_RECV状态,把客户端放入等待列表。重试会3~5次,每隔30重试一次,遍历等待列表,再次重试发送SYN+ACK

  • 只要返回SYN+ACK给客户端,就会为客户端预留一部分资源,重试期间都保留,等待跟客户端建立连接;所以如果说太多的客户端来建立连接,资源耗尽,那么就无法建立新的TCP连接了。

  • 所以黑客就会伪造大量的不同ip地址去发送SYN请求给一台服务器建立TCP连接,每次都是卡在服务器返回SYN+ACK,但是黑客是不会最终返回ACK的,所以导致服务器可能为了黑客建立了大量的半连接放在等待列表里,占用了大量的资源,还得不停的去重试。一旦服务器的资源耗尽,那么正常的请求过来,是无法建立TCP连接的。一旦你无法建立TCP连接,那么这台服务器也自然接受不了任何HTTP请求。

DNS Query Flood攻击

顾名思义,就是去攻击DNS服务器,也就是伪造大量的域名解析请求发送给DNS服务器,然后DNS服务器必然没有,接着必然会去找上级DNS服务器,一直到根域名服务器。导致DNS服务器的资源被耗尽,其他正常人浏览网页也要解析域名,此时就没法访问DNS服务器了。

cc攻击,HTTP flood
控制HTTP代理服务器去给目标服务器发送大量的HTTP请求,导致目标服务器直接宕机。

解决方案:
如何防御DDoS攻击?这其实是非常专业的一种攻击手段,通常我们可以采购云厂商的安全服务,比如DDoS高防IP,可以把攻击流量都导入到云厂商的高防IP的服务器上去,他们有专业的技术方案和算法来防御。
针对CC攻击,网关可以用redis做个IP限流。对于恶意IP禁止访问。

你可能感兴趣的:(Java)