软件安全设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
安全设计
1.在一个流程中,要通过时间戳/IP防止重放,要保证身份的唯一性。
2.用户登录后必须分配新的会话标识,不能继续使用用户未登录前所使用的标识。
3.系统帐户注册过程应验证其凭据找回渠道的有效性和真实性(如:邮箱、手机号必须真实且为帐户注
册人持有)。
4.根据访问日志,我们能及时能够检测到入侵的行为,能够记录入侵的源IP、攻击的类型、攻击的目的、
攻击的时间,并在发生严重入侵事件时进行告警。
5.针对不同用户访问不同操作,所有用户有自己的归属组,每个用户要有权限控制。
6.系统应对所有网页和资源的访问进行身份认证,除了设定为对公众开放的资源(如:网厅首页)。
7.
8.系统应拒绝所有认证失败的访问并提示错误。
9.系统应采用实施适当的访问控制措施,防止服务器上的其他用户未经授权访问服务器端的会话数据。
10.浏览器版本、访问IP、访问时间、当前操作的用户名称、具体操作内容。
11.如果系统必须颁发初始密码,应该避免使用统一的用户初始口令,应强制要求用户在初次登录系统时
修改初始密码。
12.对成功登陆后的用户,还需要根据用户实际授权去验证是否有某个操作的执行权限。
13.应设置连续登陆失败次数阈值,一定时间内登录失败次数超过阈值应自动锁定账号。
14.系统帐户密码的更改及重新设定,应具备二次认证机制。其安全控制措施不应少于帐户的注册及认证。
15.当用户帐户发生密码重置或修改行为,应及时通知用户(如:短信或邮件)。
16.对未经过成功登录的用户,不允许访问除登录页外的任何一个后台程序页面。
17.应启用登录失败处理功能,可采取结束会话和自动退出等措施。
18.系统应将用户最后一次登陆帐户的结果(如:成功或不成功),在用户下一次登录成功后进行提示。
19.配置文件不能允许用户直接访问,对配置文件中有特殊安全要求的配置项需要进行加密处理。
20.系统应规定一个会话最大空闲时间。
21.系统应具备会话超时机制,用户通过互联网与系统Web服务器建立的会话处于非活跃一定时间后,系
统Web服务器设备应自动终止会话。
22.上传文件(包含图像),应放到应用系统外的目录。
23.根据访问日志,我们能及时能够检测到入侵的行为,能够记录入侵的源IP、攻击的类型、攻击的目的、
攻击的时间,并在发生严重入侵事件时进行告警。
24.系统应设置鉴别警示信息,当发现并阻止用户试图越权访问信息的行为时,应进行提示并描述未授权
访问可能导致的后果。
25.跨站点攻击的预防。
26.系统应对与涉及敏感信息(如:卡密、详单等)或功能的外部系统(如:BSS)连接进行二次认证(如:
手机短信动态口令验证)。
27.系统应采用实施适当的访问控制措施,防止服务器上的其他用户未经授权访问服务器端的会话数据。
28.系统应使用会话管理控制程序,系统应只响应被控制程序标识为有效的会话。
安全编码
1.程序中的使用了关键资源后,必须进行显式释放和关闭,尤其是数据库连接、文件句柄等资源。
2.对登录认证失败提示中不应指明具体失败的原因或字段,比如,应使用“无效的用户名或密码”来代
替“无效的用户名”或“密码错误”。
3.避免出现一些详细的错误消息。
4.系统应采用加密连接或数据加密发送认证信息(如:密匙和凭据)。
5.使用参数化的过滤性语句。
6.对登录后如果使用Session验证,对Session有效期不可以设置太长,建议为15~30分钟。
7.应对用户登录口令、个人信息、交易记录、充值卡密等重要信息数据进行加密存贮。
8.不应在url中显示会话标识符、错误信息或日志,会话标识符应只包含于HTTP cookie头中(如:不应
通过GET参数传递会话标识符)。
9.地址栏变量需进行验证。
10.包含的特征组(如:大小写字母、数字组合,去掉歧义字符,0和o、l和1、z和2、q和9。)。
11.开发内部要严格控制生产数据库用户口令,对特定模块的开发人员只开发特定模块相关表的操作权限。
12.系统应只使用HTTP POST请求发送身份验证凭据。
13.应对保留在系统上的BSS系统敏感信息(如:详单、个人信息)进行加密存储。
14.对基于Java2EE的WEB应用,配置文件则一律放置到WEN-INF文件夹内部。
15.对任何输入内容进行检查,所有提交的表单数据,都必须验证两次,尤其是必填项,需同时验证是否
输入、格式正确性。
16.对于密码的存储,一律采用不可逆加密方式存储(如MD5),如果发生密码遗忘,则提供密码
17.在确定会话ID的长度以及生成ID的随机种子之前,不应相信web程序的容器,因为会话ID太短很容
易被暴力猜解,如果攻击者能猜到授权用户的会话ID就可以接管用户的会话。
1.会话标识必须足够随机,在Unix平台上,从/dev/urandom读取16字节可以给出相当高质量的随机序
列,在Java中,使用SecureRandom类,不要使用Random类,SecureRandom类的默认构造方法可以正确选种,Java会自动获取一个信息熵比较平均的值。
18.系统的所有身份认证过程应在可信系统上进行(如:服务器端),防止攻击者绕过请求页面和浏览器,
直接与应用服务器进行通信(如:不应使用JavaScript的验证逻辑,JavaScript可以帮助合法的用户对不正常的输入信息进行检测,但是不能确保服务器接收到数据的安全性)。
19.系统不应将SSL设置为可选的方案,不应在使用443端口(SSL通信端口)的同时也接受80端口(一
般的HTTP服务端口)请求,不应允许用户选择安全级别。
20.