版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件安全开发生命周期杭州安恒信息技术有限公司软件安全开发生命周期(SDL)基于WEB应用程序的SDL目录简介安全需求分析安全设计安全编程安全测试安全部署及安全响应
软件安全开发生命周期简介
安全开发周期,即SecurityDevelopmentLifecycle(SDL),是微软提出的从安全角度指导软件开发过程的管理模式。SDL不是一个空想的理论模型。它是微软为了面对现实世界中安全挑战,在实践中的一步步发展起来的软件开发模式。
典型的软件开发流程中,如瀑布模型,中心围绕着产品功能,完全没有安全方面的考虑。这样的开发流程可以造就功能上相对完善的软件,但是无法满足在安全上的需要。由于软件开发过程中未进行任何有效的安全控制措施,导致软件开发后由于其固有的安全隐患所引起的安全事件频频发生,给黑客及恶意人员可趁之机,由此导致的经济损失不可估量。软件安全开发生命周期
虽然目前企业和组织已经逐步意识到软件安全的重要性,但是他们把目光更多的聚焦到了软件开发后的漏洞扫描或渗透测试,尽管这个过程能够发现和解决大多数的安全隐患,但是后期的安全评估和安全整改,将带来更大的成本投入和人力投入;甚至由于开发人员的流动导致许多安全漏洞无法得到解决。据美国国家标准局(NIST)早年发表的一份调查报告估计,更好的安全控制措施将为后期安全整改的总体成本节省三分之一以上的费用,且有效规避70%以上由于软件安全隐患所引发的安全事件。软件安全开发生命周期软件安全开发生命周期简介安全需求分析安全设计安全编程安全测试安全部署及安全响应
软件安全开发生命周期安全需求分析——设定安全目标在需求分析阶段,加入以下的安全考虑
产品提供的安全功能产品如何安全的与用户(或其它软件模块)交互特别的,安全方面的考虑对产品开发计划的影响产品的风险评估和威胁模型(threatmodeling)产品的缺省功能配置软件安全开发生命周期简介安全需求分析安全设计安全编程安全测试安全部署及安全响应
软件安全开发生命周期安全设计
在安全设计阶段,特别加入以下两方面的考虑
减少攻击界面。例如,对一个网络软件的设计,它需要监听那些网络端口,是否可以减少监听端口的数目?那些用户可以与这些端口建立连接,是否要加强身份验证?深层防御。底层模块的设计中,假设上层模块有可能出现安全漏洞。对传递的数据考虑进一步校验软件安全开发生命周期简介安全需求分析安全设计计安全编程程安全测试试安全部署署及安全响响应软件安全全开发生生命周期期安全编程独立、完完整且集集中的输输入验证证创建并使使用了独独立的用用户输入入验证模模块以完完成对所所有用户户的输入入校验,,以此可可带来::统一的输输入检测测策略统一的验验证逻辑辑统一的错错误验证证处理降低升级级和维护护成本软件安全全开发生生命周期期校验全部的程程序输入入保证所有变量量在使用用之前都都经过严严格的校校验,防防止被污污染的数数据进入入程序。校验全部的输输入长度度通过限制制输入长长度,可以有有效的控控制一些些攻击使使其不给给系统带带来过大大的威胁胁:SQLInjectXSSFileInclude………软件安全全开发生生命周期期校验全部的输输入类型型不同的程程序所接接收到的参参数类型型应严格格区分并并校验,,对于非非法的类类型应有有相关异异常进行行处理以以防止其其进入程程序。不使用任任何方式式验证失失败的数据当程序对对某个数数据校验验失败时时(如:校校验数据据类型)),相关关的异常常处理程程序应抛抛弃该数数据并中中断操作作,而不不应对数数据进行行任何的的修复尝尝试。对HTTP所有内容容进行校校验除需对传传统的HTTPGET、POST等数据进进行严格格校验外外,还应应对HTTP内所有可可能使用用到的字字段进行行校验,,防止字字段中包包含恶意意字符而而污染程程序,如如:RefererHostCookie……软件安全全开发生生命周期期校验向用用户输出的数据据当程序通通过查询询后台数数据库或其他方方式从后后台获取取数据后后,在将将数据输输出给用用户前应应对该数数据进行行校验,,校验其其中是否否包含有有非法字字符、可可执行客客户端脚脚本等恶恶意信息息。使用安全全的SQL查询方式在进行SQL查询时,,必须使使用安全全的查询询方式,,如:PreparedStatement,以避免免查询语语句中由由用户恶恶意插入入SQL语句所带带来的风风险。禁止使用用JavaScript进行任何何校验由于JavaScript为客户端端脚本,,因此任任何试图图使用JavaScript对用户数数据进行行校验的的行为都都可能被被用户构构造的本本地脚本本所绕过过,因此此,所有有校验工工作应由由服务端端程序完完成而不不是客户户端。软件安全全开发生生命周期期使用安全全、统一一的编码码或转义义方式创建并使用独立立、统一一的编码码或转移移方式,,而且编编码或转转移中,,至少应应包含对对以下类类别数据据的编码码或转移移:可能造成成SQL注入的数数据,如如:分号号、单引引号等可能造成成XSS的数据,,如:script、javascript等设定有安安全的权限限边界所有的程程序都应应清楚的了了解到自自己能做做什么,,而在其其所能做做的范围围之外,,均属于于其权限限边界之之外,应应严格禁禁止对其其权限之之外的任任何操作作。校验被调调用的后后台命令若程序需需要调用用后台可可执行程程序,则在调调用时,,应通过过使用完完整路径径或对程程序进行行HASH校验等方方式保证证程序的的调用正正确。软件安全全开发生生命周期期校验被调调用的文文本或配配置文件若程序需需要调用后台文文本或配配置文件件,则在在调用前前,应相相对文件件或配置置文件的的完整性性和有效效性进行行检查,,以确保保读入的的文本或或配置文文件是正正确可用用的。确保程序序所记录录的日志志可控若程序需需要记录录额外的的操作日志志等信息息,应保保证这些些日志中中的某些些或全部部内容不不来自用用户输入入,否则则用户可可能通过过外部恶恶意提交交信息的的方式填填充日志志。软件安全全开发生生命周期期简介安全需求分析安全设计计安全编程程安全测试试安全部署署及安全全响应软件安全全开发生生命周期期安全测试试安全测试试是什么么?在产品的的生命周周期中,,特别是是产品开开发基本本完成到到发布阶阶段,对对产品进进行检验验以验证证产品符符合安全全需求定定义和产产品质量量标准的的过程。安全测试试目标提升产品品安全质质量尽量在发发布前兆兆到安全全问题予予以修补补降低成成本度量安全当前安全全测试方方法有模式匹配配方法,将程序看看作字符符串状态机模模型,将程序看看作状态态机黑盒模型型,将程序看看作黑盒盒子白盒模型型,将程序看看作路径径的组合软件安全全开发生生命周期期安全测试试当前安全全测试的问题覆盖性完备性可度量性性当前安全测试试困难测试理论论很难适适用于安安全领域域安全测试试基础理理论薄弱弱,当前测试试方法缺缺少理论论指导,,也缺乏乏技术产产品工具具测试VS安全测试试BUGVS安全漏洞洞(并并非是BUG的一个子子集)信息泄露露,WMF,LNK,SYNFLOOD漏洞是BUG吗?软件安全全开发生生命周期期安全测试试假设条件件测试:导导致问题题的数据据是用户户不小心心构成的的(只考虑提提供给用用户的界界面)安全测试试:导致致问题的的数据是是攻击者者处心积积虑构成成的(考考虑所有有攻击界界面,包包括可污污染/渗透传递递的界面面)思考域测试:功功能本身身安全测试试:功能能,系统统机制,,外部环环境,应应用与数数据自身身安全风风险与安安全属性性问题发现现模式测试:违违反功能能定义的的输出安全测试试:违反反权限,,能力与与约束黑盒:状状态或行行为异常常灰盒:未未完备的的约束检检测静态白盒盒:基于于规范软件安全全开发生生命周期期安全测试试安全测试试与渗透透测试出发点与与目的成本测试对象象覆盖/完备/度量解决方案案过程参与软件安全全开发生生命周期期软件安全全开发生生命周期期安全自身身要素安全包括括了三个个层次安全功能能(特性性)安全策略略(部署署,配置,全局设计计准则))安全实现安全测试试是对以以上几个个层次的的验证和和度量外部防护护系统是是一种补补充保护护安全测试试安全功能能测试是否足够够是否实现现实现正确确性安全策略略测试是否足够够是否实现现实现正确确性代码自身身安全数据边界界检测是是否正确确足够体系设计计是否正正确足够够权限限制制与检测测是否正正确足够够处理逻辑辑是否正正确软件安全全开发生生命周期期安全测试试黑盒思路路:基于于功能与与边界值值FUZZ智能FUZZ全局数据据结构白盒思路路:基于于路径源码审计计二进制静静态分析析二进制数数据流动动态追踪踪分析软件安全全开发生生命周期期简介安全需求分析安全设计计安全编程程安全测试试安全部署署及安全全响应软件安全全开发生生命周期期安全部署署及安全全响应安全部署署软件需提提供相应应的文档档和工具具,指导导用户如如何安全全的使用用。安全响应应当前任何何一个软软件开发发模式((包括SDL在内),,都无法法确保发发布的软软件没有有安全漏漏洞。因因此,需需要事先先制订对对应的相相应模式式,包括括:(内部或外部部发现的)安安全漏洞以何何种途径汇报报如何评估安全全漏洞的严重重级别开发安全补丁丁的流程测试安全补丁丁的流程发布安全补丁丁的流程如何在以后开开发中避免类类似的安全漏漏洞,等等软件安全开发发生命周期软件安全开发发生命周期(SDL)基于WEB应用程序的SDL目录概述在公开提供的的SDL文档中,找不不到专门针对对如何保护Web应用程序或在在线服务的指指南。诚然,,大多数SDL非实现要求同同样适用客户户端/服务器和Web应用程序。就就象威胁模型型对Web窗体应用程序序与Windows®窗体应用程序序同样重要。。而对SOAP服务和对Windows服务执行最终终安全审查也也同样重要。。但对于跨站站点脚本(XSS)和SQL注入等与Web相关的漏洞会会是怎样的情情况呢?如果果SDL如此注重防御御客户端/服务器应用程程序的缓冲区区溢出,它为为什么会忽视视针对在线服服务发起的XSS攻击这一Web头号公敌的防防御呢?下面以JAVA编程安全为例例说明。基于WEB应用程序的SDL简介跨站脚本(XSS)注入漏洞(InjectionFlaws)恶意文件执行行不安全的直接接对象引用跨站点请求伪伪造(CSRF)信息泄露和错错误处理不当当残缺的认证和和会话管理不安全的加密密储存不安全的通信信限制URL访问失效JAVA安全编程——OWASPTOP10ANDESAPI简介ESAPI(EnterpriseSecurityAPI)其实简单一点点来说,ESAPI就是为编写出出更加安全的的代码设计出出来的一些API,方便使用者者调用,从从而方便的编编写安全的代代码。它本身身是开源的,,同时提供JAVA版本和.NET版本。代码下载地址址:/p/owasp-esapi-java/下图显示了提提供的API与OWASP列出的10个安全问题的的涵盖关系::WhatisanEnterpriseSecurityAPI?TheESAPIFamilyCommunityBreakdownOWASPWhatisanEnterpriseSecurityAPI?AddressingTheOWASPTopTenOWASPTopTenOWASPESAPIA1:InjectionA2:CrossSiteScripting(XSS)A3:BrokenAuthenticationandSessionManagementA4:InsecureDirectObjectReferenceA5:CrossSiteRequestForgery(CSRF)A6:SecurityMisconfigurationA7:InsecureCryptographicStorageA8:FailuretoRestrictURLAccessA9:InsufficientTransportLayerProtectionA10:UnvalidatedRedirectsandForwardsEncoderEncoder,ValidatorAuthenticator,User,HTTPUtilitiesAccessReferenceMap,AccessControllerUser(CSRFToken)SecurityConfigurationEncryptorAccessControllerHTTPUtilitiesAccessControllerOWASPWhatisanEnterpriseSecurityAPI?OWASPESAPIProjectScorecardAuthentication2.0Identity2.0AccessControl2.01.4InputValidation2.0OutputEscaping2.01.42.0Canonicalization2.01.42.0Encryption2.01.4RandomNumbers2.01.4ExceptionHandling2.0Logging2.01.41.4IntrusionDetection2.0SecurityConfiguration2.01.41.4WAF2.02.02.0下图显示结合合ESAPI设计你的程序序下图简单呈现现ESAPI如何运作跨站脚本(XSS)定义跨站脚本是最最普遍的web应用安全漏洞洞。当应用程序在在发送给浏览览器的页面中中包含用户提提供的数据,,但没有经过过适当验证或或转译那些内容,这这就导致跨站站脚本漏洞。危害攻击者能在受受害者浏览器器中执行脚本本以劫持用户户会话、迫害害网站、插入入恶意内容、、重定向用户户、使用恶意意软件劫持用用户浏览器等等等。种类已知有三种著著名跨站漏洞洞:1)存储式;2)反射式;3)基于DOM。反射式跨站脚脚本通过测试试或代码分析析很容易找到到。解决之道验证输入验证输入很简简单-检查每个输入入的有效性。。这可能意意味着很多东东西,但在典典型的和简单单的情况下,,这意味着检检查输入类型型和数据的长长度。例如如,如果你是是从一个文本本框接受一个个标准的邮政政编码,你会会知道,唯一一有效的类型型是一个数字字(0-9),而长度应应该是6,不能多也不不能少。并并非所有的的案件都如此此简单,但很很多是相似的的。下图显示验证证输入的架构构。这里的的关键是,一一切都进行验验证,所有的的输入,这并并不来自于应应用程序(包包括用户输入入,请求头,,Cookie,数据库数据据...)。实例getValidInput(java.lang.Stringcontext,java.lang.Stringinput,java.lang.Stringtype,intmaxLength,booleanallowNull,ValidationErrorListerrors)isValidInput(java.lang.Stringcontext,java.lang.Stringinput,java.lang.Stringtype,intmaxLength,booleanallowNull)StringvalidatedFirstName=ESAPI.validator().getValidInput("FirstName",myForm.getFirstName(),"FirstNameRegex",255,false,errorList);booleanisValidFirstName=ESAPI.validator().isValidInput("FirstName",myForm.getFirstName(),"FirstNameRegex",255,false);编码输输出对验证证输入入的另另一面面就是是编码码输出出。编编码码输出出,是是用来来确保保字符符被被视为为数据据,而而不是是作为为HTML元字符符被浏浏览器器解析析。这这些些技术术定义义一些些特殊殊的““转义义”字字符。。没没有正正确转转义的的数据据它仍仍然会会在浏浏览器器中正正确解解析。。编编码输输出只只是让让浏览览器知知道数数据是是不是是要被被解析析,达达到攻攻击无无法实实现的的目的的。需要编编码的的部分分:1、HTML实体2、HTML属性3、Javascript4、CSS5、URL下图像像显示示编码码输出出的架架构。。实例1———HTML实体编编码//performinginputvalidationStringcleanComment=ESAPI.validator().getValidInput("comment",request.getParameter("comment"),"CommentRegex",300,false,errorList);//checktheerrorListhere//performingoutputencodingfortheHTMLcontextStringsafeOutput=ESAPI.encoder().encodeForHTML(cleanComment);实例2———URL编码//performinginputvalidationStringcleanUserName=ESAPI.validator().getValidInput("userName",request.getParameter("userName"),"userNameRegex",50,false,errorList);//checktheerrorListhere//performingoutputencodingfortheurlcontextStringsafeOutput="/admin/findUser.do?name="+ESAPI.encoder().encodeForURL(cleanUserName);注入漏漏洞((InjectionFlaws)定义简单来来说,,注入入往往往是应应用程程序缺缺少对对输入入进行行安全全性检检查所所引引起的的,攻攻击者者把一一些包包含指指令的的数据据发送送给解解释器器,解解释器器会把把收到到的数数据转转换成成指令令执行行,注注入漏漏洞十十分普普遍,,通常常能在在SQL查询、、LDAP查询、、Xpath查询、、OS命令、、程序序参数数等中中出现现。危害注入能能导致致数据据丢失失或数数据破破坏、、缺乏乏可审审计性性或是是拒绝绝服务务。注注入漏漏洞有有时甚甚至能能导致致完全全接管管主机机。种类SQL注入、、XPATH注入、、LDAP注入、、OS命令注注入等等。解决之之道SQL注入实实例StringsqlString="SELECT*FROMusersWHEREfullname='"+form.getFullName()+"'ANDpassword='"+form.getPassword()+"'";正常常::username=tony,password=123456SELECT*FROMusersWHEREusername=tony'ANDpassword='123456'攻击击::username=tony,password='OR'1'='1SELECT*FROMusersWHEREusername=tony'ANDpassword=''OR'1'='1'参数数化化查查询询预预处处理理使用用PreparedStatement()绑定定变变量量下面面的的代代码码示示例例使使用用一一个个PreparedStatement,Java的一一个个参参数数化化查查询询的的执执行行情情况况,,执执行行相相同同的的数数据据库库查查询询。。Stringcustname=request.getParameter("customerName");//ThisshouldREALLYbevalidatedtoo//performinputvalidationtodetectattacksStringquery="SELECTaccount_balanceFROMuser_dataWHEREuser_name=?";PreparedStatementpstmt=connection.prepareStatement(query);pstmt.setString(1,custname);ResultSetresults=pstmt.executeQuery();使用用存存储储过过程程Stringcustname=request.getParameter("customerName");//ThisshouldREALLYbevalidatedtry{CallableStatementcs=connection.prepareCall("{callsp_getAccountBalance(?)}");cs.setString(1,custname);ResultSetresults=cs.executeQuery();//……resultsethandling}catch(SQLExceptionse){//……logginganderrorhandling}使用用ESAPI//ESAPIversionofqueryCodecORACLE_CODEC=newOracleCodec();//we'reusingoracleStringquery="SELECTnameFROMusersWHEREid="+ESAPI.encoder().encodeForSQL(ORACLE_CODEC,validatedUserId)+"ANDdate_created>='"+ESAPI.encoder().encodeForSQL(ORACLE_CODEC,validatedStartDate)+"'";myStmt=conn.createStatement(query);...//executestatementandgetresults恶意文件件执行定义恶意文件件执行是是一种能能够威胁胁任何网网站形式式的漏洞洞,只要要攻击者者在具有有引入((include)功能程程式的参参数中修修改参数数内容,,WEB服务器便便会引入入恶意程程序内容容从而受受到恶意意文件执执行漏洞洞攻击。。危害攻击者可可利用恶恶意文件件执行漏漏洞进行行攻击取取得WEB服务器控控制权,,进行不不法利益益或获取取经济利利益。解决之道道实例1验证输入入,使用用ESAPI验证上传传文件名名if(!ESAPI.validator().isValidFileName("upload",filename,allowedExtensions,false)){thrownewValidationUploadException("Uploadonlysimplefilenameswiththefollowingextensions"+allowedExtensions,"UploadfailedisValidFileNamecheck");}实例2使用ESAPI检查上传传文件大大小ServletFileUploadupload=newServletFileUpload(factory);upload.setSizeMax(maxBytes);不安全的的直接对对象引用用定义所谓“不不安全的的对象直直接引用用”,即即Insecuredirectobjectreferences,意指一一个已经经授权的的用户,,通过更更改访访问时的的一个参参数,从从而访问问到了原原本其并并没有得得到授权权的对象象。Web应用往往往在生生成Web页面时会会用它的的真实名名字,且且并不会会对所有有的目标标对象访访问时来来检查用用户权限限,所以以这就造造成了不不安全的的对象象直接引引用的漏漏洞。我们看如如下的一一个示例例,也许许这样就就更容易易理解什什么是不不安全全的对象象直接引引用。攻击者发发现他自自己的参参数是6065,即?acct=6065;他可以直直接更改改参数为为6066,即?acct=6066;这样他就就可以直直接看到到6066用户的的账户信信息了。。危害这种漏洞洞能损害害参数所所引用的的所有数数据。除除非名字字空间很很稀疏,,否则攻攻击者很很容易访访问该类类型的所所有数据据。解决之道道案例1使用ESAPI的AccessReferenceMap实现使用用非直接接的对象象引用MyObjectobj;//generateyourobjectCollectioncoll;//holdsobjectsfordisplayinUI//createESAPIrandomaccessreferencemapAccessReferenceMapmap=newRandomAccessReferenceMap();//getindirectreferenceusingdirectreferenceasseedinputStringindirectReference=map.addDirectReference(obj.getId());//setindirectreferenceforeachobject-requiresyourappobjecttohavethismethodobj.setIndirectReference(indirectReference);//addobjecttodisplaycollectioncoll.add(obj);//storecollectioninrequest/sessionandforwardtoUI...案例2检查访问问。来来自不受受信源所所使用的的所有直直接对象象引用都都必须包包含访问问控制检检测,这这样才能能确保用用户对要要求的对对象有访访问权限限。跨站点请请求伪造造(CSRF)定义跨站请求伪造造,也被称成成为“oneclickattack”或者sessionriding,通常缩写为为CSRF或者XSRF,是一种对网网站的恶意利利用。尽管听听起来像跨站站脚本(XSS),但它与XSS非常不同,并并且攻击方式式几乎相左。。XSS利用站点内的的信任用户,,而CSRF则通过伪装来来自受信任用用户的请求来来利用受信任任的网站。与与XSS攻击相比,CSRF攻击往往不大大流行(因此此对其进行防防范的资源也也相当稀少))和难以防范范,所以被被认为比XSS更具危险性。。危害攻击者能让受受害用户修改改可以修改的的任何数据,,或者是执行行允许使用的的任何功能。。解决之道第一步,新建建CSRF令牌添加进用用户每次登陆陆以及存储在在httpsession里,这种令牌至少少对每个用户户会话来说应应该是唯一的的,或者是对对每个请求是是唯一的。//thiscodeisintheDefaultUserimplementationofESAPI/**Thisuser'sCSRFtoken.*/privateStringcsrfToken=resetCSRFToken();...publicStringresetCSRFToken(){csrfToken=ESAPI.randomizer().getRandomString(8,DefaultEncoder.CHAR_ALPHANUMERICS);returncsrfToken;}第二步,令牌牌同样可以包包含在URL中或作为一个个URL参数标记/隐藏字段。//fromHTTPUtilitilesinterfacefinalstaticStringCSRF_TOKEN_NAME="ctoken";//thiscodeisfromtheDefaultHTTPUtilitiesimplementationinESAPIpublicStringaddCSRFToken(Stringhref){Useruser=ESAPI.authenticator().getCurrentUser();if(user.isAnonymous()){returnhref;}//iftherearealreadyparametersappendwith&,otherwiseappendwith?Stringtoken=CSRF_TOKEN_NAME+"="+user.getCSRFToken();returnhref.indexOf('?')!=-1?href+"&"+token:href+"?"+token;}...publicStringgetCSRFToken(){Useruser=ESAPI.authenticator().getCurrentUser();if(user==null)returnnull;returnuser.getCSRFToken();}第三步,在服服务器端检查查提交令牌与与用户会话对对象令牌是否否匹配。//thiscodeisfromtheDefaultHTTPUtilitiesimplementationinESAPIpublicvoidverifyCSRFToken(HttpServletRequestrequest)throwsIntrusionException{Useruser=ESAPI.authenticator().getCurrentUser();//checkifuserauthenticatedwiththisrequest-noCSRFprotectionrequiredif(request.getAttribute(user.getCSRFToken())!=null){return;}Stringtoken=request.getParameter(CSRF_TOKEN_NAME);if(!user.getCSRFToken().equals(token)){thrownewIntrusionException("Authenticationfailed","PossiblyforgedHTTPrequestwithoutproperCSRFtokendetected");}}第四步,在注注销和会话超超时,删除用用户对象会话话和会话销毁毁。//thiscodeisintheDefaultUserimplementationofESAPIpublicvoidlogout(){ESAPI.httpUtilities().killCookie(ESAPI.currentRequest(),ESAPI.currentResponse(),HTTPUtilities.REMEMBER_TOKEN_COOKIE_NAME);HttpSessionsession=ESAPI.currentRequest().getSession(false);if(session!=null){removeSession(session);session.invalidate();}ESAPI.httpUtilities().killCookie(ESAPI.currentRequest(),ESAPI.currentResponse(),“JSESSIONID”);loggedIn=false;(Logger.SECURITY_SUCCESS,“Logoutsuccessful””);ESAPI.authenticator().setCurrentUser(User.ANONYMOUS);}信息泄露和错错误处理不当当定义应用程序常常常产生错误信信息并显示给给使用者。很很多时候,,这些错误信信息是非常有有用的攻击,,因为它们揭揭示实施细则则或有用的开开发信息利用用的漏洞。危害泄露太多的细细节(如错误误堆栈跟踪信信息、SQL语句等等);;登录失败后,,通知用户是是否用户ID或密码出错——登录失败可能能是由于ID或密码错误误造成的。这这为一个对关关键资产发动动蛮力攻击的的攻击者提供供重要信息。。解决之道案例1通过web.xml配置文件实现现<error><exception-type>java.lang.Throwable</exception-type><location>/error.jsp</location></error>案例2针对登录尝试试的攻击,可可以使用相同同的报错信息息,比如都是是提示“输入入的用户名或或者密码错误误!”。残缺的认证和和会话管理定义与认证和会话话管理相关的的应用程序功功能往往得不不到正确实施施,这就导致致攻击者破坏坏密码、密匙匙、会话令牌牌或利用实施施漏洞冒充其其他用户身份份。危害这些漏洞可能能导致部分甚甚至全部帐户户遭受攻击。。一旦攻击成成功,攻击者者能执行合法法用户的任何何操作。因此此特权帐户会会造成更大的的破坏。解决之道使用内置的会会话管理功能能。通过认证的问问候:使用单一的入入口点。确保在一开始始登录SSL保护的网页。。获取注销的权权利;添加超时;确保你使用的的是安全相关关的功能;使用强大的认认证;不进行默认身身份验证//BAD-DON'TUSEpublicbooleanlogin(Stringusername,Stringpassword){booleanisAuthenticated=true;try{//makecallstobackendtoactuallyperformloginagainstdatastoreif(!authenticationSuccess){isAuthenticated=false;}}catch(Exceptione){//handleexc}returnisAuthenticated;}不安全的加密密储存定义保护与加密敏敏感数据已经经成为网络应应用的最重要要的组成部分分。简单不不加密的敏感感数据是非常常普遍。不不加密的应用用程序设计不不当往往含有有密码,或者者使用不恰当当的密码或密密码作出强烈烈的严重错误误使用。这这些缺陷可以以导致违反披披露敏感数据据的遵守。危害攻击者能够取取得或是篡改改机密的或是是私有的信息息;攻击者通过这这些秘密的窃窃取从而进行行进一步的攻攻击;造成企业形象象破损,用户户满意度下降降,甚至会有有法律诉讼等等。解决之道验证你的结构构识别所有的敏敏感数据;识别这些数据据存放的所有有位置;确保所应用的的威胁模型能能够应付这些些攻击;使用加密手段段来应对威胁胁使用一定的机机制来进行保保护文件加密;数据库加密;;数据元素加密密。正确的使用这这些机制使用标准的强强算法;合理的生成,,分发和保护护密钥;准备密钥的变变更。验证实现方法法确保使用了标标准的强算法法;确保所有的证证书、密钥和和密码都得到到了安全的存存放;有一个安全的的密钥分发和和应急处理的的方案;不安全的通信信定义对于不加密的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 游泳馆勘察技术标投标
- 环保工程招投标委托书模板
- 农药原料招投标专员操作指南
- 本溪市供热服务用户体验优化
- 亲子活动中心租赁
- 新能源汽车项目保函策略
- 旅游服务提升工程中心管理办法
- 老旧小区改造评估师招聘协议
- 医疗资源区二手房买卖范本
- 交通运输枢纽站房租赁合同
- 咯血的介入治疗
- 教师专业成长概述教师专业发展途径PPT培训课件
- 球磨机安装专项施工方案
- 阀门压力等级对照表优质资料
- GMP质量管理体系文件 中药材干燥SOP
- YY/T 0874-2013牙科学旋转器械试验方法
- GB/T 25217.10-2019冲击地压测定、监测与防治方法第10部分:煤层钻孔卸压防治方法
- GB/T 21010-2007土地利用现状分类
- 下库大坝混凝土温控措施(二次修改)
- 医药代表初级培训课程课件
- SAT长篇阅读练习题精选14篇(附答案)
评论
0/150
提交评论