Ph4nt0m Webzine 0x03发布,看不懂这名字含义。不过文章是很好看
http://www.cncert.net/pstzine_0x03/pdf/PSTZine_0x03_0x06.pdf
以后不用mt_rand这种方法来取回密码。。试了一下,果然是这样
Submitted by 月黑风高 on 2009年05月06日 10:58:56
Ph4nt0m Webzine 0x03发布,看不懂这名字含义。不过文章是很好看
http://www.cncert.net/pstzine_0x03/pdf/PSTZine_0x03_0x06.pdf
以后不用mt_rand这种方法来取回密码。。试了一下,果然是这样
Submitted by 月黑风高 on 2009年03月15日 17:39:10
晚天搞到三点多,把ZF默认的目录结构做了一些修改,配置一些文件,放到SVN中
以前扯淡过一次通行证,不过当时知道的比较少,这次再扯一次,
通行证,我知道有两种,一种是cookie加密,一种是memcached做的令牌
1. cookie 小站用的比较多,问题是不支持分布,也不能解决多地登录,在不在线,还有不能放太大的数据量,毕竟每次请求都附上cookie。
2. 令牌可以解决cookie的一些问题,很多网站都在用,好处就是支持分布式,N个应用都可以自由判断用户登录没登,不好的地方的是保持不方便。
令牌一般有两组,一组只保存很少的信息:用户ID=>(登录时间,客户端IP),这个是用来快速判断。
另一组才是真正的令牌:md5(用户id+登录时间)=>其它信息,用户每次登录都会刷新这个令牌。
想过用memory表,效率太差,比较好的方法是把这两个结合起来:
在线的用户会放在memcached中,假设设置时间是60m, 过期就是不在线,可以解决在线问题。
用户本地有cookie, 如果解密成功且memcached中没有用户信息则设置,此时同一用户可以多地登录的。
如果应用程序要求比较严格,不允许多地登录,则可以用memcached中保存的客户端信息来确定当前唯一登录用户。
在线保持还会有一个效率问题,因为要刷新在线时间,保持状态,不过比较好解决,简单的就是设置长一点过期时间和随机刷新。
总体上来说:
cookie: (rc4或xxtea) 用户ID, 登录时间戳
memcache第一组:用户ID=>(登录时间,客户端IP(更严格一点可以包括浏览器信息))
memcache第二组:md5(用户id+登录时间)=>其它信息
这样做有一个很不好的地方,增加了其它应用判断是否登录的复杂度,以前只要检测memcached就可以了,现在还要检查一下cookie, 不过借助于js的还是比较容易解决。
另外,这样会有一些安全问题,比如用户改了密码以后,原来的cookie还能用,这个问题解决应该和全站安全一起考虑,用户在注册的时候随机生成的key,位数可以少一点,这个key是用来确认客户端cookie有效的,也可以用来防止跨站请求伪造,也可以md5的时候加上,形成双密码保护,功能多多。。
Submitted by 月黑风高 on 2008年08月31日 03:21:36
http://www.cnblogs.com/Safe3/archive/2008/08/22/1274095.html
重装系统之后虚拟机起不了,直接在zs中测试,确实存在问题,
PHP处理字符还是以单字节为单位,所以PHP页面中如果不放中文,可以存成任何编码
addslashes在过滤的时候也是以字节进行过滤的,这就会破坏GBK的序列,逻辑上来说,
即使不注入,使用addslashes也会导致个别字符乱码。
如果数据库是gbk,插入数据库时,数据库0xbf5c当成一个字,这种情况不只在gbk其它多字节的数据库里也应该有问题
update:080901 晕,我一直有个误区,以为gbk的第二个字节是从0开始,BS,实际GBK的范围是在8140-FEFE,这样,0x27不在gbk的范围中,直接使用str_replace替换就OK,谢谢safe3前辈
update:081030 想BS一下自己,因为空間商关门了一直没机会,竟然一直相当然mysql_real_escape_string和addslashes是一样的。
Submitted by 月黑风高 on 2008年08月15日 13:42:44
http://www.lostk.com/blog/install_xdebug/
以前嫌麻烦,今天装了一下,果然感觉很好用
如果装了不能用,可以看一下apache的日志。我装的时候发生这个错误
PHP Fatal error: [Zend Optimizer] Zend Optimizer 3.3.0 is incompatible with Xdebug 2.0.3 in Unknown on line 0
把Zend Optimizer注释掉就可以了,可能是版本冲突
Submitted by 月黑风高 on 2008年07月30日 23:46:18
http://devzone.zend.com/article/3546-Zend-Framework-Subversion-Reorganization
http://framework.zend.com/wiki/display/ZFDEV/PHP Coding Standard (draft)
基本上和我写的风格差不多,就是有一个不一样,就是大括号的换行,我喜欢在关键字后面跟大括号
我还是比较喜欢tp,不过大伙们都用zf,估计以后干活的时候也要用,未雨绸缪。
以前一直没留意设计模式,上次面试的时候提到了,前几天看了 lightsaber 同志的blog收获很多,又在PC上找了一本书,这本书讲的更详细和深入,06翻译的,看来我落后不是一点半点
update20080907:关于svn一些文件名字的意思:http://xingshaomin.javaeye.com/blog/121765
Submitted by 月黑风高 on 2008年07月21日 14:33:28
我使用了include_once,于是这个函数只能被引用一次,文件不会被包含第二次,所以$author值是空,以前也遇到过,不过找这个错误真的很麻烦
Submitted by 月黑风高 on 2008年06月02日 14:17:43
一直订阅鬼仔的blog,今天发现PW又出漏洞
http://huaidan.org/archives/2036.html
漏洞原因是Mysql会舍弃没有用处的ASCII129-255,搜了资料也没有找到为什么,PW最大失误不是程序,而是没有把username设为唯一。
可以构造一个和某个管理人员名字一样的ID再加上一个无效的ASCII码进行注册,表中会出现二个一样的用户名,而forums.forumadmin字段里存的用户名,这样就可获得全部的前台权限。
使用PHP构造的测试代码。
Submitted by 月黑风高 on 2008年05月21日 16:44:33
1.4版:http://bbs.thinkphp.cn/viewthread.php?tid=762
1.4版的API:http://bbs.thinkphp.cn/viewthread.php?tid=765
tp核心的几个类
core.base:抽象类,设置了二个方法,可以防止出错
core.app:运行类,初始化和加载调度类,开启的各种插件
core.dispathcher:调度类,主要是url判断,调度执行还在app中
core.action:控制的父类,模板操作
core.model:模型的父类,封闭了curd操作
tp的插件机制和wp差不多,插件的信息存储在session中,我还是不怎么喜欢单一入口,想把调度写在控制里