我只是在编写一个 PHP 文件来连接到我的 SQL 服务器以用于网站登录系统,我很害怕我会留下大量的安全漏洞。
我的 connect.php 文件位于网站根目录的目录中,其中包含以下内容:
$db = new mysqli('localhost', 'publicguest', '**********', 'website');
密码在哪里可以看到。我知道当有人在查看网站时,他们无法通过源代码看到 PHP 代码,但这是不安全的,避免这种情况的常用方法是什么?
If your server has configuration issues, specifically php scripts aren't executed then someone may be able to get that info.
To avoid that you can put the file above the document root directory.
Unless they have direct access to the files you're working with, it should be fine.
Most commonly, people will store passwords and settings in a configuration file above root level which they then parse and use in those statements. It will then be up to the attacker to reach that file.
If you really want to be obscure about it, you could encrypt those settings as well.
除非攻击者对文件有 FTP/直接访问权限,否则这不是安全风险,因为 PHP 文件在输出到客户端之前已经过处理。
如果攻击者有 FTP/直接访问,mysql auth info 是最少的问题!
Wordpress 将 mysql 登录信息以明文形式存储在 wp-config.php 中,joomla 也是如此,我认为没有其他方法可以做到这一点。
作为一个好的做法,您不应该在应用程序的源代码中使用您的密码,而是将其存储在您的 Web 根目录之外的 db_config.php 文件中,确保您的配置文件不可公开访问。
这应该让您更深入地了解论点: http ://www.mediawiki.org/wiki/Manual:Securing_database_passwords
在大多数情况下,它是安全的,除非:
由于某种原因,您的 Web 服务器以纯文本形式输出您的代码,这种情况在服务器配置错误的极少数情况下会发生。
您可以将您的连接数据存储在 Web 根目录之外以停止一般访问,但如果黑客因任何原因被允许在您的服务器上执行 PHP,无论如何它的游戏就结束了。
关于该行代码,我唯一要更改的就是从该特定行中获取用户名和密码,例如:
$host = 'localhost';
$user = 'publicguest';
$pass = 'hunter2';
$database = 'website';
$db = new mysqli($host, $user, $pass, $database);
这样做的原因是,如果您的代码在某些时候遇到错误并吐出堆栈跟踪,它也不会意外吐出您的连接信息。
如果您真的想偏执,可以致电:
unset($user);
unset($pass);
连接完成后,但这实际上只能保护您免受代码注入,只要您从未使用过,eval()
您应该没问题。[说真的,从来没有。>:I
]
该线程中的人们所建议的任何进一步的建议都只是偏执狂,因为一旦有人对您的代码具有文件级访问权限,他们无论如何都拥有您王国的密钥,并且游戏结束了。但请放心!99 次 100 没有人关心您的代码或您的数据库,他们只是想注入自己的代码来发送垃圾邮件和/或 DOS 其他人。:P