华为Web应用安全开发规范

上传人:gbs****77 文档编号:10076068 上传时间:2020-04-09 格式:DOCX 页数:25 大小:90.82KB
返回 下载 相关 举报
华为Web应用安全开发规范_第1页
第1页 / 共25页
华为Web应用安全开发规范_第2页
第2页 / 共25页
华为Web应用安全开发规范_第3页
第3页 / 共25页
点击查看更多>>
资源描述
DKBA华为技术有限公司内部技术规范DKBA 1606-XXXX.XWeb应用安全开发规范 V1.5 2013年XX月XX日发布 2013年XX月XX日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有 侵权必究All rights reserved 修订声明Revision declaration本规范拟制与解释部门:网络安全能力中心&电信软件与核心网网络安全工程部本规范的相关系列规范或文件:C&C+语言安全编程规范Java语言安全编程规范相关国际规范或文件一致性:无替代或作废的其它规范或文件:无相关规范或文件的相互关系:产品网络安全红线和电信软件与核心网业务部安全能力基线中的Web安全要求引用了本规范的内容,如果存在冲突,以本规范为准。规范号主要起草部门专家主要评审部门专家修订情况DKBA 1606-2007.4安全解决方案:赵武42873,杨光磊57125,万振华55108软件公司设计管理部:刘茂征11000,刘高峰63564,何伟祥33428安全解决方案:刘海军12014,吴宇翔18167,吴海翔57182接入网:彭东红27279无线:胡涛46634核心网:吴桂彬 41508,甘嘉栋 33229,马进 32897,谢秀洪 33194,张毅 27651,张永锋 40582业软:包宜强56737,丁小龙63583,董鹏越60793,傅鉴杏36918,傅用成30333,龚连阳18753,胡海60017320,胡海华52463,李诚37517,李大锋54630,李战杰21615,刘创文65632,刘飞46266,刘剑51690,栾阳62227,罗仁钧65560,罗湘武06277,马亮60009259,孟咏喜22499,潘海涛27360,孙林46580,王福40317,王锦亮36430,王美玲60011866,王谟磊65558,王玉龙24387,杨娟60019875,张锋43381,张健60005645,张轶57143,邹韬51591V1.0何伟祥33428刘高峰 63564,龚连阳 00129383,许汝波 62966,吴宇翔 00120395,王欢 00104062,吕晓雨 56987V1.2增加了Web Service、Ajax和上传和下载相关的安全规范。何伟祥00162822V1.3增加了防止会话固定和防止跨站请求伪造的安全规范。何伟祥00162822V1.4增加了“规则3.4.1”的实施指导;删除了“建议3.4.1”;修改了“6 配套CBB介绍”的内容和获取方式。增加了“3.9 DWR”何伟祥 00162822吴淑荣 00197720魏建雄 00222906谢和坤 00197709李田 00042091孙波 00175839朱双红 00051429王伟 00207440陈伟 00141500V1.5增加“规则3.3.9、规则3.6.5、规则4.7.1、建议4.7.2、4.8 PHP”增加“3.8 RESTful Web Service”修改“规则3.2.2.8、规则3.2.2.3、规则3.4.1、规则4.6.1”删除“3.2.1口令策略”和“规则3.1.3、规则3.2.3.8、规则4.7.1”附件文档作为对象直接插入主文档 目 录 Table of Contents1概述71.1背景简介71.2技术框架71.3使用对象81.4适用范围81.5用词约定92常见WEB安全漏洞93WEB设计安全规范103.1WEB部署要求103.2身份验证113.2.1口令113.2.2认证113.2.3验证码133.3会话管理133.4权限管理153.5敏感数据保护163.5.1敏感数据定义163.5.2敏感数据存储163.5.3敏感数据传输173.6安全审计183.7WEB SERVICE193.8RESTFUL WEB SERVICE203.9DWR214WEB编程安全规范224.1输入校验224.2输出编码254.3上传下载264.4异常处理264.5代码注释264.6归档要求274.7其他284.8PHP295WEB安全配置规范316配套CBB介绍316.1WAF CBB316.2验证码CBB327附件327.1附件1 TOMCAT配置SSL指导327.2附件2 WEB SERVICE 安全接入开发指导327.3附件3 客户端IP鉴权实施指导327.4附件4 口令安全要求327.5附件5 WEB权限管理设计规格说明书34 Web应用安全开发规范 V1.51概述1.1背景简介在Internet大众化及Web技术飞速演变的今天,Web安全所面临的挑战日益严峻。黑客攻击技术越来越成熟和大众化,针对Web的攻击和破坏不断增长,Web安全风险达到了前所未有的高度。许多程序员不知道如何开发安全的应用程序,开发出来的Web应用存在较多的安全漏洞,这些安全漏洞一旦被黑客利用将导致严重甚至是灾难性的后果。这并非危言耸听,类似的网上事故举不胜举,公司的Web产品也曾多次遭黑客攻击,甚至有黑客利用公司Web产品的漏洞敲诈运营商,造成极其恶劣的影响。本规范就是提供一套完善的、系统化的、实用的Web安全开发方法供Web研发人员使用,以期达到提高Web安全的目的。本规范主要包括三大内容:Web设计安全、Web编程安全、Web配置安全,配套CBB,多管齐下,实现Web应用的整体安全性;本规范主要以JSP/Java编程语言为例。1.2技术框架 图1 典型的Web安全技术框架图1 显示了典型的Web安全的技术框架和安全技术点,这些安全技术点,贯穿整个Web设计开发过程。上图各个区域中存在任何一点薄弱环节,都容易导致安全漏洞。由于HTTP的开放性,Web应用程序必须能够通过某种形式的身份验证来识别用户,并确保身份验证过程是安全的,同样必须很好地保护用于跟踪已验证用户的会话处理机制。为了防止一些恶意输入,还要对输入的数据和参数进行校验。另外还要考虑Web系统的安全配置,敏感数据的保护和用户的权限管理,以及所有操作的安全审计。当然还要考虑代码安全,以及其他方面的威胁。表 1 列出了一些Web缺陷类别,并针对每类缺陷列出了由于设计不当可能会导致的潜在问题。针对这些潜在的问题,本规范中有相应的解决措施。表1 Web 应用程序缺陷和由于不良设计可能导致的问题缺陷类别由于不良设计可能导致的问题身份验证身份伪造、口令破解、权限提升和未授权访问。会话管理通过捕获导致会话劫持和会话伪造。权限管理访问机密或受限数据、篡改和执行未授权操作。配置管理未授权访问管理界面、更新配置数据、访问用户帐户和帐户配置文件。敏感数据机密信息泄漏和数据篡改。加密技术未授权访问机密数据或帐户信息。安全审计未能识别入侵征兆、无法证明用户的操作,以及在问题诊断中存在困难。输入检验通过嵌入查询字符串、窗体字段、Cookie 和 HTTP 标头中的恶意字符串所执行的攻击。包括命令执行、跨站点脚本编写 (XSS)、SQL 注入和缓冲区溢出攻击等。参数操作路径遍历攻击、命令执行、此外还有跳过访问控制机制、导致信息泄露、权限提升和拒绝服务。异常管理拒绝服务和敏感的系统级详细信息泄露。1.3使用对象本规范的读者及使用对象主要为Web相关的需求分析人员、设计人员、开发人员、测试人员等。1.4适用范围本规范的制定考虑了公司各种Web应用开发的共性,适合于公司绝大部分Web产品,要求Web产品开发必须遵循。对于嵌入式系统(如ADSL Modem、硬件防火墙)中的Web应用,由于其特殊性(CPU、内存、磁盘容量有限,没有成熟的Web容器),不强制遵循本规范的所有内容,只需遵循以下章节的规则要求:3.2身份验证3.3会话管理3.5敏感数据保护4.1输入校验4.2输出编码4.3上传下载4.5代码注释4.6归档要求1.5用词约定规则:强制必须遵守的原则建议:需要加以考虑的原则说明:对此规则或建议进行相应的解释实施指导:对此规则或建议的实施进行相应的指导2常见Web安全漏洞Web应用的安全漏洞有很多,无法穷举。针对众多的Web漏洞,OWASP的专家们结合各自在各领域的应用安全工作经验及智慧,提出了十大Web应用程序安全漏洞,帮助人们关注最严重的漏洞。(OWASP即开放Web应用安全项目,是一个旨在帮助人们理解和提高Web应用及服务安全性的项目组织。)表2 十大Web应用程序安全漏洞列表序号漏洞名称漏洞描述1注入注入攻击漏洞,例如SQL、OS命令以及LDAP注入。这些攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者访问未被授权的数据。2跨站脚本当应用程序收到含有不可信的数据,在没有进行适当的验证和转义的情况下,就将它发送给一个网页浏览器,这就会产生跨站脚本攻击(简称XSS)。XSS允许攻击者在受害者的浏览器上执行脚本,从而劫持用户会话、危害网站、或者将用户转向至恶意网站。3失效的身份认证和会话管理与身份认证和会话管理相关的应用程序功能往往得不到正确的实现,这就导致了攻击者破坏密码、密匙、会话令牌或攻击其他的漏洞去冒充其他用户的身份。4不安全的直接对象引用当开发人员暴露一个对内部实现对象的引用时,例如,一个文件、目录或者数据库密匙,就会产生一个不安全的直接对象引用。在没有访问控制检测或其他保护时,攻击者会操控这些引用去访问未授权数据。5跨站请求伪造一个跨站请求伪造攻击迫使登录用户的浏览器将伪造的HTTP请求,包括该用户的会话cookie和其他认证信息,发送到一个存在漏洞的Web应用程序。这就允许了攻击者迫使用户浏览器向存在漏洞的应用程序发送请求,而这些请求会被应用程序认为是用户的合法请求。6安全配置错误好的安全需要对应用程序、框架、应用程序服务器、Web服务器、数据库服务器和平台,定义和执行安全配置。由于许多设置的默认值并不是安全的,因此,必须定义、实施和维护所有这些设置。这包括了对所有的软件保护及时地更新,包括所有应用程序的库文件。7失败的URL访问权限限制许多Web应用程序在显示受保护的链接和按钮之前会检测URL访问权限。但是,当这些页面被访问时,应用程序也需要执行类似的访问控制检测,否则攻击者将可以伪装这些URL去访问隐藏的网页。8未经验证的重定向和前转Web应用程序经常将用户重定向和前转到其他网页和网站,并且利用不可信的数据去判定目的页面。如果没有得到适当验证,攻击者可以将受害用户重定向到钓鱼网站或恶意网站,或者使用前转去访问未经授权的网页。9不安全的加密存储许多Web应用程序并没有使用恰当的加密措施或Hash算法保护敏感数据,比如信用卡、社会安全号码(SSN)、认证凭据等。攻击者可能利用这种弱保护数据实行身份盗窃、信用卡欺骗或或其他犯罪。10传输层保护不足应用程序时常没有身份认证、加密措施,甚至没有保护敏感网络数据的保密性和完整性。而当进行保护时,应用程序有时采用弱算法、使用过期或无效的证书,或不正确地使用这些技术。3Web设计安全规范3.1Web部署要求规则3.1.1:如果 Web 应用对 Internet 开放,Web服务器应当置于DMZ区,在Web服务器与Internet之间,Web服务器与内网之间应当有防火墙隔离,并设置合理的策略。规则3.1.2:如果 Web 应用对 Internet 开放,Web服务器应该部署在其专用的服务器上,应避免将数据库服务器或其他核心应用与Web服务器部署在同一台主机上。说明:Web服务器比较容易被攻击,如果数据库或核心应用与Web服务器部署在同一台主机,一旦Web服务器被攻陷,那么数据库和核心应用也就被攻击者掌控了。规则3.1.3:Web站点的根目录必须安装在非系统卷中。说明:Web站点根目录安装在非系统卷,如单独创建一个目录/home/Web作为Web站点根目录,能够防止攻击者使用目录遍历攻击访问系统工具和可执行文件。建议3.1.1:Web服务器与应用服务器需物理分离(即安装在不同的主机上),以提高应用的安全性。建议3.1.2:如果Web应用系统存在不同的访问等级(如个人帐号使用、客户服务、管理),那么应该通过不同的Web服务器来处理来自不同访问等级的请求,而且Web应用应该鉴别请求是否来自正确的Web服务器。说明:这样便于通过防火墙的访问控制策略和Web应用来控制不同访问等级的访问,比如通过防火墙策略控制,只允许内网访问管理Portal。建议3.1.3:对于“客户服务”和“管理”类的访问,除了普通的认证,还应该增加额外的访问限制。说明:额外的访问限制,可以限制请求来自企业内网,可以建立VPN,或采用双向认证的SSL;或采用更简单的办法,通过IP地址白名单对客户端的IP地址进行过滤判断,实施参考附件3客户端IP鉴权实施指导。3.2身份验证3.2.1口令关于Web应用及容器涉及到的口令,请遵循产品网络安全红线的口令安全要求(详细内容请见:附件4 口令安全要求.xlsx)。3.2.2认证规则3.2.2.1:对用户的最终认证处理过程必须放到应用服务器进行。说明:不允许仅仅通过脚本或其他形式在客户端进行验证,必须在应用服务器进行最终认证处理(如果采用集中认证,那么对用户的最终认证就是放在集中认证服务器进行)。规则3.2.2.2:网页上的登录/认证表单必须加入验证码。说明:使用验证码的目的是为了阻止攻击者使用自动登录工具连续尝试登录,从而降低被暴力破解的可能。如果觉得验证码影响用户体验,那么可以在前3次登录尝试中不使用验证码,3次登录失败后必须使用验证码。验证码在设计上必须要考虑到一些安全因素,以免能被轻易地破解。具体实现细节请查看3.2.3验证码。如图: 图2 验证码实施指导:建议使用电信软件与核心网网络安全工程部提供的验证码CBB。备注:对于嵌入式系统,如果实现验证码比较困难,可以通过多次认证失败锁定客户端IP的方式来防止暴力破解。规则3.2.2.3:用户名、密码和验证码必须在同一个请求中提交给服务器,必须先判断验证码是否正确,只有当验证码检验通过后才进行用户名和密码的检验,否则直接提示验证码错误。说明:如果验证码和用户名、密码分开提交,攻击者就可以绕过验证码校验(如:先手工提交正确的验证码,再通过程序暴力破解),验证码就形同虚设,攻击者依然可以暴力破解用户名及口令。规则3.2.2.4:所有登录页面的认证处理模块必须统一。说明:可以存在多个登录页面,但是不允许存在多个可用于处理登录认证请求的模块,防止不一致的认证方式。规则3.2.2.5:所有针对其他第三方开放接口的认证处理模块必须统一。规则3.2.2.6:认证处理模块必须对提交的参数进行合法性检查。说明:具体输入校验部分请查看4.1输入校验。规则3.2.2.7:认证失败后,不能提示给用户详细以及明确的错误原因,只能给出一般性的提示。说明:可以提示:“用户名或者口令错误,登录失败”;不能提示:“用户名不存在”、“口令必须是 6 位”等等。规则3.2.2.8:最终用户portal和管理portal分离。说明:最终用户portal和管理portal分离,防止相互影响,防止来自用户面的攻击影响管理面。实施指导:将最终用户portal和管理portal分别部署在煌奈锢矸务器;如果为了解决成本合设(部署在同一台物理服务器上),那么,必须做到端口分离(通过不同的端口提供Web服务),一般的Web容器(如tomcat)支持为不同的Web应用创建不同的端口。规则3.2.2.9:禁止在系统中预留任何的后门帐号或特殊的访问机制。规则3.2.2.10:对于重要的管理事务或重要的交易事务要进行重新认证,以防范会话劫持和跨站请求伪造给用户带来损失。说明:重要的管理事务,比如重新启动业务模块;重要的交易事务,比如转账、余额转移、充值等。重新认证,比如让用户重新输入口令。规则3.2.2.11:用户名和密码认证通过后,必须更换会话标识,以防止会话固定(session fixation)漏洞。实施指导:场景一:对于从HTTP转到HTTPS再转到HTTP(也就是仅在认证过程采用HTTPS,认证成功后又转到HTTP)的,在用户名和密码认证通过后增加以下行代码:request.getSession().invalidate();HttpSession newSession=request.getSession(true);Cookie cookie = new Cookie(JSESSIONID,newSession.getId(); cookie.setMaxAge(-1);cookie.setSecure(false);cookie.setPath(request.getContextPath();response.addCookie(cookie);场景二:对于全程采用HTTPS协议,或者全程采用HTTP协议的,在用户名和密码认证通过后增加以下行代码:request.getSession().invalidate();request.getSession(true);建议3.2.2.1:管理页面建议实施强身份认证。说明:如双因素认证、SSL双向证书认证、生物认证等;还可以通过应用程序限制只允许某些特定的IP地址访问管理页面,并且这些特定的IP地址可配置。建议3.2.2.2:同一客户端在多次连续尝试登录失败后,服务端需要进行用户帐号或者是客户端所在机器的 IP 地址的锁定策略,且该锁定策略必须设置解锁时长,超时后自动解锁。说明:登录失败应该提示用户:如果重试多少次不成功系统将会锁定。在锁定期间不允许该用户帐号(或者客户端所在机器的 IP 地址)登录。允许连续失败的次数(指从最后一次成功以来失败次数的累计值)可配置,取值范围为:0-99 次,0表示不执行锁定策略,建议默认:5 次。锁定时长的取值范围为:0-999 分钟,建议默认:30 分钟,当取值为 0 时,表示无限期锁定,只能通过管理员手动解锁(需要提供管理员对服务器锁定其它用户帐号/IP进行解锁的功能界面)。建议优先使用帐号锁定策略。注意:应用程序的超级用户帐号不能被锁定,只能锁定操作的客户端所在的 IP,这是为了防止系统不可用。特别说明:锁客户端IP策略存在缺陷,当用户使用proxy上网时,那么锁定客户端IP会导致使用该proxy上网的所有用户在IP锁定期间都不能使用该Web应用;锁定用户帐户的策略也存在缺陷,当攻击者不断尝试某帐户的口令,就给该帐户带来拒绝服务攻击,使该帐户不可用。3.2.3验证码规则3.2.3.1:验证码必须是单一图片,且只能采用 JPEG、PNG或GIF格式。说明:验证码不能使用文本格式,不允许多图片组合(如用四个图片拼成的验证码)。规则3.2.3.2:验证码内容不能与客户端提交的任何信息相关联。说明:在使用验证码生成模块时不允许接收来自客户端的任何参数,例如:禁止通过getcode.jsp?code=1234的URL请求,将1234作为验证码随机数。规则3.2.3.3:验证码模块生成的随机数不能在客户端的静态页面中的网页源代码里出现。说明:在客户端网页上点击鼠标右键、选择“查看源文件”时,必须看不到验证码模块生成的随机数。规则3.2.3.4:验证码字符串要求是随机生成,生成的随机数必须是安全的。说明:对于java语言可以使用类 java.security.SecureRandom来生成安全的随机数。规则3.2.3.5:验证码要求有背景干扰,背景干扰元素的颜色、位置、数量要求随机变化。规则3.2.3.6:验证码在一次使用后要求立即失效,新的请求需要重新生成验证码。说明:进行验证码校验后,立即将会话中的验证码信息清空,而不是等到生成新的验证码时再去覆盖旧的验证码,防止验证码多次有效;注意:当客户端提交的验证码为空,验证不通过。说明:以上规则可以通过使用电信软件与核心网网络安滩刻峁验证码CBB来实现。3.3会话管理规则3.3.1:使用会话cookie维持会话。说明:目前主流的Web容器通过以下几种方式维持会话:隐藏域、URL重写、持久性cookie、会话cookie,但通过隐藏域、URL重写或持久性cookie方式维持的会话容易被窃取,所以要求使用会话cookie维持会话。如果条件限制必须通过持久性cookie维持会话的话,那么cookie信息中的重要数据部分如身份信息、计费信息等都必须进行加密。(cookie有两种:会话cookie和持久性cookie;会话cookie,也就是非持久性cookie,不设置过期时间,其生命期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了;会话cookie一般不存储在硬盘上而是保存在内存里。持久性cookie,设置了过期时间,被浏览器保存到硬盘上,关闭后再次打开浏览器,持久性cookie仍然有效直到超过设定的过期时间。)备注:对于嵌入式系统的Web,不适合本条规则,按“规则3.3.9”实施。规则3.3.2:会话过程中不允许修改的信息,必须作为会话状态的一部分在服务器端存储和维护。说明:会话过程中不允许修改的信息,例如,当用户通过认证后,其用户标识在整个会话过程中不能被篡改。禁止通过隐藏域或URL重写等不安全的方式存储和维护。对JSP语言,就是应该通过session对象进行存储和维护。规则3.3.3:当Web应用跟踪到非法会话,则必须记录日志、清除会话并返回到认证界面。说明: 非法会话的概念就是通过一系列的服务端合法性检测(包括访问未授权资源,缺少必要参数等情况),最终发现的不是正常请求产生的会话。规则3.3.4:禁止使用客户端提交的未经审核的信息来给会话信息赋值。说明:防止会话信息被篡改,如恶意用户通过URL篡改手机号码等。规则3.3.5:当用户退出时,必须清除该用户的会话信息。说明:防止遗留在内存中的会话信息被窃取,减少内存占用。实施指导:对于JSP或java语言使用如下语句:request.getSession().invalidate();规则3.3.6:必须设置会话超时机制,在超时过后必须要清除该会话信息。说明:建议默认会话超时时间为10分钟(备注:对于嵌入式系统中的Web,建议默认超时时间为5分钟,以减少系统资源占用)。如果没有特殊需求,禁止使用自动发起请求的机制来阻止session超时。规则3.3.7:在服务器端对业务流程进行必要的流程安全控制,保证流程衔接正确,防止关键鉴别步骤被绕过、重复、乱序。说明:客户端流程控制很容易被旁路(绕过),因此流程控制必须在服务器端实现。实施指导:可以通过在session对象中创建一个表示流程当前状态的标识位,用0、1、2、3、N分别表示不同的处理步骤,标识位的初始值为0,当接收到步骤N的处理请求时,判断该标识位是否为N-1,如果不为N-1,则表示步骤被绕过(或重复或乱序),拒绝受理,否则受理,受理完成后更改标识位为N。规则3.3.8:所有登录后才能访问的页面都必须有明显的“注销(或退出)”的按钮或菜单,如果该按钮或菜单被点击,则必须使对应的会话立即失效。说明:这样做是为了让用户能够方便地、安全地注销或退出,减小会话劫持的风险。规则3.3.9:如果产品(如嵌入式系统)无法使用通用的Web容器,只能自己实现Web服务,那么必须自己实现会话管理,并满足以下要求:采用会话cookie维持会话。生成会话标识(session ID)要保证足够的随机、离散,以便不能被猜测、枚举,要求session ID要至少要32字节,要支持字母和数字字符集。服务端必须对客户端提交的session ID的有效性进行校验。说明:在嵌入式系统中部署Web应用,由于软硬件资源所限,往往无法使用通用的Web容器及容器的会话管理功能,只能自己实现。另外,为了节省内存,嵌入式webserver进程往往是动态启动,为了使session更快的超时,建议增加心跳机制,对客户端浏览器是否关闭进行探测,5s一个心跳,30s没有心跳则session超时,关闭该session。3.4权限管理规则3.4.1:对于每一个需要授权访问的页面或servlet的请求都必须核实用户的会话标识是否合法、用户是否被授权执行这个操作。说明:防止用户通过直接输入URL,越权请求并执行一些页面或servlet;建议通过过滤器实现。实施指导: 请参考“附件5 Web权限管理设计规格说明书.docx”。规则3.4.2:授权和用户角色数据必须存放在服务器端,不能存放在客户端,鉴权处理也必须在服务器端完成。说明:禁止将授权和角色数据存放在客户端中(比如cookie或隐藏域中),以防止被篡改。规则3.4.3:一个帐号只能拥有必需的角色和必需的权限。一个组只能拥有必需的角色和必需的权限。一个角色只能拥有必需的权限。说明:做到权限最小化和职责分离(职责分离就是分清帐号角色,系统管理帐号只用于系统管理,审计帐号只用于审计,操作员帐号只用于业务维护操作,普通用户帐号只能使用业务。)这样即使帐号被攻击者盗取,也能把安全损失控制在最小的限度。规则3.4.4:对于运行应用程序的操作系统帐号,不应使用“root”、“administrator”、“supervisor”等特权帐号或高级别权限帐号,应该尽可能地使用低级别权限的操作系统帐号。规则3.4.5:对于应用程序连接数据库服务器的数据库帐号,在满足业务需求的前提下,必须使用最低级别权限的数据库帐号。说明:根据业务系统要求,创建相应的数据库帐号,并授予必需的数据库权限。不能使用“sa”、“sysman”等管理帐号或高级别权限帐号。3.5敏感数据保护3.5.1敏感数据定义敏感数据包括但不限于:口令、密钥、证书、会话标识、License、隐私数据(如短消息的内容)、授权凭据、个人数据(如姓名、住址、电话等)等,在程序文件、配置文件、日志文件、备份文件及数据库中都有可能包含敏感数据。3.5.2敏感数据存储规则3.5.2.1:禁止在代码中存储敏感数据。说明:禁止在代码中存储如数据库连接字符串、口令和密钥之类的敏感数据,这样容易导致泄密。用于加密密钥的密钥可以硬编码在代码中。规则3.5.2.2:禁止密钥或帐号的口令以明文形式存储在数据库或者文件中。说明:密钥或帐号的口令必须经过加密存储。例外情况,如果Web容器的配置文件中只能以明文方式配置连接数据库的用户名和口令,那么就不用强制遵循该规则,将该配置文件的属性改为只有属主可读写。规则3.5.2.3:禁止在 cookie 中以明文形式存储敏感数据。说明:cookie信息容易被窃取,尽量不要在cookie中存储敏感数据;如果条件限制必须使用cookie存储敏感信息时,必须先对敏感信息加密再存储到cookie。规则3.5.2.4:禁止在隐藏域中存放明文形式的敏感数据。规则3.5.2.5:禁止用自己开发的加密算法,必须使用公开、安全的标准加密算法。实施指导:场景 1:后台服务端保存数据库的登录口令后台服务器登录数据库需要使用登录数据库的明文口令,此时后台服务器加密保存该口令后,下次登录时需要还原成明文,因此,在这种情况下,不可用不可逆的加密算法,而需要使用对称加密算法或者非对称加密算法,一般也不建议采用非对称加密算法。推荐的对称加密算法:AES128、AES192、AES256。场景 2:后台服务端保存用户的登录口令在该场景下,一般情况是:客户端提交用户名及用户口令,后台服务端对用户名及用户口令进行验证,然后返回验证的结果。此时,在后台服务端,用户口令可以不需要还原,因此建议使用不可逆的加密算法,对“用户名+口令”字符串进行加密。推荐的不可逆加密算法: SHA256、SHA384、SHA512,HMAC-SHA256、HMAC-SHA384、HMAC-SHA512。规则3.5.2.6:禁止在日志中记录明文的敏感数据。说明:禁止在日志中记录明文的敏感数据(如口令、会话标识jsessionid等), 防止敏感信息泄漏。规则3.5.2.7:禁止带有敏感数据的Web页面缓存。说明:带有敏感数据的Web页面都应该禁止缓存,以防止敏感信息泄漏或通过代理服务器上网的用户数据互窜问题。实施指导:在HTML页面的标签内加入如下代码: 在JSP页面的最前面加入如下代码:注意:以上代码对于采用强制缓存策略的代理服务器不生效(代理服务器默认是不缓存的),要防止代理服务器缓存页面,可以在链接后加入一个随机数pageid,此时链接变成:http:/localhost:8080/query.do?a=2&pageid=2245562, 其中2245562数字是随机生成的,每次请求此页面时,随机数都不同,IE始终认为此为一个新请求,并重新解析,生成新的响应页面。3.5.3敏感数据传输规则3.5.3.1:带有敏感数据的表单必须使用 HTTP-POST 方法提交。说明:禁止使用 HTTP-GET 方法提交带有敏感数据的表单(form),因为该方法使用查询字符串传递表单数据,易被查看、篡改。如果是使用servlet处理提交的表单数据,那么不在doGet方法中处理,只在doPost方法处理。实施指导:1. 对于JSP页面,将表单的属性method赋值为post,如下2. 如果是使用servlet处理提交的表单数据,那么只在doPost方法中处理,参考代码如下public class ValidationServlet extends HttpServletpublic void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException /对提交的表单数据进行校验规则3.5.3.2:在客户端和服务器间传递明文的敏感数据时,必须使用带服务器端证书的SSL。说明:如果在客户端和服务器间传递如帐号、口令等明文的敏感数据,必须使用带服务器端证书的SSL。由于SSL对服务端的CPU资源消耗很大,实施时必须考虑服务器的承受能力。实施指导:1. SSL的配置请参考附件1 Tomcat配置SSL指导。2. Web应用中,从https切换到http过程中会丢失session,无法保持会话的连续。解决的办法就是用http-https-http过程代替https-http过程,保证会话的连续性。原因:当https请求转为http请求的时候,因为原先的session的secure属性值是true,无法再http协议中传输,因此,系统生成新的session,且新的session没有继承旧session的属性和值,因此,无法保持会话连续。而http-https-http这个过程,session始终不变,因此,可以保持会话连规则3.5.3.3:禁止在URL中携带会话标识(如jsessionid)。说明:由于浏览器会保存URL历史记录,如果URL中携带会话标识,则在多人共用的PC上会话标识容易被其他人看到,一旦该会话标识还在其生命有效期,则恶意用户可以冒充受害用户访问Web应用系统。规则3.5.3.4:禁止将对用户保密的信息传送到客户端。说明:这些信息一旦传送到客户端,那么用户也就可以获取到了。3.6安全审计本节的安全审计是针对Web业务应用,不包括对操作系统、Web容器的安全审计。对于操作系统和Web容器的安全审计,可以参考对应的操作系统安全基线和Web安全配置规范。规则3.6.1:应用服务器必须对安全事件及操作事件进行日志记录。说明:安全事件包括登录、注销、添加、删除、修改用户、授权、取消权限、鉴权、修改用户口令等;操作事件包括对业务系统配置参数的修改,对重要业务数据的创建、删除、修改、查询等;对于上述事件的结果,不管是成功还是失败,都需要记录日志。规则3.6.2:安全日志必须包括但不限于如下内容:事件发生的时间、事件类型、客户端IP、客户端机器名、当前用户的标识、受影响的个体(数据、资源)、成功或失败标识、启动该事件的进程标识以及对该事件的详细描述。规则3.6.3:严格限制对安全日志的访问。说明:只有Web应用程序的管理员才能查询数据库表形式或文件形式的安全日志;除数据库超级管理员外,只有应用程序连接数据库的帐号可以查询(select)及插入(insert)安全日志表;除操作系统超级管理员外,只有应用程序的运行帐户才能读、写文件形式的安全日志(但不允许删除)。确保日志的安全,限制对日志的访问,这加大了攻击者篡改日志文件以掩饰其攻击行为的难度。规则3.6.4:对日志模块占用资源必须有相应的限制机制。说明:限制日志模块占用的资源,以防止如自动的恶意登陆尝试导致的资源枯竭类DOS攻击;比如限制日志记录占用的磁盘空间。规则3.6.5:禁止日志文件和操作系统存储在同一个分区中,同时,应使用转储、滚动、轮循机制,来防止存储日志的分区写满。说明:所需空间和具体业务、局点容量、日志保存周期相关,要根据实际情况估算。建议3.6.1:安全日志应该有备份及清理机制。说明:备份及清理机制包括定期备份及清理安全日志和监控用于存放安全日志的磁盘空间的使用情况。可以配置定期备份及清理的时间,可以配置以用于存放安全日志的磁盘空间使用率达到多少时进行备份及清理。建议3.6.2:通过网络形式保存安全日志。说明:在生成安全日志时,即时将日志保存到网络上其他主机,而且生成安全日志的应用程序不能再访问存放在其他主机的日志。3.7Web Service规则3.7.1:对Web Service接口的调用必须进行认证。说明:认证就是确定谁在调用Web Service,并且证实调用者身份。实施指导:可以通过在消息头中增加用户名和口令,作为认证凭据;对于安全性要求不高、只向同一信任域内其他主机开放的Web Service接口,可以通过简单的IP认证来实现接口的认证(只有服务器端指定IP地址的客户端才允许调用,IP地址可配置)。规则3.7.2:如果调用者的权限各不相同,那么必须对Web Service接口的调用进行鉴权。说明:鉴权就是判断调用者是否有权限调用该Web Service接口。实施指导:可以通过Axis的handler对调用进行鉴权。规则3.7.3:通过Web Service接口传递敏感数据时,必须保障其机密性。实施指导:方案1:请参考附件2 Web Service 安全接入开发指导。方案2:采用https安全协议。规则3.7.4:通过Web Service接口传递重要的交易数据时,必须保障其完整性和不可抵赖性。说明:重要的交易数据,如转账时涉及的“转入账号”、“转出账号”、“金额”等。实施指导:请参考附件2 Web Service 安全接入开发指导。规则3.7.5:如果Web Service只对特定的IP开放,那么必须对调用Web Service接口的客户端IP进行鉴权,只有在IP地址白名单中的客户端才允许调用,IP地址白名单可配置。实施指导:请参考附件3客户端IP鉴权实施指导。规则3.7.6:对Web Service接口调用进行日志记录。说明:日志内容包括但不限于如下内容:调用时间、操作类型、调用接口名称、详细的接口参数、客户端IP、客户端机器名、调用者的用户标识、受影响的个体(数据、资源)、成功或失败标识。规则3.7.7:必须对Web Service提交的参数进行输入校验。说明:具体输入校验部分请查看4.1输入校验。3.8RESTful Web ServiceRESTful Web Service(也称为 RESTful Web API)是一个使用HTTP并遵循REST原则的Web服务。规则3.8.1:对RESTful Web Service的调用必须进行认证。说明:认证就是确定谁在调用RESTful Web Service,并且证实调用者身份。实施指导:客户端发起的Restful请求需要在消息头带Authorization字段,内容填Basic Base64(user:pass),服务端对user和passwd进行认证。注意:user和pass必须加密保存在配置文件或数据库中,不能写死在代码中;传输时采用https安全协议。对于安全性要求不高、只向同一信任域内其他主机开放的Web Service接口,可以通过简单的IP认证来实现接口的认证(只有服务器端指定IP地址的客户端才允许调用,IP地址可配置)。规则3.8.2:如果调用者的权限各不相同,那么必须对RESTful Web Service的调用进行鉴权。说明:鉴权就是判断调用者是否有权限调用该RESTful Web Service。规则3.8.3:通过RESTful Web Service传递敏感数据时,必须保障其机密性。实施指导:采用https安全协议。规则3.8.4:如果RESTful Web Service只对特定的IP开放,那么必须对调用RESTful Web Service的客户端IP进行鉴权,只有在IP地址白名单中的客户端才允许调用,IP地址白名单可配置。实施指导:请参考附件3客户端IP鉴权实施指导。规则3.8.5:对RESTful Web Service调用进行日志记录。说明:日志内容包括但不限于如下内容:调用时间、操作类型、调用接口名称、详细的接口参数、客户端IP、客户端机器名、调用者的用户标识、受影响的个体(数据、资源)、成功或失败标识。规则3.8.6:必须对RESTful Web Service提交的参数进行输入校验。说明:具体输入校验部分请查看4.1输入校验。3.9DWRDWR(Direct Web Remoting)是一种Java 和JavaScript 相结合的开源框架,可以帮助开发人员更容易地完成应用Ajax 技术的Web 应用程序,让浏览器上的JavaScript 方法调用运行在Web 服务器上的Java 方法。规则3.9.1:关闭DWR 调试功能。说明:如果开启了DWR调试功能,那么攻击者可以轻易查看和调用系统提供的所有DWR接口,所以,版本发布时,一定要关闭DWR调试功能。实施指导:修改对应的web.xml文件中的debug参数值为false: dwr-invoker org.directwebremoting.servlet.DwrServlet debug false .规则3.9.2:对DWR接口的调用必须进行认证。说明:认证就是确定谁在调用DWR接口,并且证实调用者身份。实施指导:对于DWR接口的认证直接沿用3.2.2认证机制,不用单独再做认证。规则3.9.3:对DWR接口的调用必须进行鉴权。说明:鉴权就是判断调用者是否有权限调用该DWR接口。实施指导:DWR的请求和普通的Web请求一样,都可以通过过滤器来鉴权,对于DWR接口的鉴权直接沿用规则3.4.1的鉴权机制,具体实现参照规则3.4.1的实施指导。规则3.9.4:必须对DWR提交的参数进行输入校验。说明:具体输入校验部分请查看4.1输入校验。4Web编程安全规范4.1输入校验规则4.1.1:必须对所有用户产生的输入进行校验,一旦数据不合法,应该告知用户输入非法并且建议用户纠正输入。说明:用户产生的输入是指来自text、password、textareas或file表单域的数据;必须假定所有用户产生的输入都是不可信的,并对它们进行合法性校验。规则4.1.2:必须对所有服务器产生的输入进行校验,一旦数据不合法,必须使会话失效,并记录告警日志。说明:服务器产生的输入是指除用户产生的输入以外的输入,例如来自hidden fields、selection boxes、check boxes、radio buttons、cookies、HTTP headers、热点链接包含的URL参数的数据或客户端脚本等;必须假定所有服务器产生的输入都是被篡改过的、恶意的,并对它们进行合法性校验,如果不合法,说明有人恶意篡改数据。举例:假如用户资料填写表单中的“性别”为必填项,用radio button(男和女对应实际值分别为1和0)来限制用户的输入,如果应用程序收到的“性别”值为2,那么可以断定有人恶意篡改数据。规则4.1.3:禁止将HTTP标题头中的任何未加密信息作为安全决策依据。说明:HTTP 标题头是在 HTTP 请求和 HTTP 响应的开始阶段发送的。Web 应用程序必须确保不以 HTTP 标题头中的任何未加密信息作为安全决策依据,因为攻击者要操作这一标题头是很容易的。例如,标题头中的 referer 字段包含来自请求源端的 Web 页面的 URL。不要根据 referer 字段的值做出任何安全决策(如检查请求是否来源于 Web 应用程序生成的页面),因为该字段是很容易被伪造的。规则4.1.4:不能依赖于客户端校验,必须使用服务端代码对输入数据进行最终校验。说明:客户端的校验只能作为辅助手段,减少客户端和服务端的信息交互次数。规则4.1.5:对于在客户端已经做了输入校验,在服务器端再次以相同的规则进行校验时,一旦数据不合法,必须使会话失效,并记录告警日志。说明:肯定存在攻击行为,攻击者绕过了客户端的输入校验,因此必须使会话失效,并记入告警日志。规则4.1.6:如果输入为数字参数则必须进行数字型判断。说明:这里的数字参数指的是完全由数字组成的数据。实施指导:String mobileno = request.getParameter(mobileno);String characterPattern = d+$; /正则表达式表示是否全为数字if (!mobileno.matches (characterPattern)out.println (“Invalid Input”);规则4.1.7:如果输入只允许包含某些特定的字符或字符的组合,则使用白名单进行输入校验。说明:对于一些有规则可循的输入,如email地址、日期、小数等,使用正则表达式进行白名单校验,这样比使用黑名单进行校验更有效。实施指导:email地址校验的方法:String emailAddress = request.getParameter(emailAddress);String characterPattern = (a-z0-9A-Z+_-?)+a-z0-9A-Z(a-z0-9A-Z+_-?)+(-a-z0-9A-Z+)?.)+a-zA-Z2,4$; /email正则表达式if (!emailAddress.matches(characterPattern)out.println (“Invalid Email Address”);规则4.1.8:如果输入为字符串参数则必须进行字符型合法性判断。说明:可定义一个合法字符集。实施指导:String text = request.getParameter(text);String characterPattern = A-Za-z*$; /开发者自行定义字符规则(方括号内的字符集)if (!text.matches (characterPattern)out.println (“Invalid Input”);规则4.1.9:校验输入数据的长度。说明:如果输入数据是字符串,必须校验字符串的长度是否符合要求,长度校验会加大攻击者实施攻击的难度。规则4.1.10:校验输入数据的范围。说明:如果输入数据是数值,必须校验数值的范围是否正确,如年龄应该为0150之间的正整数。规则4.1.11:禁止通过字符串串联直接使用用户输入构造可执行 SQL 语句。说明:禁止通过字符串串联直接使用用户输入构造可执行 SQL 语句,如:string sql = select status from Users where UserName= + txtUserName.Text + ;这样很容易被SQL注入攻击。规则4.1.12:对于java/JSP语言,使用预编译语句PreparedStatement代替直接的语句执行Statement。说明:使用预编译语句PreparedState
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!