如果数据库名是$_GET,是否容易被sql注入?[已关闭]

问题描述 投票:-2回答:1

我正在自学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);
...
php mysql sql sql-injection
1个回答
-1
投票

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

另外,因为你将数据库名和其他连接信息一起添加到一个字符串中,所以没有什么可以阻止用户在数据库名中添加";",然后在连接字符串中提供其他参数的值。

所以这和SQL注入攻击并不完全一样,但属于同一个大类。

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

© www.soinside.com 2019 - 2024. All rights reserved.