我需要创建一个连接数据库的类。我知道硬编码数据库信息很糟糕,例如:
$user = "xxx";
$password = "yyy";
$server = "zzz";
$dbname = "name";
mysql_connect($user,$password,$server);
mysql_select_db($dbname);
这就是为什么我使用"包括"如:
include "config.php"
包含所有需要的变量,然后我可以使用mysql_connect。但据我所知,这也是一种不好的做法。我怎样才能使用mysqli类(扩展它?)最简单的方法,当然最安全的方法?
感谢任何提示
答案 0 :(得分:2)
最后,您必须将连接配置参数放在代码中。如果它在一个常数,一个等等中都无关紧要......
我不认为硬编码这些价值会带来安全风险。您的PHP脚本在服务器中。因此,它们受文件系统权限和系统权限的保护。 如果某人可以访问您的文件,则安全问题出在服务器而不是PHP脚本中。
使用PDO,它具有处理数据库访问的类。
PHP数据对象(PDO)扩展定义了一个轻量级,一致的 用于访问PHP中的数据库的接口。
通过创建PDO基础的实例来建立连接 类。
示例#1连接到MySQL
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); ?>
答案 1 :(得分:1)
我现在无法回答你的问题, 但作为提示,请观看此视频。
这是一个可以帮助你的PHP安全系列:
https://www.youtube.com/watch?v=Nx-g-0ynP_I
如果无效,请在youtube上搜索PHP安全性第1部分!
希望它有所帮助!
答案 2 :(得分:1)
对于硬编码数据库常量没有什么特别不安全的(正如其他人所说,它们必须在某个地方......)尽管你注意到将这些值放在一个单独的文件中是个好主意。我建议更进一步,不要在源代码管理中跟踪此文件,而是创建一个模板,例如config.base.php
,您将其复制到config.php
并为每台服务器配置。还有其他选项(我工作的地方,我们跟踪这些文件,但命名为$(hostname).php
,这允许一些聪明的导入链,但不是必需的)但这是一个简单,安全的,具有以下优势:将这些值保留在版本控制之外。这允许代码可以在不提供这些密码的情况下进行分发。
您需要关注的更大的安全问题是锁定面向前方的MySQL用户,使其只拥有您的webapp所需的权限。例如,通常情况下,您的网站是CREATE
或ALTER
表格是一个坏主意,所以通常不要将这些权限授予您的网站使用的用户,并且拥有您可以直接使用架构更改脱机的不同,更高权限的用户。
对于您的问题,我在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>.');
}
答案 3 :(得分:0)
我猜所有提出的答案都是正确的,但是出于我的目的和情况,我创建了一个文件,其中包括mysqli对象创建和与DB的连接以及一些用于转义数据的函数。我只是将文件包含在需要数据库连接的所有其他.php中,并且它非常易于使用和执行查询。如果有人需要更多信息或示例,请告诉我。
感谢所有