安全性测试主要是测试系统在没有授权的内部或者外部用户对系统进行攻击或者恶意破坏时如何进行处理,是否仍能保证数据和页面的安全。测试人员可以学习一些黑客技术,来对系统进行攻击。另外,对操作权限的测试也包含在安全性测试中。具体测试内容如下:
执行添加、删除、修改等动作中是否做过登录检测。
退出系统之后的操作是否可以完成。
所有插入表单操作中输入特殊字符是否可以正常输正常存储,特殊字符为:!?#¥%……—*()~——-+=[]{}、|;:‘”?/《》<>。
在带有参数的回显数据的动作中更改参数,把参数改为特殊字符并加入操作语句看是否出错。
测试表单中有没有做标签检测,标签检测是否完整。
在插入表单中加入特殊的HTML代码,例如:。
系统安全性测试的十个重要问题
1:没有被验证的输入
测试方法:
数据类型(字符串,整型,实数,等)
允许的字符集
最小和最大的长度
是否允许空输入
参数是否是必须的
重复是否允许
数值范围
特定的值(枚举型)
特定的模式(正则表达式)
2:有问题的访问控制
测试方法:
主要用于需要验证用户身份以及权限的页面,复制该页面的url地址,关闭该页面以后,查看是否可以直接进入该复制好的地址;
例:从一个页面链到另一个页面的间隙可以看到URL地址,直接输入该地址,可以看到自己没有权限的页面信息;
3:错误的认证和会话管理
分析:帐号列表:系统不应该允许用户浏览到网站所有的帐号,如果必须要一个用户列表,推荐使用某种形式的假名(屏幕名)来指向实际的帐号。
浏览器缓存:认证和会话数据作为GET的一部分来发送
认证和会话数据不应该作为GET的一部分来发送,应该使用POST,
例:对Grid、Label、Tree view类的输入框未作验证,输入的内容会按照html语法解析出来;
4:跨站脚本(XSS)
分析:攻击者使用跨站脚本来发送恶意代码给没有发觉的用户,窃取他机器上的任意资料;
测试方法:
•HTML标签:<…>……>
•转义字符:&(&);<(<);>(>); (空格) ;
•脚本语言:
…Alert(‘’)
•特殊字符:‘ ’ < > /
•最小和最大的长度
•是否允许空输入
例:对Grid、Label、Tree view类的输入框未作验证,输入的内容会按照html语法解析出来
5:缓冲区溢出
没有加密关键数据
分析:用户使用缓冲区溢出来破坏web应用程序的栈,通过发送特别编写的代码到web程序中,攻击者可以让web应用程序来执行任意代码。
例:view-source:http地址可以查看源代码
在页面输入密码,页面显示的是 *****, 右键,查看源文件就可以看见刚才输入的密码;
6:注入式漏洞
分析:用户登录处、不用登录可以查看到的数据库中的数据列表尤为重要。
例:一个验证用户登陆的页面,如果使用的sql语句为:
Select * from table A where username=’’ + username+’’ and pass word ….
Sql 输入
‘ or 1=1 ――
就可以不输入任何password进行攻击;
7:不恰当的异常处理
分析:程序在抛出异常的时候给出了比较详细的内部错误信息,暴露了不应该显示的执行细节,网站存在潜在漏洞;
8:不安全的存储
没有加密关键数据
分析:帐号列表:系统不应该允许用户浏览到网站所有的帐号,如果必须要一个用户列表,推荐使用某种形式的假名(屏幕名)来指向实际的帐号。
浏览器缓存:认证和会话数据不应该作为GET的一部分来发送,应该使用POST;
例:view-source:http地址可以查看源代码
在页面输入密码,页面不显示 “*****”;
在页面输入密码,页面显示的是 *****,
数据库中存的密码没有经过加密;
地址栏中可以看到刚才填写的密码;
右键查看源文件就可以看见刚才输入的密码;
9:拒绝服务
分析:Config中的链接字符串以及用户信息,邮件,数据存储信息都需要加以保护。攻击者可以从一个主机产生足够多的流量来耗尽狠多应用程序,最终使程序陷入瘫痪。需要做负载均衡来对付。
10:不安全的配置管理
分析:Config中的链接字符串以及用户信息,邮件,数据存储信息都需要加以保护
程序员应该作的:配置所有的安全机制,关掉所有不使用的服务,设置角色权限帐号,使用日志和警报。
例:数据库的帐号是不是默认为“sa”,密码(还有端口号)是不是直接写在配置文件里而没有进行加密。
软件安全测试涉及的方面
2.
用户名和密码
●
是否设置密码最小长度
●
用户名和密码中是否可以有空格或回车?
●
是否允许密码和用户名一致
●
防恶意注册:可否用自动填表工具自动注册用户?
●
遗忘密码处理
●
有无缺省的超级用户?
●
有无超级密码?
●
是否有校验码?
●
密码错误次数有无?
3.
直接输入需要权限的网页地址可以访问
如:没有登录或注销登录后,直接输入登录后才能查看的页面的网址,能直接打开页面;
注销后,点浏览器上的后退,可以进行操作。
正常登录后,直接输入自己没有权限查看的页面的网址,可以打开页面。
5.
隐藏域与CGI参数
分析:有此隐藏域中泄露了重要的信息,有时还可以暴露程序原代码。
直接修改CGI参数,就能绕过客户端的验证了。
如:
只要改变value的值就可能会把程序的原代码显示出来。
6.
上传文件没有
分析:上传文件最好要有格式的;
上传文件还要有大小的。
7.
把数据验证寄希望于客户端的验证
分析:客户端是不安全,重要的运算和算法不要在客户端运行。
重要的数据(如:密码)在客户端应该加密。
例:保存网页并对网页进行修改,使其绕过客户端的验证。(如只能选择的下拉框,对输入数据有特殊要求的文本框)
13. 传输中的密码没有加密
分析:传输中的密码要进行加密。
传输前加密用SSL加密,https的方式提交用户名和密码;
如果使用tomcat做服务器的话,SSL加密只需配置就可以了:
TOMCAT用https替换http的方法
//////////////////////////////////////////////////////////////
首先用java的工具keytool 生成一个ssl证书:
keytool -genkey -keyalg RSA -alias youraliasname -keystore .keystore
输入keystore密码: yourpass
您的名字与姓氏是什么?
[Unknown]: liubin
您的组织单位名称是什么?
[Unknown]: test
您的组织名称是什么?
[Unknown]: www.test.com
您所在的城市或区域名称是什么?
[Unknown]: beijing
您所在的州或省份名称是什么?
[Unknown]: beijing
该单位的两字母国家代码是什么
[Unknown]: cn
CN=liubin, OU=test, O=www.test.com, L=beijing, ST=beijing, C=cn 正确吗?
[否]: y
输入 (如果和 keystore 密码相同,按回车): Web应用系统的安全性测试区域主要有: (1)现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的,是否可以不登陆而直接浏览某个页面等。 (2)Web应用系统是否有超时的,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。 (3)为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。 (4)当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。 (5)服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。 我们觉得楼上的象是测试论坛或者需要登陆的网站呢 我就顺着加几条吧: 1。登陆系统,点击退出系统,或者注销,然后点击IE的退出,看看能否再次登陆,这个对于安全也比较需要,主要测试的是退出系统后,对cok0kies 2。如果你的系统,客户端比较多,那么就要判断一个用户能否同时在不同的机器上登陆 3。使用了加密的软件,WEB系统运行后,加密软件异常,包括关闭,退出,此时你的WEb系统安全怎么处理 4。你的WEB系统的教本信息是否会反应一些你的数据库信息,如,当前页面涉及了你的数据库里的那些表啦,等等。 六、安全测试 Web应用系统的安全性测试区域主要有: 1、 目录设置 Web 安全的第一步就是正确设置目录。每个目录下应该有 index.html 或 main.html 页面,这样就不会显示该目录下的所有内容。如果没有执行这条规则。那么选中一幅图片,单击鼠标右键,找到该图片所在的路径"…com/objects/images"。然后在浏览器地址栏中手工输入该路径,发现该站点所有图片的列表。这可能没什么关系。但是进入下一级目录 "…com/objects" ,点击 jackpot。在该目录下有很多资料,其中有些都是已过期页面。如果该公司每个月都要更改产品价格信息,并且保存过期页面。那么只要翻看了一下这些记录,就可以估计他们的边际利润以及他们为了争取一个合同还有多大的降价空间。如果某个客户在谈判之前查看了这些信息,他们在谈判桌上肯定处于上风。 2.登录 现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的,是否可以不登陆而直接浏览某个页面等。 3.Session Web应用系统是否有超时的,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。 4.日志文件 为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。 5.加密 当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。 6.安全漏洞 服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。 目前网络安全问题日益重要,特别对于有交互信息的网站及进行电子商务活动的网站尤其重要。目前我们的测试没有涵盖网站的安全性的测试,我们拟定采用工具来测定, 工具如下 SAINT------- Security Administrator’s Integrated Network Tool 此工具能够测出网站系统的相应的安全问题,并且能够给出安全漏洞的解决方案,不过是一些较为常见的漏洞解决方案。 应用系统安全测试方法及内容 2.最小口令长度的。 3.强制修改的时间间隔。 4.口令的唯一性。 5.口令过期失效后允许入网的宽限次数 2.支持当操作员在所配置的时间内没有对界面进行任何操作则该应用自动失效。 2.版本控制 2.查看支撑系统版本控制管理办法或相似文件,是否有相应的版本管理规章制度;软件升级、补丁植入流程管理是否合理。 3.查看系统软件版本记录文件及软件介质与软件操作手册,是否有详细的软件版本号、软件升级与补丁植入情况的记录。 1、功能验证 功能验证是采用软件测试当中的黑盒测试方法,对涉及安全的软件功能,如:用户管理模块,权限管理模块,加密系统,认证系统等进行测试,主要验证上述功能是否有效,具体方法可使用黑盒测试方法。 2、漏洞扫描 安全漏洞扫描通常都是借助于特定的漏洞扫描器完成的。漏洞扫描器是一种自动检测远程或本地主机安全性弱点的程序。通过使用漏洞扫描器,系统管理员能够发 现所维护信息系统存在的安全漏洞,从而在信息系统网络安全保卫站中做到“有的放矢”,及时修补漏洞。按常规标准,可以将漏洞扫描分为两种类型:主机漏洞扫 描器(Host Scanner)和网络漏洞扫描器(Net Scanner)。主机漏洞扫描器是指在系统本地运行检测系统漏洞的程序,如著名的COPS、Tripewire、Tiger等自由软件。网络漏洞扫描器 是指基于网络远程检测目标网络和主机系统漏洞的程序,如Satan、ISS Internet Scanner等。 安全漏洞扫描是可以用于日常安全防护,同时可以作为对软件产品或信息系统进行测试的手段,可以在安全漏洞造成严重危害前,发现漏洞并加以防范。 3、模拟攻击实验 对于安全测试来 说,模拟攻击测试是一组特殊的黑盒测试案例,我们以模拟攻击来验证软件或信息系统的安全防护能力,下面简要列举在数据处理与数据通信环境中特别关心的几种 攻击。在下列各项中,出现了“授权”和“非授权”两个术语。“授权”意指“授予权力”,包含两层意思:这里的权力是指进行某种活动的权力(例如访问数 据);这样的权力被授予某个实体、代理人或进程。于是,授权行为就是履行被授予权力(未被撤销)的那些活动。 ● 冒充:就是一个实体假装成一个不同的实体。冒充常与某些别的主动攻击形式一起使用,特别是消息的重演与篡改。例如,截获鉴别序列,并在一个有效的鉴别序列使用过一次后再次使用。很少的实体为了得到额外的,可能使用冒充成具有这些的实体,举例如下。 1) 口令猜测:一旦黑客识别了一台主机,而且发现了基于NetBIOS、Telnet或NFS服务的可利用的用户帐号,并成功地猜测出了口令,就能对机器进行控制。 2) 缓冲区溢出:由于在很多地服务程序中大意的程序员使用类似于“strcpy(),strcat()”不进行有效位检查的函数,最终可能导致恶意用户编写一 小段程序来进一步打开安全缺口,然后将该代码放在缓冲区有效载荷末尾,这样,当发生缓冲区溢出时,返回指针指向恶意代码,执行恶意指令,就可以得到系统的 控制权。 ● 重演:当一个消息或部分消息为了产生非授权效果而被重复时,出现重演。例如,一个含有鉴别信息的有效消息可能被另一个实体所重演,目的是鉴别它自己(把它当作其他实体)。 ● 消息篡改:数据所传送的内容被改变而未被发觉,并导致非授权后果,如下所示。 1) DNS高速缓存污染:由于DNS服务器与其他名称服务器交换信息的时候并不进行身份验证,这就使得黑客可以加入不正确得信息,并把用户引向黑客自己的主机。 2) 伪造电子邮件:由于SMTP并不对邮件发送者的身份进行鉴定,因此黑客可以对内部客户伪造电子邮件,声称是来自某个客户认识并相信的人,并附上可安装的特洛伊木马程序,或者是一个指向恶意网站的链接。 ● 服务拒绝:当一个实体不能执行它的正常功能,或它的动作防碍了别的实体执行它们的正常功能的时候,便发生服务拒绝。这种攻击可能是一般性的,比如一个实体 抑制所有的消息,也可能是有具体目标的。例如,一个实体抑制所有流向某一特定目的端的消息,如安全审计服务。这种攻击可以是对通信业务流的抑制,或产生额 外的通信业务流。也可能制造出试图破坏网络操作的消息,特别是如果网络具有中继实体,这些中继实体根据从别的中继实体那里接收到的状态报告,来做出路由选择的决定。拒绝服务攻击种类很多,举例如下。 1) 死亡之ping(ping of death):由于在早期的阶段,路由器对包的最大尺寸都有,许多操作系统对TCP/IP栈的实现在ICMP包上都规定为KB,并且在读取包的标题后,要根据该标题头里包含的信息来为有效载荷生成缓冲区。当产生畸形的、声称自己的尺寸超过ICMP上限,也就是加载尺寸超过K上限的包时,就会出 现内存分配错误,导致TCP/IP堆栈崩溃,致使接受方宕机。 2) 泪滴(Teardorop):泪滴攻击利用那些在TCP/IP堆栈实现中信任IP碎片中的包的标题头所包含的信息来实现自己的攻击。IP分段含有指示该分段所包含的是原包的哪一段的信息,某些TCP/IP(包括Service Pack 4以前的NT)在收到含有重叠偏移的伪造分段时将崩溃。 3) UDP洪水(UDP Flood): 各种各样的假冒攻击利用简单的TCP/IP服务,如Chargen和Echo来传送毫无用处的数据以占满带宽。通过伪造与某一主机的Chargen服务之间的一次的UDP连接,回复地址指向开着Echo服务的一台主机,这样就生成在两台主机之间的足够多的无用数据流,如果数据流足够多,就会导致带宽的服务攻击。 4) SYN洪水(SYN Flood):一些TCP/IP栈的实现,只能等待从有限数量的计算机发来的ACK消息,因为它们只有有限的内存缓冲区用于创建连接,如果这一缓冲区充满 了虚假连接的初始信息,该服务器就会对接下来的连接请求停止响应,直到缓冲区里的连接企图超时为止。在一些创建连接不受的实现里,SYN洪水也具有类 似的影响。 5) Land攻击:在Land攻击中,一个特别打造的SYN包的原地址和目标地址都被设置成某一个服务器地址,这将导致接受服务器向它自己的地址发送SYN- ACK消息,结果,这个地址又发回ACK消息并创建一个空连接,每一个这样的连接都将保留,直到超时。各种系统对Land攻击的反应不同,许多UNIX实 现将崩溃,NT变得极其缓慢(大约持续5分钟)。 6) Smurf攻击:一个简单的Smurf攻击,通过使用将回复地址设置成受害网络的广播地址的ICMP应答请求(ping)数据包,来淹没受害主机的方式进 行,最终导致该网络的所有主机都对此ICMP应答请求作出答复,导致网络阻塞,比“Ping of Death”洪水的流量高出一个或两个数量级。更加复杂的Smurf将源地址改为第三方的受害者,最终导致第三方雪崩。 7) Fraggle攻击:Fraggle攻击对Smurf攻击作了简单的修改,使用的是UDP应答消息,而非ICMP。 8) 电子邮件:电子邮件是最古老的匿名攻击之一,通过设置一台机器,不断大量地向同一地址发送电子邮件,攻击者能够耗尽接收者网络的带宽。 9) 畸形消息攻击:各类操作系统上的许多服务都存在此类问题,由于这些服务在处理信息之前没有进行适当正确的错误校验,在收到畸形的信息时可能会崩溃。 ● 内部攻击:当系统的合法用户以非故意或非授权方式进行动作时就成为内部攻击。多数已知的计算机犯罪都和使系统安全遭受损害的内部攻击有密切的关系。能用来 防止内部攻击的保护方法包括:所有管理数据流进行加密;利用包括使用强口令在内的多级控制机制和集中管理机制来加强系统的控制能力;为分布在不同场所的业务部门划分VLAN,将数据流隔离在特定部门;利用防火墙为进出网络的用户提供认证功能,提供访问控制保护;使用安全日志记录网络管理数据流等。 ● 外部攻击:外部攻击可以使用的方法有:搭线(主动的与被动的)、截取辐射、冒充为系统的授权用户、冒充为系统的组成部分、为鉴别或访问控制机制设置旁路等。 ● 陷阱门:当系统的实体受到改变,致使一个攻击者能对命令或对预定的事件或事件序列产生非授权的影响时,其结果就称为陷阱门。例如,口令的有效性可能被修改,使得除了其正常效力之外也使攻击者的口令生效。 ● 特洛伊木马:对系统而言的特洛伊木马,是指它不但具有自己的授权功能,而且还有非授权功能。一个向非授权信道拷贝消息的中继就是一个特洛伊木马。典型的特洛伊木马有NetBus、BackOrifice和BO2k等。 4、侦听技术 侦听技术实际上是在数据通信或数据交互过程,对数据进行截取分析的过程。目前最为流行的是网络数据包的捕获技术,通常我们称为Capture,黑客可以利用该项技术实现数据的盗用,而测试人员同样可以利用该项技术实现安全测试。 该项技术主要用于对网络加密的验证。 安全性测试 安全性测试是有关验证应用程序的安全服务和识别潜在安全性缺陷的过程。此节包括一些重要的测试建议,用来验证已创建安全的应用程序。 由于攻击者没有闯入的标准方法,因而也没有实施安全性测试的标准方法。另外,目前几乎没有可用的工具来彻底测试各个安全方面。由于应用程序中的功能错误也可代表潜在的安全性缺陷,因此在实施安全性测试以前需要实施功能测试。 有一点很重要,应注意安全性测试并不最终证明应用程序是安全的。而是只用于验证所设立对策的有效性,这些对策是基于威胁分析阶段所做的假设而选择的。 下面提供测试应用程序安全性的一些建议。 测试缓冲区溢出 缓冲区溢出是计算机历史中被利用的第一批安全错误之一。目前,缓冲区溢出继续是最危险也是最常发生的弱点之一。试图利用这种脆弱性可以导致种种问题,从损坏应用程序到攻击者在应用程序进程中插入并执行恶意代码。 将 数据写入缓冲区时,开发人员向缓冲区写入的数据不能超出其所能存放的数据。如果正在写入的数据量超出已分配的缓冲区空间,将发生缓冲区溢出。当发生缓冲区 溢出时,会将数据写入到可能为其他用途而分配的内存部分中。最坏的情形是缓冲区溢出包含恶意代码,该代码随后被执行。缓冲区溢出在导致安全脆弱性方面所占 的百分比很大。 实施源代码安全检查 根据所讨论应用程序的敏感程度,实施对应用程序源代码的安 全审核可能是明智的。不要将源代码审核与代码检查相混淆。标准代码检查的目的是识别影响代码功能的一般代码缺陷。源代码安全检查的目的则是识别有意或无意 的安全性缺陷。开发处理财政事务或提供公共安全的应用程序时尤其应保证进行这种检查。 验证应急计划 总是存在应用程序的安全防御被突破的潜在可能,只有应急计划就位并有效才是明智的。在应用程序服务器或数据中心检测到病毒时将采取哪些步骤?安全性被越过时,必须迅速作出反应来防止进一步损坏。在应急计划投入实战以前请弄清它们是否起作用。 攻击您的应用程序 测试人员习惯于攻击应用程序以试图使其失败。攻击您自己的应用程序是与其类似但目的更集中的过程。尝试攻击应用程序时,应寻找代表应用程序防御弱点的、可利用的缺陷。 Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见、比较常见和有点常见这种级别的。我相信从Web应用安全角度来说,会比你从网上搜的要全面的多。以下是这些安全性问题的列表: 1、跨站脚本攻击(CSS or XSS, Cross Site Scripting) 2、SQL注入攻击(SQL injection) 3、远程命令执行(Code execution,个人觉得译成代码执行并不确切) 4、目录遍历(Directory traversal) 5、文件包含(File inclusion) 6、脚本代码暴露(Script source code disclosure) 7、Http请求头的额外的回车换行符注入(CRLF injection/HTTP response splitting) 8、跨帧脚本攻击(Cross Frame Scripting) 9、PHP代码注入(PHP code injection) 10、XPath injection 11、Cookie篡改(Cookie manipulation) 12、URL重定向(URL redirection) 13、Blind SQL/XPath injection for numeric/String inputs 14、Google Hacking Web Application Security Consortium(WASC)将Web应用安全威胁分为如下六类: (验证) 用来确认某用户、服务或是应用身份的攻击手段。 (授权) 用来决定是否某用户、服务或是应用具有执行请求动作必要权限的攻击手段。 (客户端攻击) 用来扰乱或是探测 Web 站点用户的攻击手段。 (命令执行) 在 Web 站点上执行远程命令的攻击手段。 5 Information Disclosure(信息暴露) 用来获取 Web 站点具体系统信息的攻击手段。 (逻辑性攻击) 用来扰乱或是探测 Web 应用逻辑流程的攻击手段。 建立整体的威胁模型,测试溢出漏洞、信息泄漏、错误处理、SQL 注入、身份验证和授权错误. 1.输入验证 客户端验证 服务器端验证(禁用脚本调试,禁用Cookies) 1.输入很大的数(如4,294,967,269),输入很小的数(负数) 2.输入超长字符,如对输入文字长度有,则尝试超过,刚好到达字数时有何反应 3.输入特殊字符,如:~!@#$%^&*()_+<>:”{}| 4.输入中英文空格,输入字符串中间含空格,输入首尾空格 5.输入特殊字符串NULL,null,0x0d 0x0a 6.输入正常字符串 7.输入与要求不同类型的字符,如: 要求输入数字则检查正值,负值,零值(正零,负零),小数,字母,空值; 要求输入字母则检查输入数字 8.输入html和javascript代码 9.对于像回答数这样需检验数字正确性的测试点,不仅对比其与问题最终页的回答数,还要对回答进行添加删除等操作后查看变化 例如: 1.输入”gfhd,看是否出错; 2.输入,看是否出现文本框; 3.输入看是否出现提示。 关于上传: 1.上传文件是否有格式,是否可以上传exe文件; 2.上传文件是否有大小,上传太大的文件是否导致异常错误,上传0K的文件是否会导致异常错误,上传并不存在的文件是否会导致异常错误; 3.通过修改扩展名的方式是否可以绕过格式,是否可以通过压包方式绕过格式; 4.是否有上传空间的,是否可以超过空间所的大小,如将超过空间的大文件拆分上传是否会出现异常错误。 5.上传文件大小大于本地剩余空间大小,是否会出现异常错误。 6.关于上传是否成功的判断。上传过程中,中断。程序是否判断上传是否成功。 7.对于文件名中带有中文字符,特殊字符等的文件上传。 下载: 1.避免输入:\\..\\web. 2.修改命名后缀。 关于URL: 1.某些需登录后或特殊用户才能进入的页面,是否可以通过直接输入网址的方式进入; 2.对于带参数的网址,恶意修改其参数,(若为数字,则输入字母,或很大的数字,或输入特殊字符等)后打开网址是否出错,是否可以非法进入某些页面; 3.搜索页面等url中含有关键字的,输入html代码或JavaScript看是否在页面中显示或执行。 4.输入善意字符。 UBB: [url=http://www.****.com] 你的网站[/url] 1.试着用各种方式输入UBB代码,比如代码不完整,代码嵌套等等. 2.在UBB代码中加入属性,如样式,事件等属性,看是否起作用 3.输入编辑器中不存在的UBB代码,看是否起作用 [url=javascript:alert('hello')]链接[/url] [email=javascript:alert('hello')]EMail[/email] [email=******************.cn STYLE="background-image: url(javascript:alert('XSS'))"]******************.cn[/email] [b STYLE="background-image: url(javascript:alert('XSS'))"]一首诗酸涩涩服务网[/b] [i STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/i] [u]一二三四五六七北京市[/u] [font=微软雅黑" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/font] [size=4" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/size] [color=Red" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/color] [align=center" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/align] [float=left" STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/float] [font=微软雅黑 STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/font] [size=4 STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/size] [color=Red STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/color] [align=center STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/align] [list=1] [*]一二三四五六七北京市[/list] [indent]一二三四五六七北京市[/indent] [float=left STYLE="background-image: url(javascript:alert('XSS'))"]一二三四五六七北京市[/float] [media=ra,400,300,0]http://bbsforblog.ikaka.com/posttopic.aspx?forumid=109[/media] 2.输出编码 常用的测试输入语句有: "> http://xxx';alert('xss');var/ a='a ‘”>xss&< a=”\” ; b=”;alert(/xss/);//” “输出内容” border=“0” alt=“logo” /> “’” ‘”’ “”” “ “ “ “”“ “‘ ” title=”” 对输出数据到输出数据的对比,看是否出现问题。 3.防止SQL注入 Admin-- ‘or -- ‘ and ( ) exec insert * % chr mid and 1=1 ; And 1=1 ; aNd 1=1 ; char(97)char(110)char(100) char(49)char(61)char(49) ; %20AND%201=2 ‘and 1=1 ; ‘And 1=1 ; ‘aNd 1=1 ; and 1=2 ; ‘and 1=2 and 2=2 and user>0 and (select count(*) from sysobjects)>0 and (select count(*) from msysobjects)>0 and (Select Count(*) from Admin)>=0 and (select top 1 len(username) from Admin)>0(username 已知字段) ;exec master..xp_cmdshell “net user name password /add”— ;exec master..xp_cmdshell “net localgroup name administrators /add”— and 0<>(select count(*) from admin) 简单的如where xtype=’U’,字符U对应的ASCII码是85,所以可以用where xtype=char(85)代替;如果字符是中文的,比如where name=’用户’,可以用where name=nchar(29992)+nchar(25143)代替。 4.跨站脚本攻击(XSS) 对于 XSS,只需检查 HTML 输出并看看您输入的内容在什么地方。它在一个 HREF 标记中吗?是否在 IFRAME 标记中?它在 CLSID 标记中吗?在 IMG SRC 中吗?某些 Flash 内容的 PARAM NAME 是怎样的? ★~!@#$%^&*()_+<>,./?;'"[]{}\\- ★%3Cinput /%3E ★%3Cscript%3Ealert('XSS')%3C/script%3E ★ ★ ★★ ★ ★ ★javascript:alert(/xss/) ★javascript:alert(/xss/) ★ ★ ★ ★=’> ★ ★"> ★http://xxx';alert('xss');var/ a='a ★’”>xss&< ★"onmouseover=alert('hello');" ★&{alert('hello');} ★>"'> ★>%22%27> ★>"'>6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;%26%23x70;%26%23x74;%26%23x3a;alert(%26quot;XSS%26quot;)> ★AK%22%20style%3D%22background:url(javascript:alert(%27XSS%27))%22%20OS%22 ★%22%2Balert(%27XSS%27)%2B%22 ★ ★ ★ ★a? ★
安全性测试测试内容 测试要点 测试方法 应用系统的用户管理、权限管理应充分利用操作系统和数据库的安全性;应用软件运行时须有完整的日志记录。 日志记录的完整性 检测系统运行时是否会记录完整的日志。如进行详单查询,检测系统是否会记录相应的操作员、操作时间、系统状态、操作事项、IP地址等。 不允许以明文方式保存用户密码或系统使用的各类密码 用户密码或系统使用的各类密码的加密存储 检查数据库中的用户密码、操作员密码等字段是否是以加密方式保存。 为保证安全性,口令不允许以明码的形式显示在输出设备上,应能对口令进行如下:最小口令长度、强制修改口令的时间间隔、口令的唯一性、口令过期失效后允许入网的宽限次数。 1.口令不允许以明码显示在输出设备上。 实际登录系统,输入相应的口令,检测口令是否是以加密形式显示,同时检测最小口令长度、强制修改口令的时间间隔、口令的唯一性、口令过期失效后允许入网的宽限次数。 应用系统应支持操作失效时间的配置,当操作员在所配置的时间内没有对界面进行任何操作则该应用自动失效。 1.支持操作失效时间的配置。 检测系统是否支持操作失效时间的配置,同时达到所配置的时间内没有对界面进行任何操作时,检测系统是否会将用户自动失效,需要重新登录系统。 应用系统应提供完善的审计功能,对系统关键数据的每一次增加、修改和删除都能记录相应的修改时间、操作人和修改前的数据记录。 支持系统关键数据进行维护的记录功能。 检测对系统关键数据进行增加、修改和删除时,系统是否会记录相应的修改时间、操作人员和修改前的数据记录。 应用程序的源代码不允许放在运行主机上,应另行存放,并具有版本控制能力。 1.应用程序的源代码不允许放在运行主机上,应另行存放。 1.登录主机审查应用程序的源代码存放位置。 各应用软件目录设置及其访问权限应有相应的规范,以保证系统的安全性和可维护性。 各应用软件目录设置及其访问权限应有相应的规范。 审查是否有各应用软件目录设置及其访问权限相应的规范文件。 接口程序连接登录必须进行认证(根据用户名、密码认证) 支持接口程序连接登录时的认证。 实际运行系统,检测接口程序连接登录时,是否需要输入相应的用户名、密码进行认证。