软件系统安全问题,从软件开发角度可以分为两个层面:系统层面,数据层面。
1、系统层面
系统层面主要是在软件开发及运行过程中存在的漏洞导致被攻击的问题。
需要注意的问题主要有各种安全漏洞的防护:比如软件安全漏洞管理、SQL注入、XSS攻击、CSRF攻击等。参考文章:https://www.jianshu.com/p/0b30d7bc276d
2、数据层面
数据层面的问题,主要关注数据传输、数据存储、数据访问权限相关的问题
2.1、数据传输
数据传输的问题:指数据在传输过程中的安全问题,主要体现在几个方面:防抵赖、防明文窃取、防篡改的问题。
2.1.1 防抵赖-签名:
抵赖需要解决的问题,就是证明你就是你的问题,报文接收方如何验证是正确的发送方发送过来的。这个时候就是需要使用非对称秘钥进行签名。
1、发送方生成秘钥对,同时把公钥证书配置在服务端;
2、发送方使用私钥对报文进行签名,并将签名内容和报文一起发送给服务端。
3、接收方收到报文之后,利用发送方的公钥对内容进行校验,验证是发送方送过来的内容。
浏览器中利用HTTPS打开网页的时候,有一个验证服务端证书的过程,主要就是利用服务端给的公钥进行验证是否为正确的服务方。
2.1.2 防明文窃取-加密:
在互联网网络中传输明文数据是一件很不安全的事情,因为攻击者可以伪装中间者就可以很轻松的获取到明文的数据。所以在网络传输中,加密传输是一件常见的解决方案。
加密分为对称加密和非对称加密。一般情况加可以使用非对称加密算法进行解决网络传输的问题。
客户端将数据发送给服务端时,可以使用服务端的公钥进行加密,服务端接收到报文之后,利用自己的私钥进行解密。
因为私钥只存储在服务端,所以当加密报文被截取时,其他人就很难破解明文数据。
2.1.3 防篡改-摘要:
在网络传输中,另外一个问题就是如何避免数据被篡改,这个时候最简单的做法就是将报文和时间戳拼接之后利用摘要算法(如SHA-256)生成摘要,然后同报文一起传输给服务端。
服务端收到报文之后,利用同样的算法对报文和时间戳进行运算,计算出摘要,然后跟客户端的摘要进行比对,如果摘要不正确则数据有可能被篡改过。
2.1.4 综合方案:
加密可以和签名结合起来进行双重验证,当客户端和服务端交换公钥之后。客户端先生成报文摘要,再利用自己的私钥进行签名,然后再用服务端的公钥进行加密。这样子可以确保数据是正确的客户端发送过来,而且也很难破解明文数据。
2.2、数据存储
数据的问题:指当数据被泄露之后,其敏感数据被破解并获取的问题。
其解决方式:
1、密码加密存储
2、客户敏感信息存储
3、日志脱敏存储等
2.3、数据访问权限
数据访问权限问题:指数据被没有权限的用户、或者其他客户进行获取的问题。主要有以下几个问题:垂直越权、水平越权、未授权访问。
垂直越权:指使用权限低的用户可以访问到权限较高的用户
水平越权:指相同权限下不同的用户可以互相访问
未授权访问:指的是未赋予权限的用户,能够访问功能