【问题标题】:How to safely connect to a database [closed]如何安全地连接到数据库 [关闭]
【发布时间】:2014-07-31 01:08:24
【问题描述】:

现在我只有一个包含我的数据库名称、用户、密码和主机的文件。如果有人只是双击该文件,他们会有很多私人信息。我该如何改变它,这样他们就不能只看到我的数据库信息。仅供参考 PHP + MySql。 编辑: 怎么这么难理解?我有一个名为 db.php 的数据库文件,其中包含连接到数据库的所有信息。如果有人要在我的计算机上双击文件 (db.php),他们会看到我的信息。在现实生活中,黑客可以获取此文件。我该如何解决这个问题,让黑客看不到数据库信息,但我仍然可以连接到数据库?

这是一个合理的问题。

【问题讨论】:

  • 那么它是什么类型的文件?它是如何存储的?它存储在哪里...?
  • 我怎么这么难理解?我有一个名为 db.php 的数据库文件,其中包含连接到数据库的所有信息。如果有人要在我的计算机上双击文件 (db.php),他们会看到我的信息。在现实生活中,黑客可以获取此文件。我怎样才能解决这个问题? @达伦
  • 呃,放到文档根目录外?如果黑客可以访问您的文件,那您最不必担心!
  • @3legit4quit 不,伙计,你在这里表现得像个智障。请仔细阅读 - 如果有人想要您的数据库凭据,他们找到方法。如果黑客可以访问您的服务器并查看您的文件(这是您最不必担心的),那么他们实际上可以为所欲为,他们可以根您的服务器并访问所有内容。 (我不会在这里详细介绍)您可以使用 IonCube 之类的东西来加密您的文件,但仍然有可能被解密。现在对于您的本地文件问题,请采取更多预防措施,如 cilosis 的回答。

标签: php mysql sql security


【解决方案1】:

您的网络服务器将被配置为处理某些文件类型。例如,当您加载一个 PHP 页面时,它不会(或不应该)将 PHP 输出到屏幕——而是对其进行处理。

您有几个很好的选择来保护这些信息。

1) 将详细信息作为变量存储在 PHP 文件中(您很可能会这样做)。很多时候,这些将在一个数组中:

$dbParams = array(
   'database' => 'my_db',
   'host'     => 'localhost',
   'username' => 'my_web_user',
   'password' => 'abc123',
);

只要你从不输出$dbParams 变量,就可以了。

2) 另一种选择是使用上面看到的内容,但不是文字值,而是拉入 environment variables

$dbParams = array(
   'database' => $_ENV['myapp_db_name'],
   'host'     => $_ENV['myapp_db_host'],
   'username' => $_ENV['myapp_db_username'],
   'password' => $_ENV['myapp_db_password'],
);

然后在您的服务器配置中,您可以将这些环境变量设置为您需要的任何内容。这样,如果由于某种原因 PHP 停止工作并开始将您的 Web 文件输出为纯文本,他们将永远不会看到您的敏感信息。您还会注意到我 namespaced 环境变量。这是一个好主意,因为它们是全局的,如果您只使用 host 之类的东西,您很可能会发生冲突。

[编辑]

阅读您更新的 cmets,听起来您担心本地计算机上的文件——而不是网络服务器。您应该像往常一样采取必要的预防措施来保护您的本地计算机免受远程访问(即防火墙、病毒扫描以防止特洛伊木马等)。实际上,除非您是 Facebook 或 Google,否则人们可能不会真正关心您的本地数据库密码是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-14
    • 2011-02-27
    • 2023-03-05
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2013-02-01
    • 2012-09-14
    相关资源
    最近更新 更多