WEB开发中的请求调试小记

这边就讲一个小发现,以后不定期补充。让调试工具记录下所有的请求,包括各种跳转之前的请求,以前只知道用IE的httpwatch插件来调试,直到周五看了王益同学用firebug调试的时候在net那个tab下有个persist的选项,惊呼发现了新大陆,原来还可以这样!!不用firebug好多年,一直用的chrome做开发,一直都是找chrome插件的来调试跳转请求。。蛋疼。。。然后就果断google了下,其实chrome也有同样的功能,就是在network那个标签下的大黑点preserve log upon navigation,为什么我以前google的时候没找到呢?而且,IE9的dev tools也是有这个功能的!不详述。。

今日两坑

坑1:

$a = 'test';
echo $a['bdd'];

得到结果

t

一个字符串,把它当成数组并取它一个不存在的键值,得到的是第一个字符。今天写一个方法的时候,返回结果可能是字符串也可能是数组,调用这个方法的时候用数组中的某个值来判断,无疑是错的!

坑2:

在post的时候有大量的数据,发现post不过去,原来php在5.3.9以后的版本中加入了最大post数量的限制,默认是1000条,可以在php.ini中找到该项

max_input_vars来做修改。

为什么在5.3.9中加入这个参数?这个就要提到hash冲突的一个漏洞了,这个漏洞在没patch的低版本php中存在,包括java等各种语言中存在。hash表是一种良好的数据结构,当数据被精心构造过之后,会使hash表降级成一个链表结构,在查询数据的时候每次都会发生hash冲突,一次命中率极低,大大降低了效率,这就使得单机DDOS攻击成为可能。因此加入这个post数量限制限制了服务器接收的post数据,即使post过来默认的1000个数据都能精确的造成hash冲突,那么也是在服务器能够承受的范围内了。

可以参考:

参考1

参考2