谈谈系统安全

我们知道多年前微博收到了XSS攻击,用于自动关注了一个病毒用户,然后病毒用户自动发布病毒微博,大量的人点击后,再度扩散,导致曾经很多重要的网站都遭受了攻击,致使成百上千万的用户数据遭泄露。

直到现在有时候大家还会听到某某网站、某某APP用户数据泄露的问题。所以系统安全问题一直是一个非常重要的系统架构设计的话题。

你的系统如何保证安全性?如何避免何可攻击导致系统故障?如何避免系统的核心数据遭到泄露?这是一个非常重要的事情。

现在更多的一个趋势,是安全这块交给专业的公司和团队去做,我们购买他们的服务,但是我们要了解常见的网络攻击手段,知道如何使用一些云公司的安全产品来保护我们的系统,同时我们自己的系统有时候也可能要做一些简单的防御措施。

常见的网络攻击手段包括了:XSS(跨站点脚本攻击)、SQL注入、CSRF(跨站点请求伪造)、错误回显、HTML注释、文件上传、路径遍历,等等,每一种攻击手段都有办法可以避免,所以我们最近就是学习一下系统安全性的问题和常见防御手段。

 

目录

1、XSS网络攻击

1.1 一般黑客常用的XSS网络攻击的原理是什么

1.2 如何防止XSS攻击

2、SQL注入

2.1 攻击背后的原理是什么

2.2 获取数据库表结构的方式有哪几种

2.3、如何防止SQL注入

3、CSRF攻击

3.1 背后的原理是什么

3.2 如何防止CSRF攻击

4、用户上传文件遭受的攻击

4.1  攻击背后的原理是什么

4.2、如何防止文件上传中的黑客攻击

5、DDoS攻击

5.1 背后攻击的原理是什么

5.2 DDos攻击的方式有哪些

5.2 如何防止DDoS攻击


1、XSS网络攻击

1.1 一般黑客常用的XSS网络攻击的原理是什么

XSS全称是Cross Site Script,就是跨站点脚本攻击,意思就是说黑客恶意篡改你的网页前端代码,在里面注入了他自己的html+javascript脚本和代码,然后当你访问那个网站网页的时候,黑客注入的恶意脚本就会运行了,恶意脚本运行期间会控制你的浏览器,这就很恐怖了,比如脚本可以让你关注某个用户ID,然后控制你自动发布带有病毒的微博。或者你的浏览器存储了一些cookie和你的密码,恶意脚本会获取cookie伪造你用户登录的session状态,以你的名义做一些事情。

常见的XSS攻击有两种方式:

(1)反射攻击

他主要是通过展示一个图片、动画或者比较有诱惑性的视频,想办法让你点击这个URL连接,在这个URL链接里嵌入自己的恶意脚本,你点击之后就会被攻击。

(2)持久型攻击

意思就是比如一些论坛、社交网站之类的系统,此时黑客可以发布一些帖子或者评论,在帖子或者评论中写一段恶意脚本,这些内容会被存储到网站数据库。当别的用户在社交网站里浏览了黑客的评论,这个评论内容就会返回到浏览器中去,取执行这段恶意代码。

1.2 如何防止XSS攻击

  1. 注意包含恶意URL链接的图片、动图、flash动画尽量不要点;尽量访问正规的网站。
  2. 系统添加消毒机制,对于评论之类的内容,存入数据库前要进行消毒,就是进行一些转义,比如将html标签,js之类的标签用&gt进行转义,让恶意代码失效。这样的话就算别的用户看到也不会在浏览器中执行了。
  3. HttpOnly方式,就是说你的浏览器存放cookie的时候,给它设置一个HttpOnly属性,这样的话,在浏览器里运行的js脚本是被禁止访问这些HttpOnly cookie的,黑客就无法窃取你浏览器中的cookie 了。

2、SQL注入

2.1 攻击背后的原理是什么

在系统执行SQL语句得时候,也可能存在漏洞,导致黑客把一些恶意的SQL语句注入到你的系统让你的数据库来执行。

比如有这样一个URL请求:http://www.xxx.com/goods?goodsSkuNo=xxx

对应的sql语句:select * from eshop_goods_sku where goods_sku_no=’xxx’

被黑客拼接成了如下的样子:http://www.xxx.com/goods?goodsSkuNo=xxx’;drop table eshop_goods_sku;

执行的SQl语句就变成了:select * from eshop_goods_sku where goods_sku_no=’xxx’; http://www.xxx.com/goods?goodsSkuNo=xxx’;drop table eshop_goods_sku;

这就造成了删库跑路的效果了。

2.2 获取数据库表结构的方式有哪几种

其实SQL注入不是那么容易的,需要知道数据库表结构才行。一般获取数据库表结构的方式有以下几种:

1、如果你是用的是开源软件,比如开源的博客系统、论坛系统、或者别的系统,那么人家自然就知道你的表结构了,这种情况是比较少见的。

2、错误回显,不知道大家有没有这种经历,就是你将系统跑在web服务器里,然后程序报错了,结果在浏览器页面上直接显示出来异常的堆栈信息,包括错误的SQL语句,通过这个,黑客就直接知道你的表结构了。然后通过postman进行请求,拼接一段sql,就造成了SQL注入。

3、根据你请求参数的名称,大致推测表结构,不太现实。

2.3、如何防止SQL注入

1、要防止SQL注入,其一就是不要让别人知道你的数据表结构,关闭web服务器的错误回显,在controller层面用try catch捕获异常,直接给浏览器返回400或者500之类的就可以了。

2、在JDBC层面使用预编译的手段,mybatis,hibernate就支持预编译,比如我们传入了参数,mybatis会在预编译阶段使用占位符占用参数位置:

select * from xxx where id=?

真正执行的时候数据库不会将参数的内容视为SQL执行的一部分,而是作为一个字段的属性值来处理:

select * from xxx where id=’xxx’

3、CSRF攻击

3.1 背后的原理是什么

Cross Site Request Forgery,跨站点请求伪造,就是黑客想办法伪造你这个用户去发送请求到某个系统上去,然后进行查询,交易类的操作。伪装成你,也有很多方法,比如利用XSS搞一个恶意脚本让你执行,然后盗取你浏览器的cookie,利用cookie伪装成你登录的请求,在远程黑客服务器去执行一些请求。

3.2 如何防止CSRF攻击

1、防止cookie被窃取:将网站的cookie设置为HttpOnly属性,禁止别人用js脚本窃取。

2、随机token:每次返回一个页面给你的时候,都生成一个随机token附加在页面的隐藏元素里,同时在redis中存一份,然后页面发送请求的时候附加随机token,通过验证才能执行请求,你要是自己用postman构造请求就不知道随机token是什么了。

3、验证码:页面提交可以做一个验证码,比如拖动拼图,必须验证通过了才能执行你的请求,避免黑客直接伪造请求发送过来,在交易的时候常用。

4、Referer请求头:http请求里面有一个 Referer请求头,带有这个请求的来源,你可以验证一下这个请求是不是从自己的页面里面来的,如果是则执行,不是则不执行。

4、用户上传文件遭受的攻击

4.1  攻击背后的原理是什么

很多时候如果我们的网站允许别人上传文件,那么文件可能是可执行的脚本,可能是病毒或者木马文件,如果是脚本的话,可能会在服务器执行,搞很多破坏,比如黑客黑掉你的服务器,勒索你给他比特币之类的。

4.2、如何防止文件上传中的黑客攻击

 对于文件上传这块,核心的就是要进行白名单校验,限制上传文件的类型,只能是我们指定的,而且要限制文件的大小,还要对文件重命名,限制文件类型不能简单的根据后缀来判断,可能后缀被篡改了,要根据文件二进制数据的开头几个字节代表的magic number(魔数)来判断文件的类型。比如: FFD8FF代表JEPG格式,89504E47代表PNG

比如说你的网站要求用户只能上传word类型,png类型,此时你就限制仅仅这几种文件是可以上传的,其他的类型的文件都不让上传。

而且最好对文件进行一定的压缩,这样可以破坏原来的文件结构,避免文件在服务器执行,利用imagemagick这种开源包,可以很方便进行文件缩放。

5、DDoS攻击

5.1 背后攻击的原理是什么

DDoSdistributed denial of service,分布式拒绝服务攻击,最可怕的黑客攻击,可以把你的网站、APP、系统给搞瘫痪了。

对于Dos攻击,注意是Dos攻击不是DDos攻击,就是说黑客知道你的服务器地址了,然后你的系统假设每秒就抗下1000请求,黑客就以每秒1000请求访问你,你的服务器线程资源全部打满,正常用户根本无法发送请求,你的网站就宕机了,甚至他以每秒1万请求攻击你的服务器呢,那就的系统机器就挂了。

 DoS攻击是一对一的,就是黑客搞一台高性能服务器,拼命发送请求给你的一台服务器,但是如果你的服务器配置超高,每秒抗1万请求,结果黑客的机器每秒才5000请求,那么就没用了。

DDoS的意思就是黑客控制大量的机器,比如普通人的电脑,或者是一些公司的服务器,被他的一些木马植入给控制了,就是所谓的肉鸡,然后黑客下达指令,让所有肉鸡一起发送请求给攻击目标,直接搞瘫你的服务器。

5.2 DDos攻击的方式有哪些

(1)基于SYN Flood模式的DDoS攻击
 

SYN Flood模式的DDoS攻击是通过TCP三次握手的漏洞来进行攻击的。

TCP握手的流程:

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

如果服务器没有收到第三步的ACK,会重试步骤二返回SYN+ACK给客户端,每隔30s重试一次,重试3~5次,遍历等待列表,再次重试发送SYN+ACK

服务器只要返回SYN+ACK给客户端,就会为客户端预留一部分资源,重试期间都保留,等待更客户端建立连接。所以太多的客户端来建立连接,就会导致服务端资源耗尽,就会导致无法建立新的TCP连接了。

所以黑客就会根据这个漏洞,伪装大量的不同的ip地址去发送SYN请求一台服务器建立TCP连接,每次服务器返回SYN+ACK,黑客就是不会响应返回ACK,导致服务器可能为了黑客建立了大量的半连接放在等待列表里,占用大量资源,还得不停的去重试,一旦服务器资源耗尽,那么征程的请求过来,是无法建立TCP连接的,也就无法发送http请求。

(2)基于DNS Query Flood和HTTP Flood的DDoS攻击

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

HTTP Flood就是直接在互联网上找大量的HTTP代理,说白了,其实有很多公司提供HTTP代理服务,你可以控制那些HTTP代理服务器去给目标服务器发送大量的HTTP请求,导致目标服务器挂掉。

5.2 如何防止DDoS攻击

防止DDos攻击其实挺难的,这其实是非常专业的一种攻击手段,通常我们可以采购云厂商的安全服务,比如DDoS高防IP,可以把攻击流量都导入到云厂商的高防IP的服务器上去,他们有专业的技术方案和算法来防御。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值