【发布时间】:2017-02-23 23:33:46
【问题描述】:
我有一个将被许多数据库使用的应用程序。要选择带有应用程序数据的数据库,我有一个带有连接参数(主机、用户名、密码、数据库...)的数据库
问题是这个动态创建的数据源不适用于应用程序的其余部分。
控制器代码
$data = $this->request->data;
$connection = ConnectionManager::get("default");
$query = "SELECT * FROM clients WHERE client_id = ".$data['codigo'];
$result = $connection->execute($query)->fetchAll('assoc');
ConnectionManager::drop('default');
$config = ConnectionManager::config('connection', [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => $result[0]['host'],
'username' => $result[0]['username'],
'password' => $result[0]['password'],
'database' => $result[0]['database'],
'encoding' => 'utf8',
'timezone' => 'UTC',
'flags' => [],
'cacheMetadata' => true,
'log' => false,
'quoteIdentifiers' => false,
'url' => env('DATABASE_URL', null),
]);
$connection = ConnectionManager::get('connection');
ConnectionManager::alias('connection', 'default');
return $this->redirect(['controller' => 'Mains', 'action' => 'index']);
在这个重定向之后,显然其他控制器没有这个数据源。
【问题讨论】:
-
哎呀,这就是一个 SQL 注入漏洞!永远不要将用户数据直接插入查询!
标签: php cakephp controller connection cakephp-3.0