在GWA2的核心处理DB连接及查询处理时,会对用户的输入做安全性过滤,
如在 inc/dba.class.php中对用户输入进行封装,并将结果交给指定的inc/mysql.class.php去处理。
在inc/mysql.class.php中,会将用户的输入去除转义字符,在非数字的字符串上加上引号。其判断逻辑是:
if(!is_numeric($value)){
$value = “‘”.mysql_real_escape_string($value,$this->m_link).”‘”;
}
通常这样做是没有问题的,但如果想在数据表中存入数字型字符串,比如在一个应用中的目录代码是 01010003 , 在使用 is_numeric时,返回的就会是true:
is_numeric(’1010003′); # true
is_numeric(’010100003′); # true
遇到这种情况,就不能使用GWA2的安全套件,如$obj->setBy, $obj->getBy等,但可以使用$obj->execBy, 这个方法允许用户自行组装SQL语句,从而避开原有的检查程序的缺陷。
----
url4p: -r/gwa2-update