不值得信赖的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'”。
陈松的Blog | 2004 次阅读
mysql_real_escape_string()是
由 路人乙 (没有被验证) 在 周一, 2006-09-18 04:15 提交
mysql_real_escape_string()是可靠的
但如果没有服务器控制权,而magic_quotes_gpc开了的话
还要先stripslashes再mysql_real_escape_string???

无药可救 ??
无药可救 ??