【发布时间】:2011-10-22 13:49:03
【问题描述】:
我已经制作了简单而精简的数据库层来帮助我正常操作。现在它正在运行,我决定从安全角度对其进行审查。第一个碰撞 (with help of Mordred) 是我的动态查询。通过针对固定的正则表达式验证表变量,可以轻松解决表的第一个问题变量:
$regex = '/^[a-zA-Z0-9_$]+$/';
现在,要清理/验证的下一个变量是列名,而 AFAICS 是我有两个选择。首先是检索该表中的所有列并建立白名单或再次使用正则表达式来验证列变量。我的问题是,以上哪一项是可行的?对表名使用正则表达式验证是否很好?下面是我正在谈论的示例 SQL 字符串
$stmt= $this->conn->prepare("SELECT * FROM $table WHERE $id_col[0]=:id");
$stmt->execute(array(":id"=>$id_val[0]));
$this->resultset = $stmt->fetch(PDO::FETCH_ASSOC);
希望收到朋友们的来信(如果问题在某处得到解答,我很抱歉。我找不到此类信息!)
【问题讨论】:
标签: php mysql pdo sql-injection security