Php 数据库设置安全性
我在我的网站上有一个名为dbSettings.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()函数将此页面放入主页。对于通过服务器(我的域)访问此页面的人,是否有任
<?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
命令允许,拒绝 全盘否定
- 对文件的正确文件权限,如
chmod文件640而不是600。将文件所有权保留给用户,并将组更改为webserver。这样,Web服务器只能读取而不能修改它
- 将文件移出webroot,以便其他人无法直接访问该文件
- 仅向该数据库用户授予所需的数据库权限
如果用户只需要访问一个数据库,则仅授予该数据库的权限,如果不需要数据,则不授予结构或管理相关的权限
- 如有可能,使用
.htaccess
命令允许,拒绝 全盘否定
至于安全地存储信息,我认为没有比按照Barmar的建议,将配置文件放在web服务器实际上不提供文件服务的地方更好的解决方案。PHP通常仍然可以访问这些文件,但web服务器不会将它们发送给客户端。根据您的主机,这可能是也可能是不可能的。根据我对PHP安全性的了解,有几种方法可以泄漏此信息:
至于安全地存储信息,我认为没有比按照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;
?>