php
不值得信赖的addslash()和mysql_real_escape_string()
php | 安全长久以来,我一直依赖mysql_real_escape_string()防范SQL injection。看起来它并不像我想象的那么值得信赖。
问题来自多字节编码。例如在GBK里,0xbf27并不是一个合法的双字节字符,因此addslash()会把它转义成0xbf5c27,碰巧0xbf5c是一个合法的双字节字符,由此可以注入一个0x27 (')。
addslash()无药可救。mysql_real_escape_string()可以根据字符集正确地转义,但是需要在建立数据库联接的时候指明“SET CHARACTER SET 'GBK'”。
APC bug
apc | pecl | php最近在做一个—呃,几个million的daily pv—的project。用APC做cache后发现有问题,不时地coredump。研究了一下才发现居然这些机器上装的还是2.x的APC,赶快升级到了3.0.8——问题消失。估计就是上次我跟Rasmus说的,用APC存取size大一点点的数组会有coredump的bug。想到这里,才发现最近和Rasmus失去联络了。
memcache 2.0.0
memcached | pecl | phpAntony终于推出了memcache 2.0.0。
支持多服务器load balance和failover。
感谢上帝,我终于不用去backtrace mcache的coredump了。这个世界太美好了。
(我是memcached的粉丝)
最近关注的php扩展
pecl | phpPDO
现在我见到的许多大一些的php应用都会使用数据库抽象层。PDO毕竟是扩展,比php写的DBAL效率会好很多。
DBAL是我大学时候的最爱。后来总觉得这种缥缈的完美主义实在影响性能,而且在99.99%的情况不能带来一点好处;更换DBMS千年难见一次,而DBAL确会在每次request上都带来overhead,所以我再也没有用过了。即便PDO的效率会搞很多,我怀疑自己真的会不会使用PDO。
PHP 6.0
apc | php自rasums在PHP Internals发表的超长大水贴PHP 6.0 Wishlist已经有4个多月了,6.0的轮廓已经逐渐开始清晰。
即便有n多(维护数百万行php代码的)人的强烈反对,看样子php team还是下定决心要在6.0清理很多东西,包括register_globals,magic_quotes,和safe mode。对于我这种一直觉得像register_globals根本就不应该在这个星球上出现过的人,倒是一件很高兴的事。似乎magic_quotes带来的麻烦远比好处多。
我一点看不出来rasmus像个学院派人士,可是“移除大量的函数alias”倒是有点过于完美主义——问题是如果一个程序员真的是完美主义,他就不会选择用php了。
