请原谅初学者的问题。欢迎提出建议、链接和进一步阅读。
我担心网页的安全性并寻找最佳实践。当使用 PHP 连接到 MariaDB/MySQL 数据库时,大多数建议将数据库密码放在 PHP 页面(或包含的页面)上。这安全吗?有更好的“最佳实践”吗?
我用“哈希密码 MySQL MariaDB PHP7”等关键字搜索了文档、Stack Overflow 和互联网,但答案都是关于客户端登录到网页,而不是 PHP 直接与 MariaDB 交互。MySQL Docs说密码是为了存储而散列的,但这对我的 PHP 文件没有帮助。PHP 文档没有提供太多有用的信息,也没有实际示例。
所以,我的问题:
HTTP 用户下载我的源文件并查看这些密码的风险有多高?(我意识到 PHP 会解析页面,因此一般用户不会看到原始代码或能够下载 PHP——而 ssh、PHP、MariaDB 等的安全性是一个单独的问题。)
我知道我可以散列密码,但是如果密码就在同一页面上,这有什么用?(或者我错过了什么?)
将数据库变量放在文件中,还是使用
include("super-sensitive-info.php")
并将变量放在那里更好/更安全?我可以(应该)散列或加密那个文件或密码,并且仍然可以使用吗?我可以(我应该)隐藏这个文件,例如.super-sensitive-info.php
),然后使用服务器安全来限制访问吗?而且,使用特殊字符给我带来了麻烦,例如,按照典型的代码在引号中的做法,
$password = "pa$$w@rd";
应该看起来像吗?$password = "pa\$\$w\@rd";
还是我错过了我不应该在 SQL 中使用特殊字符的备忘录?
创建一个简单的示例,假设我有两个文件,看起来像这样。有没有更好的办法?还是这个?
超级敏感信息.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);
索引.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";