mysql 如何避免使用硬编码的SQL凭据[重复]

pkwftd7m  于 4个月前  发布在  Mysql
关注(0)|答案(1)|浏览(46)

此问题在此处已有答案

Where to safely store database credentials within a PHP website [closed](1个答案)
26天前关闭。
我有一个SQL数据库,我目前在PHP文件中使用硬编码的凭据。我如何确保人们看不到这些凭据?
我看到有人说使用配置文件,但我不知道如何做到这一点
凭证当前被硬编码到需要DB访问的每个PHP文件中。

stszievb

stszievb1#

最简单的解决方案是在单独的PHP文件中编写一次数据库连接代码:
db.php

<?php

define("DBHOST", "localhost");
define("DBUSER", "myuser");
define("DBPASSWORD", "mypassword");
define("DBSCHEMA", "myschema");

$db = new PDO("mysql:host={DBHOST};dbname={DBSCHEMA}", DBUSER, DBPASSWORD);

字符串
然后在需要数据库的给定PHP脚本中,使用require(),以便加载此文件:

<?php

require('db.php');

$db->query(...any query you want...);


我展示了在db.php中定义的带有PHP常量的数据库凭证,您也可以将凭证存储在配置文件中,读取该配置文件以获取这些值。
db.ini

DBHOST = localhost
DBUSER = myuser
DBPASSWORD = mypassword
DBSCHEMA = myschema


db.php

<?php

$dbcfg = parse_ini_file('db.ini');

$db = new PDO("mysql:host={$dbcfg['DBHOST']};dbname={$dbcfg['DBSCHEMA']}", $dbcfg['DBUSER'], $dbcfg['DBPASSWORD']);


没有人能够读取你的PHP代码文件或配置文件。http服务器应该通过 * 运行 * PHP文件来防止这种情况,而不是提供它们以供查看。Http请求可以查看PHP脚本的输出结果,但不能查看PHP代码本身。
但是http服务器可能会被错误配置,并意外地提供PHP文件。为了减少这种风险,将大部分PHP代码放在http文档根目录之外,这样即使http请求可以查看PHP源文件,它们也无法查看http服务器不提供的文件。一些PHP文件必须通过http访问,但您可以通过include_path引用其他PHP文件中的大部分代码。
同样,db.ini文件应该在http文档根目录之外,并由include_path引用。

相关问题