防范因编写代码产生的系统漏洞

                                                       

用于互联网服务的系统安全性是至关重要的。在过去的2018年,发生了多起用户信息泄密事件,其中不乏著名的互联网公司,攻击者都是利用系统漏洞获取用户的账号和密码,从而进一步获取用户的信息。

什么是系统漏洞?系统漏洞是指系统存在的缺陷,攻击者可以利用系统的这些缺陷来进入系统内部,获取系统的控制权,窃取系统的数据。例如在我们设计的系统中,如果设计的用户登录密码长度过小或复杂度过低时(密码长度小于6位,密码仅由数字组成),攻击者就会在较短的时间内暴力破解用户的登录密码,从而窃取用户信息。这就是一个系统潜在的漏洞。

系统漏洞是从哪里来的呢?系统漏洞主要来自于操作系统和运行于操作系统之上的应用软件。

操作系统就是我们常用的Windwos、Linux等系统,这些系统自身也会存在漏洞,操作系统存在的漏洞对系统安全的危害是巨大的,当攻击者利用操作系统的漏洞进入操作系统后,他就有可能获得系统管理员的权限,并利用系统管理员权限的身份获得应用软件的控制权。例如攻击者可以利用系统管理员的身份登录数据库管理系统,获得数据库的管理权,可以任意读写数据库的内容。要防范操作系统自身存在的漏洞,就需要随时关注操作系统生成厂商发布的系统补丁信息,及时打好操作系统的补丁。

操作系统产生的系统漏洞我们是无法防护的,但我们自己设计和研发的系统是可以进行漏洞防护的。如前面的用户登录漏洞,我们完全可以将密码长度设置到8位以上,要求密码为字母和数字组合,也可以限制密码输错次数,这些都是有效的漏洞防范措施。

在设计一个系统时,我们需要注意防范哪些系统漏洞呢?下面主要从技术方面说说需要防范的系统漏洞。从技术方面防范的系统漏洞主要有用户访问控制、SQL注入、跨站点脚本攻击、异常错误处理、DoS攻击、不安全的数据存储、不安全的数据传输。

用户访问控制

用户访问控制包括用户登录、用户访问权限的控制。用户登录最好采用双因子登录认证,现在一般常用的双因子登录技术是登录账号密码和验证码认证,验证码可以采用图形验证码或手机验证码。用户登录系统后,应根据系统需要来限制用户的访问权限。例如普通用户不能访问后台管理页面等等。

SQL注入

SQL注入是最常见和最容易使用的一种攻击系统的方式,它主要是在用户提交的表单中嵌入SQL语句来攻击系统。例如在一个用户登录页面中,要求用户输入登录账号和密码,攻击者可能会在账号输入框中输入“’or 1=1#”,密码可以不输入,如果后台的表单处理代码只是简单拼SQL串的话,SQL代码大致如下:

select * from user where username=‘'or 1=1#' and password=md5('')

上面的SQL语句在MySQL中会被解释成下面的SQL语句:

select * from users where username='' or 1=1

因为在MySQL语言中,“#”是注释符,注释符后面的字符都会被忽略,这样的语句执行后肯定会返回所有users表的所有记录行数,如果我们的后台代码以是否返回大于零的记录数来做登录成功判断的话,非法用户在账号输入框中输入“’or 1=1#”也会成功登录系统,从而获取用户的信息,这就是SQL注入。

预防SQL注入的最好方法是对用户提交的表单数据在前端进行过滤处理,在后端采用预编译语句,它内置了对SQL注入语句的处理。如果在系统中使用Mybatis数据库开发框架,就不需要对SQL注入进行特别处理了,因为Mybatis已经内置了对SQL注入的处理。

跨站点脚本攻击

跨站点脚本攻击主要是在用户提交的表单中嵌入javascript语句,并通过浏览器攻击系统访问者的电脑。在提交的表单中嵌入javascript语句和SQL注入的嵌入原理是一样的,只是攻击方式不一样,SQL注入是攻击服务器的数据库,跨站点脚本是攻击系统访问者的浏览器,浏览器运行攻击者嵌入的脚本后,会获取用户的Cooik数据,从而获取用户的私密信息。例如系统可能会支持用户之间互相发送消息,攻击者会在发送消息的输入框输入攻击脚本,然后提交给系统,如果系统没有进行脚本过滤,就会把带有脚本信息的内容发送给接收者,接收者在浏览器打开内容后,内容中的脚本就会被执行,这就是跨站点脚本攻击。

预防跨站点脚本攻击的最好方法是过滤用户提交的所有表单数据,提交的表单数据中不允许含有javascript代码。

异常错误处理

系统发生异常错误时,一般会对系统使用者给出错误发生原因,如果给出的错误发生原因包含系统信息的话,就有可能被攻击者分析出系统的关键信息,从而找到系统的漏洞。

预防异常错误处理的方法是在提示错误信息时,尽量不要包含系统信息。

DoS攻击

用围殴服务器来形容DoS攻击的危害性是最合适不过的,发起DoS攻击的目的就是要瘫痪服务器。攻击者会利用工具软件不断模拟系统访问请求,导致系统耗尽网络资源而不能正常响应用户的请求。

预防DoS攻击需要硬件、网络环境、系统多方支持。我们在系统方面做的预防工作就是在WEB服务器中设置每分钟连接最大请求数,用于限制DoS的攻击次数,当然这也限制了正常用户的访问数量。

数据存储和数据传输的安全性

数据存储和数据传输的安全性也是非常重要的,重要的系统信息不能用明文存储,必须要加密存储。传输重要数据时,也需要加密后再传输,建议使用HTTPS协议。

在设计系统时,上面提到的由于代码疏忽产生的漏洞都要有相应的设计内容体现出系统的安全性。

发布了118 篇原创文章 · 获赞 157 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/smilejiasmile/article/details/104615835