版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Web应用测试,2012.3,2011-09,2,四、Web安全性测试,主要内容: 安全性简介 安全性测试 SQL注入,Web安全性,软件安全测试是指有关验证软件的安全等级和识别潜在安全性缺陷的过程。其主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力,根据安全指标不同测试策略也不同。做好软件安全性测试的必要条件是:一是充分了解软件安全漏洞,二是评估安全风险,三是拥有高效的软件安全测试技术和工具。,安全系统防护体系,系统之间数据通信和会话访问不被非法侵犯。,网络平台、操作系统、基础通用应用平台(服务/数据库等)的安全。,基础设施的物理安全。,系统数据的机密性、完
2、整性、访问控制和可恢复性。,业务运行逻辑安全/业务资源的访问控制;业务交往的不可抵赖性/业务实体的身份鉴别/业务数据的真实完整性,实体安全,通信安全,应用安全,数据安全,1,平台安全,2,3,4,5,6,7,对系统安全性的动态维护和保障,控制由于时间推移和系统运行导致安全性的变化。,运行安全,对相关人员、技术和操作进行管理,总揽以上各安全要素进行控制。,管理安全,数据层,中间层,客户端,Web 应用的架构,Internet,防火墙,Web 服务器,应用 服务器,数据库,信息安全全景,Web 服务器,应用 服务器,IDS(入侵诊断系统) IPS(入侵防御系统),安全防护策略,安全性测试的方法,威
3、胁类列表1/2,摘录自:1.OWAP 2010 TOP 10 Risks 2.AppScan Standard Edition 用户指南,威胁类列表2/2,摘录自:1.OWAP 2010 TOP 10 Risks 2.AppScan Standard Edition 用户指南,对Web应用的安全性测试,对Web的安全性测试可从以下几个方面入手: Web 应用程序布署环境测试 应用程序测试 数据库问题测试 容错测试,1. Web 应用程序布署环境测试,HTTP 请求引发漏洞的测试 操作系统目录安全性及Web应用程序布署环境目录遍历问题测试 系统中危险组件的测试 TCP 端口测试,a) HTTP
4、请求引发漏洞的测试,超长 URL 的 HTTP 请求,特殊格式字符的 HTTP 请求,某些不存在文件的 HTTP 请求,COM Internet Services (CIS) RPC over HTTP 漏洞,从而引发拒绝服务,源代码显示,站点物理路径泄露,执行任意命令及命令注入等安全问题。,b)目录安全测试,目录权限和目录安全性直接影响着 Web 的安全性。测试中要检查 Web 应用程序布署环境的目录权限和安全性,不给恶意用户任何可用的权限。目录遍历可能导致用户从客户端看到或下载、删除 Web 服务器文件。因此,要测试 Web 应用程序及布署环境是否存在目录遍历问题;若存在该漏洞,可通过在各
5、级目录中存放默认文档或及时升级系统来避免。,c) 系统中危险组件的测试,系统中危险组件的存在,会给恶意用户留下非常危险的“后门”。如恶意用户可利用Windows 系统中存在的FileSystemObject 组件篡改、下载或删除服务器中的任何文件。,d) TCP 端口测试,开放非必要的端口,会给 Web 应用程序带来安全威胁。因此,在布署 Web 应用程序前,要用端口扫描软件对布署环境进行 TCP 端口测试,禁止 UDP,只开启必要的 TCP 端口。,2. 应用程序测试,SQL 注入漏洞测试 表单漏洞测试 Cookie验证漏洞测试 用户身份验证测试 文件操作漏洞测试 Session 测试 跨网
6、站脚本(XSS)漏洞测试 命令注射漏洞测试 日志文件测试,SQL 注入漏洞测试,SQL 注入就其本质而言,是利用SQL 语法,对应用程序中的漏洞的攻击。理论上,这种攻击对于所有基于SQL 语言标准的数据库软件都是有效的,包括 MS SQL Server,Oracle,DB2 ,Sybase ,MySQL等。 为防止SQL 注入,程序员编写代码时,要对客户端和服务端进行两级检查。检查数据类型、数据长度和敏感字符的合法性。,表单漏洞测试,表单数据提交测试 本地提交表单的漏洞测试,Cookie验证漏洞测试,如果系统使用了 cookie,就要对 cookie 的使用情况进行检测。检查 Cookies
7、在生存期内能否正常工作而且对这些信息是否加密,是否按预定的时间进行保存,是否存在cookie 可被伪造提交的问题,刷新对 Cookie 有什么影响及过期处理等。,用户身份验证测试,用户身份验证测试主要检查无效的用户名和密码能否登录,密码是否对大小写敏感,是否有验证次数的限制,是否存在不验证而直接进入 Web 应用系统的问题,是否存在不登录就可查看非会员页面和权限问题,客户端提交的密码是否加密,服务端验证密码是否使用了 MD5。,文件操作漏洞测试,若系统有上传文件的功能,测试系统是否允许上传脚本文件、可执行文件等有可能给系统带来危害的文件。若有下载功能,可供下载的文件是否与系统的程序分别存放,是
8、否存在数据库文件、包含文件和页面文件下载的可能。,Session 测试,Session测试主要检查Web应用系统是否有超时的限制,也就是检查用户登录后在一定时间内没有点击任何页面,是否需要重新登录才能正常使用,检查超时后能否自动退出,退出之后,浏览器回退按钮是否可以回到登录页面。,跨网站脚本(XSS)漏洞测试,对于呈增长趋势的跨站脚本(XSS)攻击,可使用内嵌检测的方式进行处理。使用 WebInspect 工具识别所有的假造参数,使用 DevInspect 工具通过特定代码关联在页面上发现安全缺陷,对于显示代码,采用 CSE HTML Validator工具进行测试。,命令注射漏洞测试,命令注
9、射漏洞测试主要检查所有调用外部资源( 例如system 、exec 、fork ,或者所有的发出请求的语法)的源代码,查找那些来自于 HTTP请求的输入可能发起调用的所有地方。,日志文件测试,日志文件测试主要检查Web运行的相关信息是否写进了日志文件、是否可追踪,是否记录了系统运行中发生的所有错误,是否记录了用户的详细信息,包括用户的浏览器、用户停留的时间、用户 IP 等。记录了用户的 IP,就能通过追捕查出用户的具体地点。错误作为日志保留下来,可供技术人员分析错误是由系统实现漏洞引起的还是由于黑客攻击引起的。,3. 数据库问题测试,数据库名称和存放位置安全检测 数据库本身的安全检测 数据使用
10、时的一致性和完整性测试,数据库名称和存放位置安全检测,一个常规的数据库名称,并且存放在与 Web 应用程序文件相同或相关的位置,很容易被下载。若在程序代码中包含有数据库名称和数据库文件绝对位置,一旦代码丢失,同样存在暴库的危险。因此,在布署数据库和编写相关的代码时,要避免问题的发生。,数据库本身的安全检测,对数据库本身的安全检测主要检查数据库是否配置了不同的存取权限,所有操作是否都可以审计追踪,敏感数据是否加密等。为了保证数据库的安全,不同权限的用户定义不同的视图,以限制用户的访问范围;不同的敏感数据采取不同的加密算法,重要的数据分开存储。,数据使用时的一致性和完整性测试,Web 应用系统中,
11、使用数据库时,可能发生数据的一致性和完整性错误,因此,要检测系统中是否有事务管理和故障恢复功能,确认事务数据是否正确保存,检测系统是否有定期数据备份功能。,4. 容错测试,容错方案及方案一致性测试 接口容错测试 压力测试,容错方案及方案一致性测试,出错处理应该在整个网站中保持一致性,并且每一个出错处理片断都应该是一个整体设计方案中的一部分。通过代码检查,测试系统差错处理方案是否合理,方案是否可以处理所有可能发生的错误,方案中是否存在泄漏设计细节的问题,是否存在不同的差错处理方案。,接口容错测试,检测浏览器与服务器的接口是否正确,中断用户到服务器的网络连接时,系统是否能够正确处理数据;对于有外部
12、接口的 Web 系统,如网上商店可能要实时验证信用卡数据以减少欺诈行为的发生,中断 Web 服务器到信用卡验证服务器的连接,检测系统是否能够正确处理这些错误,是否对信用卡进行收费。另外,还要测试系统是否能够处理外部服务器返回的所有可能的消息。,压力测试,压力测试是实际破坏一个Web应用系统,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到 Web 应用系统崩溃,接着当系统重新启动时获得存取权。,安全性问题 - SQL注入,SQL 注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后将该字符串传递到 SQL Server 的实例以进行分析和
13、执行。任何构成 SQL 语句的过程都应进行注入漏洞检查,因为 SQL Server 将执行其接收到的所有语法有效的查询。一个有经验的、坚定的攻击者甚至可以操作参数化数据。,SQL 注入的主要形式包括直接将代码插入到与 SQL 命令串联在一起并使其得以执行的用户输入变量。一种间接的攻击会将恶意代码注入要在表中存储或作为元数据存储的字符串。在存储的字符串随后串连到一个动态 SQL 命令中时,将执行该恶意代码。,注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。由于插入的命令可能在执行前追加其他字符串,因此攻击者将用注释标记“-”来终止注入的字符串。执行时,此后的文本将被忽略。,以下脚本
14、显示了一个简单的 SQL 注入。此脚本通过串联硬编码字符串和用户输入的字符串而生成一个 SQL 查询: var Shipcity; ShipCity = Request.form (ShipCity); var sql = select * from OrdersTable where ShipCity = + ShipCity + ; 用户将被提示输入一个市县名称。如果用户输入 Redmond,则查询将由与下面内容相似的脚本组成: SELECT * FROM OrdersTable WHERE ShipCity = Redmond,但是,假定用户输入以下内容: Redmond; drop t
15、able OrdersTable- 此时,脚本将组成以下查询: SELECT * FROM OrdersTable WHERE ShipCity = Redmond;drop table OrdersTable- 分号 (;) 表示一个查询的结束和另一个查询的开始。双连字符 (-) 指示当前行余下的部分是一个注释,应该忽略。如果修改后的代码语法正确,则服务器将执行该代码。SQL Server 处理该语句时,SQL Server 将首先选择 OrdersTable 中的所有记录(其中 ShipCity 为 Redmond)。然后,SQL Server 将删除 OrdersTable。,只要注入的
16、 SQL 代码语法正确,便无法采用编程方式来检测篡改。因此,必须验证所有用户输入,并仔细检查在您所用的服务器中执行构造 SQL 命令的代码。,SQL注入的危害 修改数据库内容 删除其它表 窃取数据到本地 执行系统命令,进而修改或控制操作系统、破坏硬盘数据等 特点 攻击耗时少、危害大,编写代码的最佳实践,验证所有输入 使用类型安全的 SQL 参数 在存储过程中使用参数化输入 在动态 SQL 中使用参数集合 筛选输入 Like 子句,验证所有输入,始终通过测试类型、长度、格式和范围来验证用户输入。以下建议应被视为最佳做法: 对应用程序接收的数据不做任何有关大小、类型或内容的假设。例如,您应该进行以
17、下评估: 如果一个用户在需要邮政编码的位置无意中或恶意地输入了一个 10 MB 的 MPEG 文件,应用程序会做出什么反应? 如果在文本字段中嵌入了一个 DROP TABLE 语句,应用程序会做出什么反应? 测试输入的大小和数据类型,强制执行适当的限制。这有助于防止有意造成的缓冲区溢出。 测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。,使用 XML 文档时,根据数据的架构对输入的所有数据进行验证。 绝不直接使用用户输入内容来生成 Transact-SQL 语句。 使用存储过程来验证用户输入。 在多层环境中,
18、所有数据都应该在验证之后才允许进入可信区域。未通过验证过程的数据应被拒绝,并向前一层返回一个错误。 实现多层验证。对无目的的恶意用户采取的预防措施对坚定的攻击者可能无效。更好的做法是在用户界面和所有跨信任边界的后续点上验证输入。,绝不串联未验证的用户输入。字符串串联是脚本注入的主要输入点。 在可能据以构造文件名的字段中,不接受下列字符串:AUX、CLOCK$、COM1 到 COM8、CON、CONFIG$、LPT1 到 LPT8、NUL 以及 PRN。 如果可能,拒绝包含以下字符的输入。,使用类型安全的 SQL 参数,SQL Server 中的 Parameters 集合提供了类型检查和长度验
19、证。如果使用 Parameters 集合,则输入将被视为文字值而不是可执行代码。使用 Parameters 集合的另一个好处是可以强制执行类型和长度检查。范围以外的值将触发异常。 SqlDataAdapter myCommand = new SqlDataAdapter(AuthorLogin, conn); myCommand.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter parm = myCommand.SelectCommand.Parameters.Add(au_id, SqlDbType.V
20、arChar, 11); parm.Value = Login.Text; 在此示例中,au_id 参数被视为文字值而不是可执行代码。将对此值进行类型和长度检查。如果 au_id 值不符合指定的类型和长度约束,则将引发异常。,在存储过程中使用参数化输入,存储过程如果使用未筛选的输入,则可能容易受 SQL Injection 攻击。例如,以下代码容易受到攻击: SqlDataAdapter myCommand = new SqlDataAdapter(LoginStoredProcedure + Login.Text + , conn); 如果使用存储过程,则应使用参数作为存储过程的输入。,在动态 SQL 中使用参数集合,如果不能使用存储过程,您仍可使用参数,如以下代码示例所示: SqlDataAdapter myCommand = new SqlDataAdapter( SELECT au_lname, au_fname FROM Aut
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 15879.620-2026半导体器件的机械标准化第6-20部分:表面安装半导体器件封装外形图绘制的一般规则小外形J形引线封装(SOJ)尺寸测量方法
- 锅炉大件热处理工复测强化考核试卷含答案
- 聚合物配制工操作水平能力考核试卷含答案
- 2026年中西医结合诊疗规范课件
- 箔材精制工安全实操测试考核试卷含答案
- 氧化铝制取工安全生产能力考核试卷含答案
- 时间频率计量员常识评优考核试卷含答案
- 壁画彩塑文物修复师创新思维模拟考核试卷含答案
- 司泵工复测测试考核试卷含答案
- 脂肪醇胺化操作工安全风险模拟考核试卷含答案
- 2024-2025学年广东广州番禺区七年级(下)期末数学试卷及答案
- 2026福建海峡科化股份有限公司社会招聘15人笔试备考题库及答案详解
- 水果农药安全间隔期执行手册
- 护理沟通与人文关怀技巧
- 软包墙面施工方案及技术措施
- 急诊科护理人员的血气分析解读
- 2025年闽侯县公安局招聘警务辅助人员真题
- 2025年安徽省《保密知识竞赛必刷100题》考试题库及答案详解【有一套】
- cors站建设技术方案
- 2025年度新疆新星国有资本投资集团有限公司校园招聘5人笔试参考题库附带答案详解
- 销售心态培训课件
评论
0/150
提交评论