首页 > 代码库 > ThinkPHP 3.1.3及之前的版本使用不当可造成SQLi
ThinkPHP 3.1.3及之前的版本使用不当可造成SQLi
Lib/Core/Model.class.php中解析SQL语句的函数parseSql没有对SQL语句进行过滤,使用不当可导致SQL注入。(哈哈,其实用再安全的框架使用不当都可能造成SQLi)
函数:
/** * 解析SQL语句 * @access public * @param string $sql SQL指令 * @param boolean $parse 是否需要解析SQL * @return string */ protected function parseSql($sql,$parse) { // 分析表达式 if(true === $parse) { $options = $this->_parseOptions(); $sql = $this->db->parseSql($sql,$options); }elseif(is_array($parse)){ // SQL预处理 $sql = vsprintf($sql,$parse); }else{ $sql = strtr($sql,array(‘__TABLE__‘=>$this->getTableName(),‘__PREFIX__‘=>C(‘DB_PREFIX‘))); } $this->db->setModel($this->name); return $sql; }
如果使用以下方式编写查询数据库代码,则会造成SQL注入。
$model=M(‘test‘); $m=$model->query(‘select * from test where id="%s"‘,$_GET[‘id‘]); dump($m); die;
可提交以下请求造成SQLi
http://localhost/Main?id=foo" or 1="1
ThinkPHP 3.1.3及之前的版本使用不当可造成SQLi
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。