用于修复此特定SQL注入漏洞的示例代码

时间:2011-05-18 21:15:16

标签: php sql-injection

请先阅读

在这个答案中:How to prevent SQL injection with dynamic tablenames?

Pekka指出了为什么这段代码:

$clas=$_POST['clas'];
$query="SELECT * FROM $clas ";

无法使用PDO或mysql-real_escape_string()进行修复。

任何人都可以提供示例代码如何解决此问题,以便新手可以粘贴该代码 (根据他的需要调整/调整)并且不受SQL注入的影响。

请不要解释SQL注入,我知道关于注入和PDO的所有内容,我只需要示例代码

2 个答案:

答案 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}\`";

所以,这是一个非常糟糕的主意。

做不同的事。