安全开发不能不知道的8大防范措施
苍穹ISV产品上架到应用市场前,需要经过安全测试,而部分产品在进行安全测试时经常会出现安全漏洞。
因此,本文针对该问题,提炼了在苍穹安全开发过程中需要特别关注的8大防范措施,以尽量避免安全漏洞的产生。
注:本文适用于基于苍穹平台进行开发的相关人员。
在苍穹安全开发过程中,需要关注敏感信息泄露防范、注入防范、失效的身份认证和会话管理防范、XXE外部实体注入防范、安全配置错误防范、跨站脚本(XSS) 防范、使用第三方组件漏洞防范、自测漏洞防范等8大防范措施。
下面,小编为大家逐一介绍8大防范措施的具体内容。
1 敏感信息泄露防范
敏感信息泄露是苍穹ISV产品进行安全测试时出现最频繁的问题,主要分为3个方面。其具体表现与解决方案如下:
1. 代码中存在硬编码敏感信息,如账号、密码、http外链、ftp外链等;配置文件、SQL脚本等文件中存在明文密码等敏感信息;
推荐解决方案:
1)将密码等敏感信息加密后存入MC,代码再获取MC的值,通过解密得到具体的密码值,加密算法建议采取AES256或者SHA256。
注:
a. 关于MC的具体介绍可参考文章“从0到1结识苍穹MC,看这篇就够了!”;
b. 关于MC属性值可参考存取MC属性值 。
2)所有的外链都必须写在配置文件,或者存放数据库中,产品默认的外链需要说明原因。
2. 页面明文显示敏感信息,如下图所示:
推荐解决方案:启用苍穹控件的内容显示为密码属性,并采用合适的加密算法,将敏感信息加密后存库,需要使用时再进行解密使用。
3. 页面明文显示相关SQL语句,如下图所示:
推荐解决方案:直接暴露SQL语句会造成数据库泄露,必须禁止。如遇类似的需求,可以设计为执行SQL脚本的形式。
敏感信息泄露防范小结
首先,先确认哪些数据是敏感数据,需要被加密。例如:密码、信用卡账号、个人信息等应该被加密。
然后,针对这些数据,需核查以下几点:
1)当这些数据被长期存储的时候,无论存储在哪里,它们是否都被加密?特别是对这些数据的备份是否被加密;
2)无论内部数据还是外部数据,传输时是否是明文传输?
3)是否使用了任何旧的或脆弱的加密算法?
4)加密密钥的生成是否是脆弱的,或者缺少恰当的密钥管理或缺少密钥回转?
注:密钥回转,指的是通过密钥将数据替换成为另一个完全不相同的数据,并把加密后的数据重新解密成加密前的数据。
5)当浏览器接收或发送敏感数据时,是否有浏览器安全问题?
最后,根据核查结果作相应的加密处理、算法优化、密钥管理升级等。
2 注入防范
基于苍穹的开发可以不关注以下防范措施,苍穹已经做了对应的防范并已通过安全测试,但使用第三方系统、第三方API或开放API时,需要特别关注以下防范措施。
1. 参数校验:
传递的参数做校验,如果不合法,直接拒绝请求。
1) 如果是数字类型,判断是否为数字,如果不是,直接拒绝请求;
2) 如果是有格式的类型(比如日期、email、电话、身份证号码等等),判断是否符合格式,如果不符合格式,拒绝请求;
3) 如果是没有特殊格式的字符串类型,需要对字符串长度做校验。如果长度大于数据库该字段的定义长度,直接拒绝请求(比如姓名,数据库定义的是 varchar(12),如果输入超过12个字符,直接拒绝请求)。
2. 使用PrepareStatement,禁止使用 Statement:
PrepareStament可以有效防御SQL注入攻击,其原理是:MySQL执行树会根据预设的参数做转义,把注入的SQL当作一个参数执行,而不会当作语句执行;
3. 做好数据库权限限制:
1) selectinformation_schema权限不能开放给业务账号。
因为一旦某个漏洞被成功注入,information_schema库将暴露所有库、所有表、字段的定义,给SQL注入者提供了便利。注入者不需要猜测表结构,就能轻松获取所有表的定义,进而轻松获取所有表的数据。
2) 各个业务账号只能访问自己业务的数据。
3 失效的身份认证和会话管理防范
基于苍穹的开发可以不关注以下防范措施,苍穹已经做了对应的防范并已通过安全测试,但使用第三方系统、第三方API或开放API时,需要特别关注,并做好以下防范措施。
1. 用户身份验证凭证使用哈希或加密保护;
2. 认证凭证应做到不可猜测或者无法通过薄弱的帐户管理功能(例如:账户创建、密码修改、密码恢复、弱会话ID等)重写;
3. 会话 ID不能暴露在URL里(例如URL重写),且不能轻易受到会话固定(sessionfixaPon)的攻击;
4. 会话 ID应设置超时限制,或者当用户会话或身份验证令牌(特别是单点登录令牌)在用户注销时,自动失效;
5. 成功登录后,会话ID应有轮转;
6. 密码、会话 ID和其他认证凭据应使用加密链接传输。
4 XXE外部实体注入防范
对于XXE外部实体注入,可通过以下两个方面进行防范:
1. 禁用xml外部实体;
2. 过滤xml外部实体的关键字,过滤<!DOCTYPE>, <!ENTITY>, SYSTEM 等。
5 安全配置错误防范
对于安全配置错误,可通过核查以下五个方面进行防范:
1. 是否有软件没有被及时更新?包括操作系统、Web应用服务器、数据库管理系统、应用程序和其它所有的代码库文件。
2. 是否使用或安装了不必要的功能?(例如:端口、服务、网页、帐户、权限)
3. 默认帐户的密码是否仍然可用或没有更改?
4. 错误处理设置是否防止堆栈跟踪和其他含有大量信息的错误消息被泄露?
5. 开发框架(比如:Struts、Spring、ASP. NET)和库文件中的安全设置是否理解正确并配置恰当?
特别提示:生产必须关闭【异常显示配置功能】(具体路径为:【配置工具】→【系统参数】→【公共参数】→【异常显示配置】),否则会传输详细的堆栈信息到前端,泄露数据库执行命令,存在SQL注入风险。
6 跨站脚本(XSS) 防范
基于苍穹控件的开发可以不关注以下防范措施,苍穹已经做了对应的防范并已通过安全测试,但使用自定义控件时,需要特别关注,做好防范措施。
最佳防范措施就是对数据将要置于的HTML上下文(包括主体、属性、JavaScript、CSS或URL)的所有不可信数据进行恰当的转义(escape),例如:对特殊符号< >进行html编码输出。
7 使用第三方组件漏洞防范
使用第三方组件时,需先检查组件的安全性。
1. 存在漏洞的第三方组件示例:JUnit
2. 不存在漏洞的第三方组件示例:lombok
注:检测第三方主件漏洞,可点击该网址进行。
8 自测漏洞防范
如果项目中有开发自定义控件和使用到第三方开源软件时,可以使用Dependency-check软件检测整个产品的安全性来确定是否存在安全漏洞问题。
1. 存在问题示例:
2. 不存在问题示例:
注:Dependency-check软件检测的使用教程可点击该链接参考。
以上就是本期的全部内容啦。读完文章的你,安全开发意识是否有所提升呢?
#往期推荐#
更多精彩内容,“码”上了解!↓
安全开发不能不知道的8大防范措施
本文2024-09-23 01:12:02发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144412.html