请先阅读
在这个答案中:How to prevent SQL injection with dynamic tablenames?
Pekka指出了为什么这段代码:
$clas=$_POST['clas'];
$query="SELECT * FROM $clas ";
无法使用PDO或mysql-real_escape_string()
进行修复。
任何人都可以提供示例代码如何解决此问题,以便新手可以粘贴该代码 (根据他的需要调整/调整)并且不受SQL注入的影响。
请不要解释SQL注入,我知道关于注入和PDO的所有内容,我只需要示例代码
答案 0 :(得分:5)
您可以使用白名单来确保该值确实是您希望以这种方式访问的表格之一。
示例:
$allowed_tables = array('table1', 'table2');
$clas = $_POST['clas'];
if (in_array($clas, $allowed_tables)) {
$query = "SELECT * FROM `$clas`";
}
请注意,从GET或POST参数构建SQL查询直接通常是一个坏主意,但白名单可以使其安全。
答案 1 :(得分:-1)
您可以使用进行转义:P
$clas = str_replace('`','\\`',$_POST['clas']);
$query = "SELECT * FROM \`{$clas}\`";
所以,这是一个非常糟糕的主意。
做不同的事。