安全

Scanmus @ Paranoid Conference

因为一些原因没有去Paranoid Conference,Lucy回来告诉我,Rasmus在会议上就是拿中国的几个project做例子,其中居然就有我的大作,呜呜呜……看来这就是我轻视Scanmus(一个Rasmus闲来无事写得扫描XSS的工具)的恶果。

Security最基本的一些sense:

  • escape!
  • 尽量validate输入
    • 类型:数字,email,url
    • 范围:枚举,数字的范围,字符长度
  • 内部应用间的api限制外网访问

不值得信赖的addslash()和mysql_real_escape_string()

|

长久以来,我一直依赖mysql_real_escape_string()防范SQL injection。看起来它并不像我想象的那么值得信赖。

问题来自多字节编码。例如在GBK里,0xbf27并不是一个合法的双字节字符,因此addslash()会把它转义成0xbf5c27,碰巧0xbf5c是一个合法的双字节字符,由此可以注入一个0x27 (')。

addslash()无药可救。mysql_real_escape_string()可以根据字符集正确地转义,但是需要在建立数据库联接的时候指明“SET CHARACTER SET 'GBK'”。

Syndicate content