如何在php中保护数据库配置

时间:2017-05-09 06:42:40

标签: php mysql

我有一个php api端点如下。

我需要进行类似的修改:

  1. 需要在单独的文件中包含所有配置

  2. 使用服务器令牌验证API请求,以确保只接受真正的请求

  3. 在单独的文件中捕获所有错误日志,而不是在浏览器中显示

  4. 这是我的代码:

    <?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    $data = json_decode(file_get_contents('php://input'), true);
    
    if(!empty($data)):
    header('Content-Type:text/plain');
    
    
     /*MYSQL CREDENTIALS*/
    $hostname = 'localhost';                 
    $username = 'root';
    $password = '';
    $dbname = 'mydb';
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
    
    $arraykey=array_keys($data); 
    $array=$data[$arraykey[0]]; 
    
    try 
    {
    
        foreach($data as $array)
        {
    
        //MYSQL execute
        $count = $dbh->exec("INSERT INTO gmr(version,visitorId,dwellTime,poiId,srId,zoneId,poiProximityConfidence,zoneProximityConfidence,poiPresenceConfidence,zonePresenceConfidence,normalizedTime) VALUES ('" . implode("', '", $array) . "')" ) or die(print_r($dbh->errorInfo(), true)); 
    
        echo count($data);
        echo 'Data Successfully inserted!!<br />';
    }
    //echo $data;
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
    
    endif;
    ?>
    

    对于第1点)我已将所有配置放在一个单独的文件中,如:

    <?php
    define (DB_USER, "root");
    define (DB_PASSWORD, "");
    define (DB_DATABASE, "mydb");
    define (DB_HOST, "localhost");
    ?>
    

    需要明确将此配置文件包含在我的主文件中的更好方法。

    由于我将API端点共享给客户端,因此主文件应该能够读取我的db配置文件。

    因此建议使用:

    require ("configuration.php");
    

    OR

    $config = parse_ini_file('../config.ini'); 
    

    其他2分需要建议

1 个答案:

答案 0 :(得分:0)

以下是另外两点的建议:

  1. 使用服务器令牌验证API请求以确保仅接受 真实的要求
  2. 为此,您可以使用CSRF Token来检查有效请求。你可以找到here重要的用途。

    1. 列表项在单独的文件中捕获所有错误日志,而不是在浏览器中显示
    2. 默认情况下,PHP记录服务器端的所有内容。在Ubuntu中,您可以找到/var/log/apache/error.log

      您需要检查您的apache配置是否已针对错误日志进行了正确设置

      请点击此处了解详情:Where does PHP store the error log? (php5, apache, fastcgi, cpanel)

      如果您不想在浏览器中显示错误,则可以设置error_reporting(0);

      希望这是你需要的!