我正在自己学习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);
...
答案 0 :(得分:-1)
如果允许数据库名称来自$ _GET,则允许最终用户选择数据库名称。通常这是一个非常糟糕的主意,但对于可能可接受的专用应用程序(例如phpMyAdmin)。
此外,因为您将名称添加到包含其他连接信息的字符串中,所以没有什么能阻止用户放置“;”在名称中,然后为连接字符串中的其他参数提供值。
因此,这与SQL注入攻击不完全相同,但属于同一类别。
就像Waleen Khan所说,您可能希望过滤数据库名称,以便只允许使用可接受值的白名单。如果这不是一个选项,你想要读一下连接字符串是否支持某种转义,并且要么转义特殊字符,要将它们过滤掉。