在当今的互联网当中,总是存在着我们看不见也摸不着的一些 “互联网地下工作者”,也就是黑客。黑客的攻击方式分为很多种,有非破坏性攻击
和破坏性攻击
。非破坏性攻击
一般是为了扰乱系统的执行,使之暂时失去正常正常对外界提供服务的能力,比如臭名昭著的DDoS
攻击等。而破坏性攻击
主要会造成两种结果:系统数据受损或者信息被窃取,好比如CSRF
攻击等。黑客使用的攻击大致可分为三种,植入病毒式
、洪水式(大幅度攻击)
、系统漏洞式
。
他们攻击的特点主要集中于:分布式
、高流量
、深度匿名
。就好比如DDoS
攻击,利用的就是国外大量的“肉鸡”计算机的信息没有登记,所以黑客再利用“肉鸡”进行互联网攻击,是很难去追寻攻击的地址,无法有效地抵御他们的攻击。虽然说现在云端服务器商开始崛起,能够提供一套完整的安全解决方案,如腾讯云、阿里云等等,都能够提供高防服务器来抵御市面上大多数的DDoS
攻击,但是成本略高,对于大多数小中型企业是有点难以承受。
即使这样,互联网企业要想建立一套完整的信息安全体系,都需要遵守CIA原则
,分别为保密性
(Confidentiality)、完整性
(Integrity)、可用性
(Availability)。
保密性
:对与一些涉及用户隐私、有价值的数据进行保密操作,无论是信息存储还是传输过程,都要保证好用户数据及相关资源的安全。值得一提的是,数据加密有些时候不只是防外部的黑客,还需要避免数据管理员在某些利益的驱动下,对数据库里的信息篡改或者泄露,进一步导致黑客利用这些数据进行网站袭击,造成企业的巨大损失。完整性
:用户访问的数据是要完整的,而不是缺失的或是篡改的,不然会导致用户访问到的数据是不正确的。在实际编码中,我们为了保证数据的完整性,通常使用的方法是对数据进行签名校验
、加密加盐值
等等(比如MD5/SHA和数据签名等)可用性
:服务是能够保证可用的,如果连服务都不能正常使用,保证数据安全更是天方夜谭。而有可能导致服务不可用的一大因素是高并发
,针对于这种情况,我们通常使用都是对进入的请求加以约束,如网页操作时间限制
、请求限流
、数据清洗
等方式。
SQL注入
SQL注入是注入式攻击中算是比较常见的了,不过随着开发人员的安全意识普遍提高,开始重视这些问题,再加上MyBatis
等框架大幅度推广,SQL注入攻击比以前要少了很多。SQL注入攻击
的原理是程序方面未将代码与数据进行严格的隔离,导致在请求数据的时候,将数据嵌套到代码中的一部分去执行,从而导致一些意想不到的问题。举个例子,当对用户数据进行修改操作时,直接将未转义的数据当成变量进行操作,代码演示:
update t_user set nick_name = "\"# -- !#(@ " where user_id = 123;
OR
select * from t_user where (user_name= '1' OR '1'='1') and (password = '1' OR '1'='1');
第一种sql语句,会导致t_user
表中nick_name全部被修改;第二种情况,会无视账号密码的情况,直接得到用户信息;还有很多种SQL注入的情况,在这里就不一一赘述了。下面讲讲怎么去抵御这种攻击:
- 过滤出用户在网页输入数据时掺杂的特殊字符,进而避免出现转义数据的风险。
- 业务编码时,避免使用字符串拼接的SQL语句,最好采用参数绑定传入的SQL参数。
- 合理使用数据库访问框架提供的防注入机制。如
MyBatis
提供的#{}
动态参数,从而有效地防止SQL注入。同时也要注意 的 使 用 , {}的使用, 的使用,{}相当于占位符,等同于使用字符串拼接SQL。
XSS
XSS攻击
,又称跨站脚本攻击
,英译为 Cross-Site Scripting
,这是为了避免跟前端语言CSS的简称冲突,所以另命名为XSS。XSS是指黑客提供某些技术手段,向正常用户请求的网页植入恶意脚本,从而在此基础上执行任意脚本
,主要用于信息窃取、破坏等目的。XSS主要分为反射型XSS
、存储型XSS
和DOM型XSS
。
在防范XSS攻击上,主要还是通过在用户输入数据做过滤
或转义
方面下功夫。后端
:可以使用Jsoup框架对输入的字符串进行XSS过滤或者使用Spring框架提供的HtmlUtils工具类对字符串进行HTML转义。前端
:尽可能使用innerText
而不是innerHTML
。
CSRF
CSRF攻击
,又称跨站请求伪造
,全称为 Cross-Site Request Forgery,也全称为 One-click Attack,即在用户毫不知情的情况下,假冒用户来模拟操作,对已经成功登录的网页上恶意操作
,如发表恶意帖子、修改个人信息、群发信息甚至修改密码等等。
虽然从攻击层面上看,两者有很多相似之处,但是CSRF还是有别于XSS的。从技术层面上看,XSS是指黑客在用户请求的网页植入了自己的恶意脚本;而CSRF是指假冒已经成功登录的用户进行 “为所欲为” 的操作。
XSS的关注点是在于用户数据没有进行过滤或转义
CSRF的关注点是在于HTTP接口没有防范不受信任的调用。
防范CSRF攻击
主要有以下两种方式:
CSRF Token验证,利用浏览器的同源策略(不同源的客户端脚本无法在没有授权的情况下,直接读取对方资源),在HTTP接口执行前验证页面或者Cookie中设置的Token,只有验证通过才继续执行请求。
人机接口,常见的就是在用户在进行相关重要操作(如修改密码、下单购买)校验短信验证码