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