该问题出现在/job/job.php中,对于全局变量$mobilesql审查没有进行过滤和转义,导致该全局变量可以被覆盖,导致SQL注入的发生,下面来看看漏形成的原因。
首先全局变量被定义在methtml.inc.php中,在job.php的require方法中可以看到。
```
require_once '../public/php/methtml.inc.php';
```
在methtml.inc.php中可以看到对全局变量的定义,第723行的methtml_getarray方法中
```
global $index_news_no,$index_product_no,$index_download_no,$index_img_no,$index_job_no,$mobilesql;
```
在job.php中,第16行,对传入的mobilesql参数构造了where语句
```
$serch_sql=" where lang='$lang' {$mobilesql} and displaytype='1' and ((TO_DAYS(NOW())-TO_DAYS(`addtime`)< useful_life) OR useful_life=0) ";
```
第23行,构造了sql查询语句
```
if($page_input){$page=$page_input;}
$list_num=$met_job_list;
$rowset = new Pager($total_count,$list_num,$page);
$from_record = $rowset->_offset();
$page = $page?$page:1;
$query = "SELECT * FROM $met_job $serch_sql and top_ok='1' and displaytype='1' $order_sql LIMIT $from_record, $list_num";
$result = $db->query($query);
while($list= $db->fetch_array($result)){
$job_listnow[]=$list;
}
```
没有对全局变量mobilesql进行转义和过滤,直接放入query方法中进行SQL查询,导致了SQL注入的发生。
暂无评论