善舞红袖传飞鸿莫言深闺空寂寞Web应用测试2015.5主讲:xxx善舞红袖传飞鸿莫言深闺空寂寞2Web安全性测试主要内容:安全性简介安全性测试SQL注入善舞红袖传飞鸿莫言深闺空寂寞Web安全性软件安全测试是指有关验证软件的安全等级和识别潜在安全性缺陷的过程。其主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力,根据安全指标不同测试策略也不同。做好软件安全性测试的必要条件是:一是充分了解软件安全漏洞,二是评估安全风险,三是拥有高效的软件安全测试技术和工具。善舞红袖传飞鸿莫言深闺空寂寞安全防护策略善舞红袖传飞鸿莫言深闺空寂寞安全性测试的方法善舞红袖传飞鸿莫言深闺空寂寞对Web应用的安全性测试对Web的安全性测试可从以下几个方面入手:Web应用程序布署环境测试应用程序测试数据库问题测试容错测试善舞红袖传飞鸿莫言深闺空寂寞a)HTTP请求引发漏洞的测试超长URL的HTTP请求,特殊格式字符的HTTP请求,某些不存在文件的HTTP请求,COMInternetServices(CIS)–RPCoverHTTP漏洞,从而引发拒绝服务,源代码显示,站点物理路径泄露,执行任意命令及命令注入等安全问题。善舞红袖传飞鸿莫言深闺空寂寞b)目录安全测试目录权限和目录安全性直接影响着Web的安全性。测试中要检查Web应用程序布署环境的目录权限和安全性,不给恶意用户任何可用的权限。目录遍历可能导致用户从客户端看到或下载、删除Web服务器文件。因此,要测试Web应用程序及布署环境是否存在目录遍历问题;若存在该漏洞,可通过在各级目录中存放默认文档或及时升级系统来避免。善舞红袖传飞鸿莫言深闺空寂寞2.应用程序测试SQL注入漏洞测试表单漏洞测试Cookie验证漏洞测试用户身份验证测试文件操作漏洞测试Session测试命令注射漏洞测试日志文件测试善舞红袖传飞鸿莫言深闺空寂寞SQL注入漏洞测试SQL注入就其本质而言,是利用SQL语法,对应用程序中的漏洞的攻击。理论上,这种攻击对于所有基于SQL语言标准的数据库软件都是有效的,包括MSSQLServer,Oracle,DB2,Sybase,MySQL等。为防止SQL注入,程序员编写代码时,要对客户端和服务端进行两级检查。检查数据类型、数据长度和敏感字符的合法性。善舞红袖传飞鸿莫言深闺空寂寞Cookie验证漏洞测试如果系统使用了cookie,就要对cookie的使用情况进行检测。检查Cookies在生存期内能否正常工作而且对这些信息是否加密,是否按预定的时间进行保存,是否存在cookie可被伪造提交的问题,刷新对Cookie有什么影响及过期处理等。善舞红袖传飞鸿莫言深闺空寂寞用户身份验证测试用户身份验证测试主要检查无效的用户名和密码能否登录,密码是否对大小写敏感,是否有验证次数的限制,是否存在不验证而直接进入Web应用系统的问题,是否存在不登录就可查看非会员页面和权限问题,客户端提交的密码是否加密,服务端验证密码是否使用了MD5。善舞红袖传飞鸿莫言深闺空寂寞文件操作漏洞测试若系统有上传文件的功能,测试系统是否允许上传脚本文件、可执行文件等有可能给系统带来危害的文件。若有下载功能,可供下载的文件是否与系统的程序分别存放,是否存在数据库文件、包含文件和页面文件下载的可能。善舞红袖传飞鸿莫言深闺空寂寞Session测试Session测试主要检查Web应用系统是否有超时的限制,也就是检查用户登录后在一定时间内没有点击任何页面,是否需要重新登录才能正常使用,检查超时后能否自动退出,退出之后,浏览器回退按钮是否可以回到登录页面。善舞红袖传飞鸿莫言深闺空寂寞命令注射漏洞测试命令注射漏洞测试主要检查所有调用外部资源(例如system、exec、fork,或者所有的发出请求的语法)的源代码,查找那些来自于HTTP请求的输入可能发起调用的所有地方。善舞红袖传飞鸿莫言深闺空寂寞日志文件测试日志文件测试主要检查Web运行的相关信息是否写进了日志文件、是否可追踪,是否记录了系统运行中发生的所有错误,是否记录了用户的详细信息,包括用户的浏览器、用户停留的时间、用户IP等。记录了用户的IP,就能通过追捕查出用户的具体地点。错误作为日志保留下来,可供技术人员分析错误是由系统实现漏洞引起的还是由于黑客攻击引起的。善舞红袖传飞鸿莫言深闺空寂寞数据使用时的一致性和完整性测试Web应用系统中,使用数据库时,可能发生数据的一致性和完整性错误,因此,要检测系统中是否有事务管理和故障恢复功能,确认事务数据是否正确保存,检测系统是否有定期数据备份功能。善舞红袖传飞鸿莫言深闺空寂寞4.容错测试容错方案及方案一致性测试接口容错测试压力测试善舞红袖传飞鸿莫言深闺空寂寞容错方案及方案一致性测试出错处理应该在整个网站中保持一致性,并且每一个出错处理片断都应该是一个整体设计方案中的一部分。通过代码检查,测试系统差错处理方案是否合理,方案是否可以处理所有可能发生的错误,方案中是否存在泄漏设计细节的问题,是否存在不同的差错处理方案。善舞红袖传飞鸿莫言深闺空寂寞安全性问题-SQL注入SQL注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后将该字符串传递到SQLServer的实例以进行分析和执行。任何构成SQL语句的过程都应进行注入漏洞检查,因为SQLServer将执行其接收到的所有语法有效的查询。一个有经验的、坚定的攻击者甚至可以操作参数化数据。善舞红袖传飞鸿莫言深闺空寂寞SQL注入的主要形式包括直接将代码插入到与SQL命令串联在一起并使其得以执行的用户输入变量。一种间接的攻击会将恶意代码注入要在表中存储或作为元数据存储的字符串。在存储的字符串随后串连到一个动态SQL命令中时,将执行该恶意代码。善舞红袖传飞鸿莫言深闺空寂寞注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。由于插入的命令可能在执行前追加其他字符串,因此攻击者将用注释标记“--”来终止注入的字符串。执行时,此后的文本将被忽略。善舞红袖传飞鸿莫言深闺空寂寞以下脚本显示了一个简单的SQL注入。此脚本通过串联硬编码字符串和用户输入的字符串而生成一个SQL查询:varShipcity;ShipCity=Request.form(ShipCity);varsql=select*fromOrdersTablewhereShipCity='+ShipCity+';用户将被提示输入一个市县名称。如果用户输入Redmond,则查询将由与下面内容相似的脚本组成:SELECT*FROMOrdersTableWHEREShipCity='Redmond'善舞红袖传飞鸿莫言深闺空寂寞但是,假定用户输入以下内容:Redmond';droptableOrdersTable--此时,脚本将组成以下查询:SELECT*FROMOrdersTableWHEREShipCity='Redmond';droptableOrdersTable--'分号(;)表示一个查询的结束和另一个查询的开始。双连字符(--)指示当前行余下的部分是一个注释,应该忽略。如果修改后的代码语法正确,则服务器将执行该代码。SQLServer处理该语句时,SQLServer将首先选择OrdersTable中的所有记录(其中ShipCity为Redmond)。然后,SQLServer将删除OrdersTable。善舞红袖传飞鸿莫言深闺空寂寞只要注入的SQL代码语法正确,便无法采用编程方式来检测篡改。因此,必须验证所有用户输入,并仔细检查在您所用的服务器中执行构造SQL命令的代码。善舞红袖传飞鸿莫言深闺空寂寞SQL注入的危害修改数据库内容删除其它表窃取数据到本地执行系统命令,进而修改或控制操作系统、破坏硬盘数据等特点攻击耗时少、危害大善舞红袖传飞鸿莫言深闺空寂寞编写代码的最佳实践验证所有输入使用类型安全的SQL参数在存储过程中使用参数化输入在动态SQL中使用参数集合善舞红袖传飞鸿莫言深闺空寂寞验证所有输入始终通过测试类型、长度、格式和范围来验证用户输入。以下建议应被视为最佳做法:对应用程序接收的数据不做任何有关大小、类型或内容的假设。例如,您应该进行以下评估:如果一个用户在需要邮政编码的位置无意中或恶意地输入了一个10MB的MPEG文件,应用程序会做出什么反应?如果在文本字段中嵌入了一个DROPTABLE语句,应用程序会做出什么反应?测试输入的大小和数据类型,强制执行适当的限制。这有助于防止有意造成的缓冲区溢出。测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。善舞红袖传飞鸿莫言深闺空寂寞使用类型安全的SQL参数SQLServer中的Parameters集合提供了类型检查和长度验证。如果使用Parameters集合,则输入将被视为文字值而不是可执行代码。使用Parameters集合的另一个好处是可以强制执行类型和长度检查。范围以外的值将触发异常。SqlDataAdaptermyCommand=newSqlDataAdapter(AuthorLogin,conn);myCommand.SelectCommand.CommandType=CommandType.StoredProcedure;SqlParameterparm=myCommand.SelectCommand.Parameters.Add(@au_id,SqlDbType.VarChar,11);parm.Value=Login.Text;在此示例中,@au_id参数被视为文字值而不是可执行代码。将对此值进行类型和长度检查。如果@au_id值不符合指定的类型和长度约束,则将引发异常。善舞红袖传飞鸿莫言深闺空寂寞在存储过程中使用参数化输入存储过程如果使用未筛选的输入,则可能容易受SQLInjection攻击。例如,以下代码容易受到攻击:SqlDataAdaptermyCommand=newSqlDataAdapter(LoginStoredProcedure'+Login.Text+',conn);如果使用存储过程,则应使用参数作为存储过程的输入。善舞红袖传飞鸿莫言深闺空寂寞在动态SQL中使用参数集合如果不能使用存储过程,您仍可使用参数,如以下代码示例所示:SqlDataAdaptermyCommand=newSqlDataAdapter(SELECTau_lname,au_fnameFROMAuthorsWHEREau_id=@au_id,conn);SQLParameterparm=myCommand.SelectCommand.Parameters.Add(@au_id,SqlDbType.VarChar,11);Parm.Value=Login.Text;善舞红袖传飞鸿莫言深闺空寂寞跨站点脚本攻击用户某银行的网站恶意攻击者2.用户将嵌入的脚本当做数据发送.3.浏览器执行脚本后,返回数据.Cookie:服务器存储在客户机上并在后续会话过程中访问的信息。通过Cookie,服务器可以检索有关客户机的特定信息。善舞红袖传飞鸿莫言深闺空寂寞33Thankyou!