2016-07-18 6 views
1

最新バージョンのJoomla、v3.6を使用していますが、SSLをMySQLデータベースに接続するサポートがないことに驚いています。JoomlaがSSL対応データベースに接続できません

どのような必要なのはコアJoomlaのDBドライバファイルのハックであることが表示されます:もっとがっかりするものは何 /libraries/joomla/database/driver/mysqli.php

)は、このファイルは(mysqli_connectを使用するように見えるということです私が見ることができるものは、SSL接続のための組み込みサポートがないため、いくつかの属性を追加するだけでは簡単ではありません。

ハッキングを開始する前に、誰かがJoomlaでセキュアなDBに接続できましたか?私が気付いていない別のドライバがありますか?

私は完全なJoomlaのDBは、参考のためにここに機能を接続含めました:

public function connect() 
{ 
    if ($this->connection) 
    { 
     return; 
    } 

    /* 
    * Unlike mysql_connect(), mysqli_connect() takes the port and socket as separate arguments. Therefore, we 
    * have to extract them from the host string. 
    */ 
    $port = isset($this->options['port']) ? $this->options['port'] : 3306; 
    $regex = '/^(?P<host>((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(:(?P<port>.+))?$/'; 

    if (preg_match($regex, $this->options['host'], $matches)) 
    { 
     // It's an IPv4 address with or without port 
     $this->options['host'] = $matches['host']; 

     if (!empty($matches['port'])) 
     { 
      $port = $matches['port']; 
     } 
    } 
    elseif (preg_match('/^(?P<host>\[.*\])(:(?P<port>.+))?$/', $this->options['host'], $matches)) 
    { 
     // We assume square-bracketed IPv6 address with or without port, e.g. [fe80:102::2%eth1]:3306 
     $this->options['host'] = $matches['host']; 

     if (!empty($matches['port'])) 
     { 
      $port = $matches['port']; 
     } 
    } 
    elseif (preg_match('/^(?P<host>(\w+:\/{2,3})?[a-z0-9\.\-]+)(:(?P<port>[^:]+))?$/i', $this->options['host'], $matches)) 
    { 
     // Named host (e.g example.com or localhost) with or without port 
     $this->options['host'] = $matches['host']; 

     if (!empty($matches['port'])) 
     { 
      $port = $matches['port']; 
     } 
    } 
    elseif (preg_match('/^:(?P<port>[^:]+)$/', $this->options['host'], $matches)) 
    { 
     // Empty host, just port, e.g. ':3306' 
     $this->options['host'] = 'localhost'; 
     $port = $matches['port']; 
    } 
    // ... else we assume normal (naked) IPv6 address, so host and port stay as they are or default 

    // Get the port number or socket name 
    if (is_numeric($port)) 
    { 
     $this->options['port'] = (int) $port; 
    } 
    else 
    { 
     $this->options['socket'] = $port; 
    } 

    // Make sure the MySQLi extension for PHP is installed and enabled. 
    if (!self::isSupported()) 
    { 
     throw new JDatabaseExceptionUnsupported('The MySQL adapter mysqli is not available'); 
    } 

    $this->connection = @mysqli_connect(
     $this->options['host'], $this->options['user'], $this->options['password'], null, $this->options['port'], $this->options['socket'] 
    ); 

    // Attempt to connect to the server. 
    if (!$this->connection) 
    { 
     throw new JDatabaseExceptionConnecting('Could not connect to MySQL.'); 
    } 

    // Set sql_mode to non_strict mode 
    mysqli_query($this->connection, "SET @@SESSION.sql_mode = '';"); 

    // If auto-select is enabled select the given database. 
    if ($this->options['select'] && !empty($this->options['database'])) 
    { 
     $this->select($this->options['database']); 
    } 

    // Pre-populate the UTF-8 Multibyte compatibility flag based on server version 
    $this->utf8mb4 = $this->serverClaimsUtf8mb4Support(); 

    // Set the character set (needed for MySQL 4.1.2+). 
    $this->utf = $this->setUtf(); 

    // Turn MySQL profiling ON in debug mode: 
    if ($this->debug && $this->hasProfiling()) 
    { 
     mysqli_query($this->connection, "SET profiling_history_size = 100;"); 
     mysqli_query($this->connection, "SET profiling = 1;"); 
    } 
} 

答えて

関連する問題