Php 数据库设置安全性

Php 数据库设置安全性,php,mysql,security,variables,Php,Mysql,Security,Variables,我在我的网站上有一个名为dbSettings.php的文件,其中包含以下行: <?php $host = "localhost"; $dbName = "database"; $user = "user"; $pwd = "pass"; $db = new mysqli($host, $user, $pwd, $dbName); ?> 我使用require_once()函数将此页面放入主页。对于通过服务器(我的域)访问此页面的人,是否有任

我在我的网站上有一个名为dbSettings.php的文件,其中包含以下行:

<?php
    $host = "localhost";
    $dbName = "database";
    $user = "user";
    $pwd = "pass";
    $db = new mysqli($host, $user, $pwd, $dbName);
?>


我使用require_once()函数将此页面放入主页。对于通过服务器(我的域)访问此页面的人,是否有任何方法可以获取存储在这些变量中的值?这是保存数据库设置的安全方法吗?

如果您的web服务器配置正确,web客户端将无法查看设置。当通过Web服务器访问
.php
文件时,它会执行脚本,并将打印的内容返回给客户端。脚本的源代码不会发送到客户端


通过将这样的文件放在webroot之外,可以使事情更加安全。然后客户端甚至无法对其进行寻址,只能通过从另一个脚本访问它们。

如果您的web服务器配置正确,web客户端应该无法查看设置。当通过Web服务器访问
.php
文件时,它会执行脚本,并将打印的内容返回给客户端。脚本的源代码不会发送到客户端


通过将这样的文件放在webroot之外,可以使事情更加安全。然后客户端甚至无法处理它们,它们只能通过从另一个脚本
require
d来访问。

这是php应用程序中保存数据库凭据的常用方法。通常,配置文件会保留这些设置。一些好的做法是

  • 对文件的正确文件权限,如
    chmod文件640而不是600。将文件所有权保留给用户,并将组更改为webserver。这样,Web服务器只能读取而不能修改它
  • 将文件移出webroot,以便其他人无法直接访问该文件
  • 仅向该数据库用户授予所需的数据库权限
    如果用户只需要访问一个数据库,则仅授予该数据库的权限,如果不需要数据,则不授予结构或管理相关的权限
  • 如有可能,使用
    .htaccess
    命令允许,拒绝 全盘否定

这是在php应用程序中保存数据库凭据的常用方法。通常,配置文件会保留这些设置。一些好的做法是

  • 对文件的正确文件权限,如
    chmod文件640而不是600。将文件所有权保留给用户,并将组更改为webserver。这样,Web服务器只能读取而不能修改它
  • 将文件移出webroot,以便其他人无法直接访问该文件
  • 仅向该数据库用户授予所需的数据库权限
    如果用户只需要访问一个数据库,则仅授予该数据库的权限,如果不需要数据,则不授予结构或管理相关的权限
  • 如有可能,使用
    .htaccess
    命令允许,拒绝 全盘否定

根据我对PHP安全性的了解,有几种方法可以泄漏此信息:

  • 如果dbSettings.php可以由客户端以某种方式加载,而不需要服务器处理页面。这显然会给出详细信息,因为他们只需查看文件即可。一般来说,如果服务器配置正确,并且没有创建备份文件,那么这应该不是问题
  • 如果客户机加载了dbSettings.php,则需要确保没有错误会泄漏信息(例如,mysqli创建不能失败并泄漏信息)。由于您的应用程序尚未初始化,因此可能会出现您经常屏蔽的错误

  • 至于安全地存储信息,我认为没有比按照Barmar的建议,将配置文件放在web服务器实际上不提供文件服务的地方更好的解决方案。PHP通常仍然可以访问这些文件,但web服务器不会将它们发送给客户端。根据您的主机,这可能是也可能是不可能的。

    根据我对PHP安全性的了解,有几种方法可以泄漏此信息:

  • 如果dbSettings.php可以由客户端以某种方式加载,而不需要服务器处理页面。这显然会给出详细信息,因为他们只需查看文件即可。一般来说,如果服务器配置正确,并且没有创建备份文件,那么这应该不是问题
  • 如果客户机加载了dbSettings.php,则需要确保没有错误会泄漏信息(例如,mysqli创建不能失败并泄漏信息)。由于您的应用程序尚未初始化,因此可能会出现您经常屏蔽的错误

  • 至于安全地存储信息,我认为没有比按照Barmar的建议,将配置文件放在web服务器实际上不提供文件服务的地方更好的解决方案。PHP通常仍然可以访问这些文件,但web服务器不会将它们发送给客户端。这取决于您的主机,可能是也可能不是。请确保您的dbSettings.php不能通过URL访问,因此php必须能够读取此文件,但不能通过在浏览器中键入其地址(猜测、运气等)来访问此文件。但若你们已经正确地配置了www服务器,那个么你们就可以了,因为php将被处理,空白页面将返回给用户

    只有当您错误配置web服务器,使其不会处理php页面,而是将其返回给用户时,其他人才能下载该文件。因此,您的设置不能从外部访问


    除此之外,您不应该在生产服务器上使用php代码中的echo、dump等值,您还应该捕获mysql驱动程序中的任何错误,这样它们就不会打印给生产服务器上的用户。

    确保您的dbSettings.php不能通过URL访问,因此php必须能够读取此文件,但
    <?php
      define ('my_const', 1);
      include ('config.php');
    
      echo $super_secret_data;
    ?>
    
    <?php
      if (!defined ('my_const'))
        die ();
    
      $super_secret_data = 42;
    ?>