下面的系列文章主要围绕《GB/T 38674—2020 信息安全技术 应用软件安全编程指南》进行讲解,该标准是2020年4月28日,由国家市场监督管理总局、国家标准化管理委员会发布,2020年11月01日开始实施。我们对该标准中一些常见的漏洞进行了梳理,大家感兴趣的话可以自己去下载下来学习一下,里面有一些最佳实践是比较好的。
本标准从程序安全和环境安全两个方面提出了提升应用安全性的编程最佳实践。其中,程序安全部分描述软件在资源使用、代码实现、安全功能方面的安全性规范,环境安全部分描述软件的安全管理配置规范。前面的文章为大家讲解了程序安全和代码安全,本文我们针对资源使用安全的数据库管理和文件管理部分进行解读。
资源使用安全,主要包括:资源管理 、内存管理 、数据库管理 、文件管理 、网络传输这几部分。
【数据库管理】
1.当应用程序访问数据库时,仅提供给应用程序满足其需求的最低权限,以降低访问数据库的风险。
2.规定不同信任级别用户连接数据库的角色,比如用户、只读用户、访问用户、管理员。
这部分主要讲的数库的访问和连接,访问的时候,使用最低权限就可以了,连接的时候使用分配的角色就可以了,不要把SA的权限给系统。现在很多系统还是使用SA账号来连接数据库,没有新建角色,这样就很容易被黑客攻击。
3.使用行级别的访问控制,禁止依赖应用程序访问控制来保护数据库的数据,限制每个请求使用用户只能访问他们自己的数据。
在用户层面,用户在访问自己信息的时候,只能访问到自己的这一行,不能再访问其他人的。
4.及时释放数据库资源,例如连接、游标等。
也有一些框架在用完之后会自动释放,尽量用这些框架式的比较好一些。
【文件管理】
1.确保及时释放文件系统资源
(1)保证诸如文件句柄之类的文件系统访问结构在不再需要时会被及时释放。
(2)禁止依赖JAVA和.NET等的垃圾回收机制来回收资源。
2.使用安全的临时文件
最小化临时文件存储时间,并及时删除临时文件。
3.检测和处理文件相关的错误。
4.禁止传递目录或绝对路径给用户,建议使用预先设置的路径列表中的匹配索引值。
在访问的时候,尽量用我们预先设计好的路径让用户去选择、匹配,不要让用户自己输入,自己输入的话很容易产生目录遍历的漏洞。
比如说我们下载文件的时候,我们可能会给用户一个下载链接,黑客可以通过这个链接直接到了目录的层级,把目录中的所有文件都看到了。所以开发在做的时候需要注意,在目录部分要做防护,用户能访问到哪个文件就只给他哪个文件的权限。