应用系统安全开发技术规范V1.3

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.系统调用只在确实需要的时候。
3.一次只执行一个任务。
4.只有在上一个任务完成后才开始下一个任务。
5.只在确实需要的时候访问数据。
3.4
1.只为程序中需要特权的部分授与特权。
2.只授与部分绝对需要的具体特权。
3.将特权的有效时间或者可以有效的时间限制到绝对最小。
3.5
软件开发应尽量使用单任务的程序。如果软件需要使用多任务和多进程,应该认真分析研究多任务和多进程会不会发生冲突,同步所有的进程和任务以避免冲突。同时作为结构化的编程,每个原子化组件都要保证一个入口和一个出口。如果进程之间需要交互,则这些交互操作应同步。对于每一种可能的交互情况都要考虑相关的安全策略。
2.21
在计算机科学领域来说,尤其是在网络领域,会话(session)是一种持久网络协议,在用户(或用户代理)端和服务器端之间创建关联,从而起到交换数据包的作用机制,session在网络协议(例如telnet或FTP)中是非常重要的部分。
在不包含会话层(例如UDP)或者是无法长时间驻留会话层(例如HTTP)的传输协议中,会话的维持需要依靠在传输数据中的高级别程序。例如,在浏览器和远程主机之间的HTTP传输中,HTTP cookie就会被用来包含一些相关的信息,例如session ID,参数和权限信息等。
宋月欣
施伟
1.3
2015-12-3
修改
施伟
注:更改人除形成初稿,以后每次修改在未批准确认前均需采用修订的方式进行修改。
1
在Internet大众化及Web技术飞速演变的今天,Web安全所面临的挑战日益严峻。黑客攻击技术越来越成熟和大众化,针对Web的攻击和破坏不断增长,Web安全风险达到了前所未有的高度。
2.信息隐藏是不可靠、效率低的做法,软件应该使用正确的安全保护措施,不要依赖隐藏进行数据保护。
3.11
用户进程的授权应采用最小授权法,对于软件的普通用户进程,禁止赋予该类进程特权用户权限。特权用户类型包括:
1.超级用户。
2.直接操作数据库用户。
3.安全管理用户。
3.12
应该小心使用数据类型,尽量使用占用内存较小的数据类型,如可用整型数据的不用实型,特别是在程序接口部分。例如,在一些编程语言中signed和unsigned的数据类型是视为不同的(如C或者C++语言)。
2.4
可信计算的行为会更全面地遵循设计,而执行设计者和软件编写者所禁止的行为的概率很低。
2.5
审计和访问控制模块是唯一的安全可信模块。
2.6
除审计和访问控制模块外其它所有模块均为不可信模块。
2.7
系统的敏感信息包括用户身份信息、认证信息、授权信息、交易过程中的私密或隐私信息、其它的敏感信息。
2.8
特权只是允许去做并不是每个人都可以做的事情。
当客户端在多个服务器调取数据时,保持会话状态的一致性是需要注意的,客户端需用同时保持和某一个主机的连接,或者多个服务器端需要共享一个储存会话信息的文件系统或者数据库。否则,当用户在一个新的而不是一开始保存会话信息的主机上提交访问请求的时候,主机会因为无法获知原来主机的会话的访问状态而产生问题。
2.22
Cookie(复数形态Cookies),中文名称为小型文本文件或小甜饼,指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。定义于RFC2109。为网景公司的前雇员Lou Montulli在1993年3月所发明。
2.23
HttpOnly是包含在Http响应头信息Set-Cookie中的一个额外标志,如果浏览器支持HttpOnly标志的话,在生成Cookie时使用HttpOnly标志可帮助减轻客户端脚本访问受保护的Cookie时带来的风险(客户端脚本不能访问HttpOnly Cookie)。
软件应尽量避免使用不加保护的及已被证明存在安全漏洞的服务和通信协议传输文件,如FTP、SMTP。
3.9
软件应该把数据与程序放置在不同的目录中,这里的数据包括远程下载文件等。
3.10
1.软件在传输关键数据时,使用加密算法保证数据在通信过程不被破译,使用数字签名保证数据在传输过程中的一致性和不可否认性。相关的加密算法和签名技术等应符合国家相关法律法规要求。
2.2
结构化编程,一种编程典范。它采用子程序、程式码区块、for循环以及while循环等结构,来取代传统的goto。希望借此来改善计算机程序的明晰性、品质以及开发时间,并且避免写出面条式代码。
2.3
脆弱性指计算机系统安全方面的缺陷,使得系统或其应用数据的保密性、完整性、可用性、访问控制、监测机制等面临威胁。
应用系统安全开发技术规范
(版本号 V1.3)
朗新科技股份有限公司
二〇一五年十二月
更改履历
版本号
修改编号
更改时间
更改的
图表和章节号
更改简要描述
更改人ຫໍສະໝຸດ Baidu
批准人
0.5
2013-11-24
初稿
施伟
施伟
1.0
2015-11-19
修改
宋月欣
陈志明
1.1
2015-11-30
修改
宋月欣
陈志明
1.2
2015-12-3
修改
2.9
信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。
信息隐藏基本原理框图:
2.10
中间件是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通.中间件技术创建在对应用软件部分常用功能的抽象上,将常用且重要的过程调用、分布式组件、消息队列、事务、安全、连结器、商业流程、网络并发、HTTP服务器、Web Service等功能集于一身或者分别在不同品牌的不同产品中分别完成。
3
3.1
每个软件项目在设计阶段都应明确在项目实施过程中项目组应遵循的统一规范,具体包括:
1.命名规则、组件使用规范、异常处理规范、日志处理规范、工具使用要求、代码集成规范。
2.针对本规范提出的主要代码脆弱性应进行相应的防范设计,具体内容应在软件概要设计中体现或有单独的文档体现。
3.2
1.软件应该按照安全性划分模块,审计和访问控制模块为安全可信模块,其它模块为不可信任模块。只有安全可信模块才可以执行安全控制功能,其它的模块不能访问安全可信模块的安全信息、功能或者权限。安全可信模块应该与其它模块分离,由经授权的内部专人进行管理。
3.19
应对面向用户的操作的反馈缺省描述进行必要的封装,删除有关后台系统或其它敏感信息。
2.只有安全可信模块,才能以高安全等级访问系统的敏感信息,对于其他模块限制其访问敏感信息。
3.3
根据“没有明确允许的就默认禁止”的原则,软件应只包含那些为达到某个目标而确实需要的功能,不应包含只是在将来某个时间需要但需求说明书中没有的功能。软件在最小化功能建设方面应遵循如下原则:
1.只运行明确定义的功能。
2.13
元字符就是在编程语言中具有特定含义的字符或者字符串。例如在SQL查询中,单引号(‘)是危险的字符;在文件系统路径中两个点号(..)是危险的字符;在命令shell中,分号(;)和双&(&&)符号同样是危险的字符,而换行符(\n)对日志文件很关键。
2.14
参数化查询(Parameterized Query或Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数(Parameter)来给值,这个方法目前已被视为最有效可预防SQL注入攻击(SQL Injection)的攻击手法的防御方式。
输入处理部分能指导开发者避免用户的不良输入;输出处理能指导开发者对输出内容进行过滤;数据库访问、文件操作部分则能指导开发者进行数据库查询,写入文件等操作时进行防护;而异常管理、敏感数据保护、对象重用等技术则指导开发者改进软件的自身缺陷。WEB开发规范部分则指导用户在WEB系统(B/S架构应用)的研发方面时如何增加对应用软件的保护。
3.13
使用经过验证的安全代码模块和外部源程序,防止潜在的安全风险。
3.14
中间件作为一种应用层架构,软件设计应尽可能使用中间件,中间件选型时应选择成熟的、业界主流的中间件产品。
3.15
软件设计开发时应建立防止系统死锁的机制,异常情况的处理和恢复机制,具体包括错误和异常检测、数据回滚、安全错误通知、错误和异常记录、断点保护等。
SSL采用公开密钥技术,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。它在服务器和客户机两端可同时被支持,目前已成为互联网上保密通讯的工业标准。现行Web浏览器亦普遍将HTTP和SSL相结合,从而实现安全通信。此协议和其继任者是TLS。
2.19
SSL(Secure Sockets Layer)是网景公司(Netscape)设计的主要用于Web的安全传输协议。这种协议在Web上获得了广泛的应用。IETF(www.ietf.org)将SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),其最新版本是RFC5246,版本1.2。从技术上讲,TLS1.0与SSL3.0的差异非常微小。
许多程序员不知道如何开发安全的应用程序,开发出来的Web应用存在较多的安全漏洞,这些安全漏洞一旦被黑客利用将导致严重甚至是灾难性的后果。这并非危言耸听,类似的网上事故举不胜举,公司的Web产品也曾多次遭黑客攻击,甚至有黑客利用公司Web产品的漏洞敲诈运营商,造成极其恶劣的影响。
本规范为解决Web应用系统安全问题,对主要的应用安全问题进行分析,并有针对性的从设计及开发规范、开发管理、安全组件框架、安全测试方面提供整体的安全解决方案。
使本组织能以标准的、规范的方式设计和编码。通过建立编码规范,以使每个开发人员养成良好的编码风格和习惯;并以此形成开发小组编码约定,提高程序的可靠性、可读性、可修改性、可维护性和一致性等,增进团队间的交流,并保证软件产品的质量。
2
2.1
安全编程是指开发人员首先需要具备一定的安全知识,然后识别数据在流转(输入、处理和输出)过程中可能面对的威胁,对这些威胁进行分析得出其利用的漏洞,通过合理地编写代码消除这些漏洞,降低软件面临的风险。本规范对开发人员的编码提出统一的安全要求,主要涉及输入处理、输出处理、数据库访问、文件操作、异常管理等方面,如下图:
2.11
死锁是操作系统或软件运行的一种状态:在多任务系统下,当一个或多个进程等待系统资源,而资源又被进程本身或其它进程占用时,就形成了死锁。
2.12
可信边界可以被认为是在程序中划定的一条分隔线,一边的数据是不可信的而另一边则是可信的。当数据要从不可信的一侧到可信一侧的时候,需要使用验证逻辑进行判断。
2.15
一个被改变根目录的程序不可以访问和命名在被改变根目录外的文件,那个根目录叫做“chroot监狱(chroot jail,chroot prison)”。
2.16
创建临时文件的程序会在完成时将其删除。
2.17
信息熵指信息的不确定性,一则高信息度的信息熵是很低的,低信息度的熵则高。
2.18
安全套接层(Secure Sockets Layer,SSL),一种安全协议,是网景公司(Netscape)在推出Web浏览器首版的同时提出的,目的是为网络通信提供安全及数据完整性。SSL在传输层对网络连接进行加密。
2.20
超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定。HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输。HTTPS不应与在RFC 2660中定义的安全超文本传输协议(S-HTTP)相混。
3.16
为保证运行数据的完整性和可用性,软件开发应设计有效的备份策略,根据业务和系统维护需要提供定期或不定期、自动或手动方式的备份机制。
3.17
应检查所有传递给系统函数调用(System Calls)或本地调用(Native Calls)的变量的合法性。
3.18
应检查所有函数调用返回代码(错误代码),对每个期望的返回值设置相应的处理程序。
3.6
软件应保持用户界面只提供必须的功能,没有多余的、不必要的功能,确保用户不能通过用户界面直接访问数据或者直接访问被保护对象。
3.7
开发时应尽量使代码简单、最小化和易于修改。使用结构化的编程语言,尽量避免使用递归和Goto声明。使用简单的代码,清除不必要的功能,防止采用信息隐藏方式进行数据保护。
3.8
相关文档
最新文档