我正在自学php,我想知道如果我把数据库名称设为$_GET,即使正常的命令是通过PDO函数来执行,是否会容易被sql注入?
例:我是自学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);
...
如果你允许数据库名来自$_GET,你就允许最终用户选择数据库名。通常这是一个非常糟糕的主意,但是对于特殊的应用程序(例如phpMyAdmin),这可能是可以接受的。
另外,因为你将数据库名和其他连接信息一起添加到一个字符串中,所以没有什么可以阻止用户在数据库名中添加";",然后在连接字符串中提供其他参数的值。
所以这和SQL注入攻击并不完全一样,但属于同一个大类。
就像Waleen Khan说的那样,你可能想要过滤数据库名称,以便只允许可接受的值的白名单。如果这不是一个选项,你要读懂连接字符串是否支持某种转义,要么转义特殊字符,把它们过滤掉。