来源:自学PHP网 时间:2015-04-15 15:00 作者: 阅读:次
[导读] 注入。。bbs中发文章的时候 直接把$_POST数据带入 拼接sql功能函数中导致注入 bbs add-archive php 30行if($id = $archive-inserData($_POST)){直接带入整个$_POST bbs model db base php 38行public fu...
注入。。 bbs中发文章的时候 直接把$_POST数据带入 拼接sql功能函数中导致注入
if($id = $archive->inserData($_POST)){
public function inserData($data){ $r = $this->odb->insert($this->tblName,$data); //在跟入 if($r) return $this->odb->getInsertId(); else return false; }
public function insert($table, $data) { $sql = $this->getInsertString($table, $data);//拼接sql 继续看。。 return $this->execSql($sql); }
public function getInsertString($table, $data) { $n_str = ''; $v_str = ''; $table = $this->filterString($table); foreach ($data as $k => $v)//遍历数据 因为穿过来的是整个$_POST所以 我们可以任意控制 列明和值 { $n_str .= $this->filterString($k).','; $v_str .= "'".$this->filterString($v)."',"; } $n_str = preg_replace( "/,$/", "", $n_str ); $v_str = preg_replace( "/,$/", "", $v_str ); $str = 'INSERT INTO '.$table.' ('.$n_str.') VALUES('.$v_str.')'; return $str; }
public function filterString($str) { if ($this->magic_quotes) { $str = stripslashes($str); } if ( is_numeric($str) ) { return $str; } else { $ret = @mysqli_real_escape_string($this->con, $str); if ( strlen($str) && !isset($ret) ) { $r = $this->checkConnection(); if ($r !== true) { $this->closeDB(); $ret = $str; } } return $ret; } }
修复方案:不要把$_POST提交过去。。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com