如果数据库名称是$ _GET,是否容易受到sql注入?

时间:2014-02-03 19:57:09

标签: php mysql sql mysqli sql-injection

我正在自己学习php,并且想知道如果我将数据库名称设为$ _GET,即使正常命令通过PDO函数,我是否容易受到sql注入?

离。

   $hostname_Database = "blocked";
        $database_Database =  $_GET['henryfor'];
        $username_Database = "blocked";
        $password_Database = "blocked";

        $dbh = new PDO("mysql:host=$hotname_Database;dbname=$database_Database", $username_Database, $password_Database);
...

1 个答案:

答案 0 :(得分:-1)

如果允许数据库名称来自$ _GET,则允许最终用户选择数据库名称。通常这是一个非常糟糕的主意,但对于可能可接受的专用应用程序(例如phpMyAdmin)。

此外,因为您将名称添加到包含其他连接信息的字符串中,所以没有什么能阻止用户放置“;”在名称中,然后为连接字符串中的其他参数提供值。

因此,这与SQL注入攻击不完全相同,但属于同一类别。

就像Waleen Khan所说,您可能希望过滤数据库名称,以便只允许使用可接受值的白名单。如果这不是一个选项,你想要读一下连接字符串是否支持某种转义,并且要么转义特殊字符,要将它们过滤掉。