【发布时间】:2018-09-29 05:24:56
【问题描述】:
请原谅初学者的问题。欢迎提出建议、链接和进一步阅读。
我担心网页的安全性并寻找最佳实践。 当使用 PHP 连接到 MariaDB/MySQL 数据库时,大多数建议将数据库密码放在 PHP 页面(或包含的页面)上。这安全吗?有更好的“最佳实践”吗?
我搜索了文档、Stack Overflow 和带有“哈希密码 MySQL MariaDB PHP7”等关键字的互联网,但答案都是关于客户端登录到网页,而不是 PHP 直接与 MariaDB 交互。 MySQL Docs 表示密码经过哈希处理以进行存储,但这对我的 PHP 文件没有帮助。 PHP docs 没有提供太多有用的信息,也没有实际示例。
所以,我的问题:
-
HTTP 用户下载我的源文件并查看这些密码的风险有多高? (我意识到 PHP 会解析页面,因此一般用户不会看到原始代码或无法下载 PHP——而 ssh、PHP、MariaDB 等的安全性是一个单独的问题。)
李> 我知道我可以散列密码,但是如果密码就在同一页面上,这有什么用? (或者我错过了什么?)
将数据库变量放在文件中更好/更安全,还是使用
include("super-sensitive-info.php")并把变量 那里?我可以(应该)散列或加密那个文件还是 密码,并且仍然可以使用?我可以(我应该)隐藏这个文件吗?.super-sensitive-info.php),然后使用服务器安全来限制访问?而且,使用特殊字符给我带来了麻烦,例如
$password = "pa$$w@rd";应该看起来像$password = "pa\$\$w\@rd";,按照典型的代码在引号中的做法?还是我错过了我不应该在 SQL 中使用特殊字符的备忘录?
创建一个简单的例子,假设我有两个文件,看起来像这样。有没有更好的办法?还是这个?
super-sensitive-info.php
$user = "username"
$password = "password"
// $password = "pa\$\$w\@rd"; // (e.g. if database pw is "pa$$w@rd"?
$database_name = "database_name"
// I can hash it, but this seems only useful for client logins and such,
// unless I can hash this entire file....
// $hashed_password = password_hash($password, PASSWORD_DEFAULT);
index.php
include("super-sensitive-info.php")
$db = mysqli_connect('localhost',$user,$password,$database_name)
or die('Error connecting to MySQL server: ' . mysqli_connect_error());
$query = "SELECT * FROM episodes";
【问题讨论】:
-
您可以将配置文件移到 Web 可访问目录之外。如果您的密码中有
$s,请确保您使用单引号进行封装。
标签: php mysql mariadb websecurity