0

我需要创建一个用于连接数据库的类。我知道硬编码数据库信息很糟糕,例如:

$user = "xxx";
$password = "yyy";
$server = "zzz";
$dbname = "name";

mysql_connect($user,$password,$server);
mysql_select_db($dbname);

这就是为什么我使用“包含”,例如:

include "config.php" 

其中包含所有需要的变量,然后我可以将 mysql_connect 与它们一起使用。但据我所知,这也是一种不好的做法。我怎样才能使用 mysqli 类(扩展它?)最简单的方法,当然也是最安全的?

感谢任何提示

4

4 回答 4

2

At the end you have to put your connections configuration parameters inside your code. Doesn't matter if it is in a constant, a class, etc....

I don't think hardcoding those values a security risk. Your php scripts ar in the server. So they are protected by the file system permissions and the system permissions as well. If somebody can access your files the security is issue is in the server and not in the php script.

Use PDO, it has classes to handle db access.

From the PDO php manual:

The PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP.

Connections are established by creating instances of the PDO base class.

Example #1 Connecting to MySQL

 <?php
 $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
 ?>
于 2012-10-26T14:02:08.280 回答
1

I can't really answer your question right now, but as a tip, watch this video.

It's a PHP Security series that may help you there:

https://www.youtube.com/watch?v=Nx-g-0ynP_I

If it doesn't work search for PHP Security part 1 on youtube!

Hope it helps!

于 2012-10-26T14:02:16.660 回答
1

硬编码数据库常量没有什么非常不安全的(正如其他人所说,它们必须在某个地方......)尽管就像你注意到的那样,将这些值放在单独的文件中是个好主意。我建议更进一步,不要在源代码管理中跟踪此文件,而是创建一个模板,例如config.base.php复制到config.php每个服务器并配置该模板。还有其他选项(在我工作的地方,我们跟踪这些文件,但命名它们$(hostname).php允许一些巧妙的导入链接,但不是必需的)但这是一个简单、安全的选项,其优点是可以将这些值排除在外你的版本控制。这允许在不提供这些密码的情况下分发代码。

您需要关注的更大的安全问题是锁定您的前置 MySQL 用户,使其仅拥有您的 webapp 所需的权限。例如,一般来说,让您的网站CREATEing 或ALTERing 表是一个坏主意,因此最好不要将这些权限授予您的网站使用的用户,并拥有一个您直接使用的不同的、更高权限的用户使架构更改脱机。

对于您的问题,我在common.php课堂上执行以下操作来创建我的 MySQLi 连接:

require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php');
$db = @new mysqli(MYSQL_HOST,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
if(mysqli_connect_errno())
{
    if(DEBUG_MODE)
        $template->error('Failed To Connect To Database: '.mysqli_connect_errno().': '.mysqli_connect_error());
    else
        $template->error('Failed To Connect To Database.  Try reloading the page.  If this error persists, <a href="/contact.php">let me know</a>.');
}
于 2012-10-26T14:59:32.370 回答
0

我猜所有建议的答案都可能是正确的,但出于我的目的和情况,我创建了一个文件,其中包括 mysqli 对象创建和与数据库的连接以及一些用于转义数据的功能。我只是将文件包含在需要数据库连接的所有其他 .php 文件中,而且它非常易于使用和执行查询。如果有人需要更多信息或示例,请告诉我。

谢谢大家

于 2012-10-26T20:01:45.620 回答