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

Joh*_*ica 2 php sql-injection

请先完整阅读

在这个答案中:如何使用动态表名防止SQL注入?

Pekka指出为什么这段代码:

$clas=$_POST['clas'];
$query="SELECT * FROM $clas ";
Run Code Online (Sandbox Code Playgroud)

无法使用PDO或修复mysql-real_escape_string().

任何人都可以提供示例代码如何解决这个问题,以便新手可以粘贴该代码
(根据他的需要调整/调整它)并保护SQL注入安全.

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

Lot*_*tes 5

您可以使用白名单来确保该值确实是您希望以这种方式访问​​的表之一.

例:

$allowed_tables = array('table1', 'table2');
$clas = $_POST['clas'];
if (in_array($clas, $allowed_tables)) {
    $query = "SELECT * FROM `$clas`";
}
Run Code Online (Sandbox Code Playgroud)

请注意,直接从GET或POST参数构造SQL查询通常是一个坏主意,但白名单可以使其安全.

  • 我认为Pekka,OP链接的另一个线程中被接受的回答者,实际上暗示了这一点(或者更确切地说建议限制到诸如SHOW TABLE查询之类的列表).所以在这方面,这是更严格的,几乎Pekka批准(吨) (4认同)