GWA2更新:SQL语句写入数字型字符串

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语句,从而避开原有的检查程序的缺陷。

 

此条目发表在-GWA2, 编程技术, 计算机技术分类目录。将固定链接加入收藏夹。

GWA2更新:SQL语句写入数字型字符串》有2条回应

  1. Wadelau说:

    在 -gMIS 中找到一种实现方法, -R/z2TO

  2. wadelau说:

    想来想去,还是这个法子好。
    不然,无论是采取多增加配置文件,或者读取表属性的方法来判断某个字段是否有 number as string的需求,都有点一个人(字段)有病,所有人(字段)吃药的感觉。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code