最小的限度。 规则3.4.4:对于运行应用程序的操作系统帐号,不应使用“root”、“administrator”、“supervisor”等特权帐号或高级别权限帐号,应该尽可能地使用低级别权限的操作系统帐号。
规则3.4.5:对于应用程序连接数据库服务器的数据库帐号,在满足业务需求的前提下,必须使用最低级别权限的数据库帐号。
说明:根据业务系统要求,创建相应的数据库帐号,并授予必需的数据库权限。不能使用“sa”、“sysman”等管理帐号或高级别权限帐号。 3.5 敏感数据保护 3.5.1 敏感数据定义
敏感数据包括但不限于:口令、密钥、证书、会话标识、License、隐私数据(如短消息的内容)、授权凭据、个人数据(如姓名、住址、电话等)等,在程序文件、配置文件、日志文件、备份文件及数据库中都有可能包含敏感数据。 3.5.2 敏感数据存储
规则3.5.2.1:禁止在代码中存储敏感数据。
说明:禁止在代码中存储如数据库连接字符串、口令和密钥之类的敏感数据,这样容易导致泄密。用于加密密钥的密钥可以硬编码在代码中。
规则3.5.2.2:禁止密钥或帐号的口令以明文形式存储在数据库或者文件中。 说明:密钥或帐号的口令必须经过加密存储。例外情况,如果Web容器的配置文件中只能以明文方式配置连接数据库的用户名和口令,那么就不用强制遵循该规则,将该配置文件的属性改为只有属主可读写。
规则3.5.2.3:禁止在 cookie 中以明文形式存储敏感数据。
说明:cookie信息容易被窃取,尽量不要在cookie中存储敏感数据;如果条件限制必须使用cookie存储敏感信息时,必须先对敏感信息加密再存储到cookie。 规则3.5.2.4:禁止在隐藏域中存放明文形式的敏感数据。 规则3.5.2.5:禁止用自己开发的加密算法,必须使用公开、安全的标准加密算法。 实施指导:
场景 1:后台服务端保存数据库的登录口令
后台服务器登录数据库需要使用登录数据库的明文口令,此时后台服务器加密保存该口令后,下次登录时需要还原成明文,因此,在这种情况下,不可用不可逆的加密算法,而需要使用对称加密算法或者非对称加密算法,一般也不建议采用非对称加密算法。
推荐的对称加密算法:AES128、AES192、AES256。 场景 2:后台服务端保存用户的登录口令
在该场景下,一般情况是:客户端提交用户名及用户口令,后台服务端对用户名及用户口令进行验证,然后返回验证的结果。此时,在后台服务端,用户口令可以不需要还原,因此建议使用不可逆的加密算法,对“用户名+口令”字符串进行加密。
推荐的不可逆加密算法: SHA256、SHA384、SHA512,HMAC-SHA256、HMAC-SHA384、HMAC-SHA512。
规则3.5.2.6:禁止在日志中记录明文的敏感数据。
说明:禁止在日志中记录明文的敏感数据(如口令、会话标识jsessionid等),防止敏感信息泄漏。
规则3.5.2.7:禁止带有敏感数据的Web页面缓存。
说明:带有敏感数据的Web页面都应该禁止缓存,以防止敏感信息泄漏或通过代理服务器上网的用户数据互窜问题。 实施指导:
在HTML页面的
标签内加入如下代码:
在JSP页面的最前面加入如下代码: <%
response.setHeader(\ response.setHeader(\ response.setDateHeader(\ %> 注意:以上代码对于采用强制缓存策略的代理服务器不生效(代理服务器默认是不缓存的),要防止代理服务器缓存页面,可以在链接后加入一个随机数pageid,此时链接变成:http://localhost:8080/query.do?a=2&pageid=2245562, 其中2245562数字是随机生成的,每次请求此页面时,随机数都不同,IE始终认为此为一个新请求,并重新解析,生成新的响应页面。 3.5.3 敏感数据传输
规则3.5.3.1:带有敏感数据的表单必须使用 HTTP-POST 方法提交。 说明:禁止使用 HTTP-GET 方法提交带有敏感数据的表单(form),因为该方法使用查询字符串传递表单数据,易被查看、篡改。如果是使用servlet处理提交的表单数据,那么不在doGet方法中处理,只在doPost方法处理。 实施指导:
1. 对于JSP页面,将表单的属性method赋值为\,如下