当前位置:文档之家› 应用系统安全开发技术规范培训资料

应用系统安全开发技术规范培训资料

应用系统安全开发技术规范培训资料1、3)朗新科技股份有限公司二〇一五年二月更改履历版本号修改编号更改时间更改的图表和章节号更改简要描述更改人批准人0、5xx-11-24初稿施伟施伟1、0xx-11-19修改宋月欣陈志明1、1xx-11-30修改宋月欣陈志明1、2xx-12-3修改宋月欣施伟1、3xx-12-3修改施伟注:更改人除形成初稿,以后每次修改在未批准确认前均需采用修订的方式进行修改。

目录1背景与目标12安全编程概念12、1安全编程12、2结构化编程22、3脆弱性22、4可信计算22、5安全可信模块32、6不可信任模块32、7敏感信息32、8特权32、9信息隐藏32、10中间件32、11死锁42、12可信边界42、13元字符42、14参数化查询42、15UNIX JAIL环境42、16临时文件42、17信息熵52、18SSL52、19TLS52、20HTTPS52、21Http会话52、22Cookie62、23HttpOnly Cookie63安全编程原则63、1统一的安全规范63、2模块划分63、3最小化功能73、4最小化特权73、5对多任务、多进程加以关注73、6界面输出最小化73、7使代码简单、最小化和易于修改83、8避免高危的服务、协议83、9数据和代码分离83、10关键数据传输保护83、11禁止赋予用户进程特权83、12使用适当的数据类型93、13使用经过验证的安全代码93、14使用应用中间件93、15设计错误、异常处理机制93、16提供备份机制93、17检查传递变量的合法性93、18检查所有函数返回代码93、19修改面向用户的操作的反馈缺省描述93、20文件操作的要求103、21其他编码原则104应用安全分析114、1安全需求114、2安全威胁114、2、1Web安全漏洞114、2、2拒绝服务攻击124、2、3嗅探攻击124、2、4中间人攻击124、3安全约束135安全编程要求135、1输入处理135、1、1建立可信边界135、1、2验证各种来源的输入145、1、3保证所有的输入信息是被验证过的145、1、4对输入内容进行规范化处理后再进行验证155、1、5选择合适的数据验证方式155、1、6防范元字符攻击155、1、7拒绝验证失败的数据155、1、8在服务端进行验证155、1、9建立统一的输入验证接口165、1、10控制写入日志的信息165、1、11从服务器端提取关键参数165、2输出处理165、2、1限制返回给客户的信息165、2、2建立错误信息保护机制165、3数据库访问165、3、1合理分配数据库访问权限165、3、2合理存放数据库连接帐号和密码信息175、3、3使用参数化请求方式175、3、4对 SQL 语句中来自于不可信区域的输入参数进行验证185、3、5对数据库操作的返回数据进行验证185、3、6分次提取数据185、3、7通过 row(行)级别的访问控制来使用数据库185、3、8确保数据库资源被释放185、4文件操作195、4、1对上传文件进行限制195、4、2把文件名以及文件内容作为不可信的输入对待195、4、3安全的使用文件名195、4、4使用文件系统访问控制195、4、5注意文件访问竞争条件195、4、6安全使用临时文件205、4、7确保文件系统资源被释放206安全特征206、1关注应用的对象重用206、2用户访问控制信息的机密性206、3不要在客户端存放敏感数据206、4避免内存溢出216、5可配置数据保护216、6禁止在源代码中写入口令216、7随机数216、8使用可信的密码算法226、9异常管理227应用安全设计规范237、1应用安全规划237、2数据安全等级划分237、3数据库规划237、3、1用户权限237、3、2数据源设计237、3、3外部系统访问237、4角色划分247、5URL规划247、6程序文件目录规划247、6、1数据及程序分离2 47、6、2静态程序资源247、6、3程序文件分类247、7Cookie247、8文件安全257、8、1文件存储257、8、2文件操作257、8、3文件类型257、9第三方组件安全257、9、1组件兼容性257、9、2组件安全及成熟度2 57、9、3组件配置257、10Web Service257、11RESTful Web Service2 67、12应用安全关注点277、13应用安全限制应对方案2 97、13、1外网隔离297、13、2外网文件操作297、13、3正向和反向隔离装置(国网系统)298应用安全开发规范308、1Java及Web安全编程规范308、1、1不信任未知308、1、2数据层开发308、1、3会话管理328、1、4Cookie338、1、5输入验证338、1、6输入文件名的验证348、1、7输出处理348、1、8敏感信息处理368、1、9异常信息处理378、1、10特殊页面跳转378、1、11文件操作378、1、12资源释放388、1、13内存控制388、1、14外部程序调用漏洞388、1、15整数溢出398、2C++安全编程规范398、2、1不信任未知398、2、2免缓存区溢出408、2、3免缓整数溢出428、2、4域名合法性检查458、2、5检查返回值468、2、6产生随机数478、2、7验证输入文件名488、2、8类设计注意事项488、2、9外部程序调用漏洞508、2、10临时文件处理50应用系统安全开发技术规范1 背景与目标在Internet大众化及Web 技术飞速演变的今天,Web安全所面临的挑战日益严峻。

黑客攻击技术越来越成熟和大众化,针对Web的攻击和破坏不断增长,Web 安全风险达到了前所未有的高度。

许多程序员不知道如何开发安全的应用程序,开发出来的Web应用存在较多的安全漏洞,这些安全漏洞一旦被黑客利用将导致严重甚至是灾难性的后果。

这并非危言耸听,类似的网上事故举不胜举,公司的Web产品也曾多次遭黑客攻击,甚至有黑客利用公司Web产品的漏洞敲诈运营商,造成极其恶劣的影响。

本规范为解决Web应用系统安全问题,对主要的应用安全问题进行分析,并有针对性的从设计及开发规范、开发管理、安全组件框架、安全测试方面提供整体的安全解决方案。

使本组织能以标准的、规范的方式设计和编码。

通过建立编码规范,以使每个开发人员养成良好的编码风格和习惯;并以此形成开发小组编码约定,提高程序的可靠性、可读性、可修改性、可维护性和一致性等,增进团队间的交流,并保证软件产品的质量。

2 安全编程概念2、1 安全编程安全编程是指开发人员首先需要具备一定的安全知识,然后识别数据在流转(输入、处理和输出)过程中可能面对的威胁,对这些威胁进行分析得出其利用的漏洞,通过合理地编写代码消除这些漏洞,降低软件面临的风险。

本规范对开发人员的编码提出统一的安全要求,主要涉及输入处理、输出处理、数据库访问、文件操作、异常管理等方面,如下图:输入处理部分能指导开发者避免用户的不良输入;输出处理能指导开发者对输出内容进行过滤;数据库访问、文件操作部分则能指导开发者进行数据库查询,写入文件等操作时进行防护;而异常管理、敏感数据保护、对象重用等技术则指导开发者改进软件的自身缺陷。

W EB 开发规范部分则指导用户在WEB 系统( B/S 架构应用)的研发方面时如何增加对应用软件的保护。

2、2 结构化编程结构化编程,一种编程典范。

它采用子程序、程式码区块、for循环以及while循环等结构,来取代传统的goto。

希望借此来改善计算机程序的明晰性、品质以及开发时间,并且避免写出面条式代码。

2、3 脆弱性脆弱性指计算机系统安全方面的缺陷,使得系统或其应用数据的保密性、完整性、可用性、访问控制、监测机制等面临威胁。

2、4 可信计算可信计算的行为会更全面地遵循设计,而执行设计者和软件编写者所禁止的行为的概率很低。

2、5 安全可信模块审计和访问控制模块是唯一的安全可信模块。

2、6 不可信任模块除审计和访问控制模块外其它所有模块均为不可信模块。

2、7 敏感信息系统的敏感信息包括用户身份信息、认证信息、授权信息、交易过程中的私密或隐私信息、其它的敏感信息。

2、8 特权特权只是允许去做并不是每个人都可以做的事情。

2、9 信息隐藏信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。

信息隐藏基本原理框图:2、10 中间件中间件是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通、中间件技术创建在对应用软件部分常用功能的抽象上,将常用且重要的过程调用、分布式组件、消息队列、事务、安全、连结器、商业流程、网络并发、HTTP服务器、Web Service等功能集于一身或者分别在不同品牌的不同产品中分别完成。

2、11 死锁死锁是操作系统或软件运行的一种状态:在多任务系统下,当一个或多个进程等待系统资源,而资源又被进程本身或其它进程占用时,就形成了死锁。

2、12 可信边界可信边界可以被认为是在程序中划定的一条分隔线,一边的数据是不可信的而另一边则是可信的。

当数据要从不可信的一侧到可信一侧的时候,需要使用验证逻辑进行判断。

2、13 元字符元字符就是在编程语言中具有特定含义的字符或者字符串。

例如在 SQL 查询中,单引号(‘)是危险的字符;在文件系统路径中两个点号(、、)是危险的字符;在命令shell 中,分号(;)和双 &(&&)符号同样是危险的字符,而换行符(\n)对日志文件很关键。

2、14 参数化查询参数化查询(Parameterized Query 或Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击(SQL Injection)的攻击手法的防御方式。

2、15 UNIX JAIL环境一个被改变根目录的程序不可以访问和命名在被改变根目录外的文件,那个根目录叫做“chroot监狱(chroot jail,chroot prison)”。

2、16 临时文件创建临时文件的程序会在完成时将其删除。

2、17 信息熵信息熵指信息的不确定性,一则高信息度的信息熵是很低的,低信息度的熵则高。

2、18 SSL安全套接层(Secure Sockets Layer,SSL),一种安全协议,是网景公司(Netscape)在推出Web浏览器首版的同时提出的,目的是为网络通信提供安全及数据完整性。

SSL在传输层对网络连接进行加密。

SSL采用公开密钥技术,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

相关主题