手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2009年09月的文章

Cache测试策略

本文来自于淘宝QA,这是第一次看到有这样的贴子,是测试cache的贴子。虽然他不是测试cache本身,但从文中的测试要点来说,还是有借鉴意义的。像他说的:触发点、何时使用cache等都是一个要点。
众所周知,任何一个程序,为了效率,总有部分资料是需要被缓存的。比如,系统配置,这玩意一旦设定,很可能就再也不会修改了(或者说,修改的频率非常低),如果每次都查询数据库,那效率也太低了。所以它应该是被缓存的对象之一。
分类也是应该能够被缓存的,谁TMD有事没事去修改分类、删除分类?一个成熟的网站,分类定下来后,基本也就定下来了,除非更改业务方向,增加业务范围,才会去修改分类。当然还有一种情况,那就是为了促销,人为修改(但这应该不属于分类了啦)所以,分类也应该是被缓存的对象之一。。。

好了不说废话了,看测试是怎么说的吧:
原文:http://rdc.taobao.com/blog/qa/?p=3434

        前段时间做了一个cache相关的接口测试,这里要说的并不是测试cache本身,而是测试一个使用了cache的业务系统,该业务系统通过调用另一个专 门提供cache服务的系统来实现数据的cache。也就是说cache服务本身对于我来说是黑盒的。那么在这种情况下,我们应该从哪些方面来考虑测试, 才能够保证业务系统对cache服务的调用是正确的呢?我是从以下几方面考虑的:

一.Cache的触发点

        如果一个系统使用了cache,那么它就一定会有cache的触发点,所谓触发点就是会触发cache缓存数据或者更新数据的事件。这些事件往往就是对某 些接口的调用。例如查询数据的时候,如果缓存里没有该数据应该会触发cache来缓存该数据。更新数据的时候,如果缓存里有该数据,应该会触发cache 删除该数据的缓存等等。我们必须要掌握每一个触发点才能够知道如何来设计针对cache的测试,因为我们的目的就是要验证所有的触发点是否都正确的触发了 我们所期望的缓存事件。

二.何时应该使用cache,何时应该使用数据库

         掌握了系统中所有的cache触发点之后我们就可以开始设计如何来验证这些触发点了。一般来说,被缓存起来的数据都是供查询使用的,明确了这点之后,其实 归结起来,我们只需要考虑两个问题:一是何时应该查询cache中的数据,二是何时应该查询数据库中的数据。

         举例来说,一个典型的使用了cache的查询接口应该是这样的,当查询数据的时候,接口会首先去缓存中查找数据,如果缓存中没有数据,再去数据库中查找, 如果在数据库中找到了指定的数据,它会在返回数据的同时,对该数据做缓存处理。了解了这个过程之后,你可以先通过直接插数据库的方式准备一条数据,这个时 候该数据是没有缓存的,因为没有触发缓存数据的事件发生,那你如何来验证这个数据确实没有缓存呢?很简单,直接把该数据从数据库删除掉,再调用查询接口查 询该数据,如果没有查询到,说明该数据确实没有被缓存。另外一方面,你还应该保证如果数据被查询到了,那么它就应该被缓存起来,这个时候你同样可以直接删 除数据库中的数据,再次查询该数据,如果可以查询到,那么就说明它确实是被缓存起来了。总的来说就是了解缓存过程,分解过程,保证过程的每一步结果都是所 期望的,这就有别于通常的接口测试只关注输入和最终的输出结果了。它的思想和切面编程的思想有点类似,也许我们可以把这种测试方法叫做切面测试。

三.多触发点联合测试

         在保证了每个触发点的正确性之后。我们还应该进一步把这些触发点按照实际的业务场景串联起来测试。例如,可能会有这样一个业务场景:生成数据→查询数据→ 编辑数据→查询数据→删除数据→查询数据。值得注意的是对于这样的联合测试除了保证每个步骤的结果都正确的同时,我们应该尽量采用调用业务系统接口的方式 来完成每一步,尽量避免直接操作数据库,因为这样更能模拟出真实的调用场景。

        不同的cache方式会有不同的测试方法,以上仅是我在测试特定cache的时候的一些想法,仅供参考。如果你测试过cache,不妨也来说说你自己的测试方法,如果你没有测试过cache也可以来谈谈自己的想法。

Tags: cache, 测试

SQL查询结果集对注入的影响及利用

现在研究注入性文章的不多了,但还是需要研究,特别是自己在做网站的时候。除了SQL注入,剩下的还有XSS注入等。唉。做个网站都要这么辛苦。。

  对于注入而言,错误提示是极其重要。所谓错误提示是指和正确页面不同的结果反馈,高手是很重视这个一点的,这对于注入点的精准判断至关重要。本问讨论下关于几类错误和他产生的原理,希望对读者有所帮助。

  错误提示主要有逻辑错误和语法错误以及脚本运行错误三类。

  一:逻辑错误

  简单的例子是1=1 1=2这两个,1=1与1=2页面不同的原理是什么?以$sql = "select * from news where id=$_GET[id]"为例。

  select * from news where id=1 and 1=2产生的结果集为NULL,然后程序取值得时候,就会去出空值,无法显示。当然有的程序发现SQL执行结果集为空,就立即跳转,效果就不显鸟。值得注 意的是,有的如Oracle Postgresql的数据库在结果集为空情况下会再页面上表现字符型null字样,这算是个特点。如果使用or条件,比如

  select * from news where id=1 or 1=1

  和and 1=2得结果正好相反,他的结果集十分庞大。如果SQL语句如此,再加上程序是循环读取结果集(一些编程上的陋习)那么会取出所有结果,结果可能运行很 慢,在数据量巨大的oracle上容易出现。这个例子会出现什么呢,一般程序取出结果集中的第一条结果,那么很可能已经不是id=1的那条新闻了,这就是 由些小菜奇怪有时候or 1=1页面会发生变化的原因。

  归根到底,都是结果集不同造成的,灵活掌握是关键,这并非单纯的经验问题。

  二:语法错误

  语法错误时比较熟悉的,比如对于SQL Server,PgSQL,Sybase的注入错误提示都很重要,因为利用它的特性来获取信息很快速。语法错误造成的结果可能是SQL错误而中断脚本执 行,但是脚本或服务器设置屏蔽错误的情况下,程序得到继续执行,但是结果集不存在,连NULL都算不上,反馈给攻击者的很可能就是结果集为空的情况,其实 这是脚本的处理结果。当然Oracle PgSQL表现null。

  三:运行错误不用说了,典型的就是利用mysql注入benchmark让脚本运行超时得到物理路径,以及利用超时来获得不同的表征进行盲注入。

  四:逻辑错误和语法错误的结合。

  当表征极不明显的时候,利用类似iff这样的函数进行正确与否的区分有时候会成救命稻草。因为语法错误和逻辑错误的表征大多数情况都会有不同。

  iff(1=1,1,'no')这个会产生结果1 注意是数字,而iff(1=2,1,'no')这个会产生'no' 是字符。那么

  id=1 and 1=iff(1=1,1'no')正确是必然成立的,而id=1 and 1=iff(1=2,1,'no')会因为类型不同发生语法错误。不过可惜的是似乎支持iff函数的数据库不多,呵呵。

  现在讲结果集在注入中的利用原理。

  一:从'or''='开始

  这是学习SQL注入的初级课程,登陆漏洞。我简略从SQL结果集上分析。

  $sql = "select top 1 * from admin where username='$username' and password=md5('$password')";

  显而易见,'or''='的加入使SQL语句返回了一条记录,这才使验证通过。

  二:再看现在的验证中的SQL

  $sql = "select top 1 * from admin where username='$username'";

  结果集不为空才根据抽取的记录集中的密码值与用户提交的密码MD5值进行比对来进行验证。这样,你突然发现'or''='的计策失败鸟,但是后 台明明有注入,这就是验证方法造成的。跟进这个验证过程,'or''='的确产生了一个结果集(admin表中的第一行记录)但是遗憾的事,后来的密码比 对没法通过,验证无法成功。

  思路很简单,网上有案例,我重在原理,利用union来产生想要的结果集。比如'and(1=2)union select top 1 username,'123456得md5值',id from admin where username='admin

  这样产生了admin的记录信息,但是记录集中的密码那个位置的值被替换成了123456的md5值,这样,使用admin 123456通过验证并且继承他的权利。

  更有甚者全部用'xxx'的方法来盲狙,这就很“过分”鸟。不过在sql2000 sybase这些严格要求类型匹配的数据库来说,这样不能撼动“管理员登陆”的,因为执行时发生了语法错误,结果集为NULL。另外以前 ewebeditor注入漏洞来上传马也是这个union操作结果集来达到目的的经典案例。

来自于:http://hi.baidu.com/isbx/blog/item/17d629349ecef3325ab5f538.html

Tags: sql注入

php注入下的万能密码

原创作者:Dream an end (S.s.F)

说实话如果一个网站的前台都是注入漏洞,那么凭经验,万能密码进后台的几率基本上是百分之百。

可是有的人说对PHP的站如果是GPC魔术转换开启,就会对特殊符号转义,就彻底杜绝了PHP注入。

其实说这话的人没有好好想过,更没有尝试过用万能密码进PHP的后台。

其实GPC魔术转换是否开启对用万能密码进后台一点影响也没有。

如果你用这样的万能密码'or'='or',当然进不去,理由是GPC开启的时候单引号会被转换。

PHP注入时我常用的万能密码是:'or 1=1/*.

那我们分析一下为什么这可以进后台。

如果sql语句这样写:"SELECT * FROM admin where name='".$_POST['name']."'and password='".$_POST['password']."'",那我们在帐号处输入万能密码'or 1=1/*,密码随便输,sql语句就成了select * from admin where name='’or 1=1/*' and password='任意字符'。

/*为mysql的注释符,这样后面的东西就都被注释掉了,也就是为什么密码随便输的原因。

假设GPC转换没有开启,那么请看:where name='’or 1=1(*/后面的东西被注释掉了),

name='’的逻辑值为假,而后面的1=1逻辑值则为真,对于整体就成了假 or 真,最终的逻辑值还是真,就进后台了。

那么如果GPC转换开启了,就对单引号进行了转换。语句就变成了where name='\’or 1=1,在

看一下和刚才有什么区别,无非是多了个\。name='\'与name=''的逻辑值一样,都为假,那1=1 为真,总的sql语句的逻辑值不还是真吗?那有进不去后台的理由吗?

所以总的来说,php网站的万能密码可以这样写:'or 1=1/*,而GPC转换是否开启对它没有任何影响!

所以请改变你的想法:存在字符型注入的php网站是可以用万能密码'or 1=1/*的

有意思的文章,来自于:http://hi.baidu.com/isbx/blog/item/f83b9e3de2e33f09bba16721.html

推荐一款插件:ScribeFire

这款插件的用途是可以让你快速发表博客。功能还算是挺强大。主要是方便啦

而且,它是firefox的插件,不需要你安装软件,有firefox的地方就能够使用,多方便啊。。。

当然,在使用它为wordpress发表文章的时候,还必须在后台开启XML-RPC应用。否则是不能发表的。

博客系统看来是需要更换了,sablog用了也将近2年了。最痛苦的就是输入的文章突然消失(不小心按了Backspace键,然后回来的时候内容就没有了),出现了好几次这样的事故。。

下载地址为:https://addons.mozilla.org/en-US/firefox/addon/1730

截图:大小: 24.52 K
尺寸: 200 x 119
浏览: 2271 次
点击打开新窗口浏览全图

Tags: 插件, firefox, scribefire, wordpress, blog

[转]身体器官工作表一览,身体是干任何事情的本钱

作为一名IT工作者,身体其实就从来没有注意过,随着年龄的增长,身体会越来越差,真应了那句:年轻时用身体赚钱,年老时用钱养身体。

时刻注意一下,有什么问题及早就医,拖到最后就晚了。正如扁鹊见蔡恒公那样,在皮肤不看,在内腑不看,等到深入骨髓再看已经来不太了。

以下就是摘抄的文章内容:

身体器官工作表一览,睡觉别太晚了 任何试图更改生物钟的行为,都将给身体留下莫名其妙的疾病,20、30年之后再后悔,已经来不及了。
一、晚上9-11点为免疫系统(淋巴)排毒时间,此段时间应安静或听音乐 。
二、晚间11-凌晨1点,肝的排毒,需在熟睡中进行。
三、凌晨1-3点,胆的排毒,亦同。
四、凌晨3-5点,肺的排毒。此即为何咳嗽的人在这段时间咳得最剧烈,因排毒动作已走到肺;不应Medicine,以免抑制废积物的排除。
五、凌晨5-7点,大肠的排毒,应上厕所排便。
六、凌晨7-9点,小肠大量吸收营养的时段,应吃早餐。疗病者最好早吃,在6点半前,养生者在7点半前,不吃早餐者应改变习惯,即使拖到9、10点吃都比不吃好。
七、半夜至凌晨4点为脊椎造血时段,必须熟睡,不宜熬夜。
------- 手、脚、身体各个穴位所对应的内脏 (图) 下面这几张图显示了,咱们的手、脚、身体各个穴位所对应的内脏。按摩的时候,对准穴位下力,才能对我们身体有益。

大小: 43.36 K
尺寸: 386 x 376
浏览: 1469 次
点击打开新窗口浏览全图

 如图所示,比如我们的脚趾分别代表了我们眼睛和耳朵,而整个脚底就相当于人体身体的主干。 下面是手

大小: 76.52 K
尺寸: 324 x 376
浏览: 1530 次
点击打开新窗口浏览全图 

      身体是革命的本钱,学会了自己给自己按摩一下吧。 拉拉耳朵养护全身器官 肾是人体重要脏器之一,乃先天之本。肾脏功能是否正常,对健康长寿有着举足轻重的作用。   
中医五行学说认为,肾主藏精,开窍于耳,医治肾脏疾病的穴位有很多在耳部。所以经常进行双耳锻炼法,可起到健肾壮腰、养身延年的作用。   
一、提拉耳垂法 双手食指放耳屏内侧后,用食指、拇指提拉耳屏、耳垂,自内向外提拉,手法由轻到重,牵拉的力量以不感疼痛为限,每次3~5分钟。此法可治头痛、头昏、神经衰弱、耳鸣等疾病。   
二、手摩耳轮法 双手握空拳,以拇、食二指沿耳轮上下来回推摩,直至耳轮充血发热。此法有健脑、强肾、聪耳、明目之功,可防治阳痿、尿频、便秘、腰腿痛、颈椎病、心慌、胸闷、头痛、头昏等病症。  
三、提拉耳尖法 用双手拇、食指夹捏耳廓尖端,向上提揪、揉、捏、摩擦15~20次,使局部发热发红。此法有镇静、止痛、清脑明目、退热、抗过敏、养肾等功效,可防治高血压、失眠、咽喉炎和皮肤病。   
四、搓弹双耳法 两手分别轻捏双耳的耳垂,再搓摩至发红发热。然后揪住耳垂往下拉,再放手让耳垂弹回。每天两三次,每次20下。此法可促进耳朵的血液循环,有健肾壮腰之功效。   
五、双手拉耳法 左手过头顶向上牵拉右侧耳朵数十次,然后右手牵拉左耳数十次。这一锻炼还可促进颌下腺、舌下腺的分泌,减轻喉咙疼痛,治慢性咽炎。   
六、双手掩耳法 两手掌掩两耳廓,手指托后脑壳,用食指压中指弹击24下,可听到“隆隆”之声,曰击“天鼓”。此刺激可活跃肾脏,有健脑、明目、强肾之功效。   
七、全耳按摩法 双手掌心摩擦发热后,向后按摩腹面(即耳正面),再向前反折按摩背面,反复按摩5~6次。此法可疏通经络,对肾脏及全身脏器均有保健作用。   
八、双手扫耳法 以双手把耳朵由后面向前扫,这时会听到“嚓嚓”的声音。每次20下,每日数次,只要长期坚持,必能强肾健身。   
以 上八法,可根据各人所需选择,或单项或几项配合进行,只要能持之以恒,一定能收到理想的效果。 简单易学的强肾健体保健法 祖国传统医学认为,肾为先天之本,生命之源,肾气充盈,则精力充沛,筋骨强健,步履轻快,神思敏捷,肾气亏损则阳气虚弱,腰膝酸软,易感风寒,生疾病等。   
肾虚病症有阴虚、阳虚之分。   肾阴虚者,有肺热、咽燥、腰膝酸软、头晕耳鸣、舌苔偏红等症状。   肾阳虚者,常见有肢体畏寒、精神萎靡、腰酸耳鸣、舌淡、体胖等症状。   
中 医认为,肢体的功能活动,包括关节、筋骨等组织的运动,皆由肝肾所支配,故有“肾主骨,骨为肾之余”的说法,因此坚持体育锻炼,以取得养筋健肾、舒筋活 络、畅通气脉、增强自身抵抗力之功效,从而达到强肾健体目的。散步、慢跑、打球、做操、练拳舞剑等,都是不错的锻炼项目。下面介绍几个简单的保健方法,您 可以试试。   搓擦腰眼:两手搓热后紧按腰部,用力搓30次。“腰为肾之府”,搓擦腰眼可疏通筋脉,增强肾脏功能。   
揉按丹田:两手搓 热,在腹部丹田处按摩30~50次。丹田乃人之真气、真精凝聚之所,为人体生命之本。此法常用之,可增强人体的免疫功能,提高人体的抵抗力,从而达到强肾 固本的目的,有利于延年益寿。   发“吹”音 “吹”与肾相应,肾属水,故有滋养肾水的功效。反复做6~9遍。   
另外,心脏对应的是“呵”音,肝脏对应的是“嘘”的音,脾对应的是“呼”的音,肺对应的是“斯”的音,三焦对应的是“唏”的音。发音的时间长一些,次数多一些。   
健脾通胃肠气的保健方法:   双手重叠,顺时针绕肚脐揉腹,以通为主,可促进胃肠气通畅,逆时针绕肚脐揉腹,则以补为主,可起到健脾作用,便秘患者,多顺时针揉,脾虚者,则加逆时针揉,每次300~500下,每天1~2次。 祝福朋友们都有一个健康的好身体!

Tags: 器官, 身体