繁体   English   中英

如何确保数据库连接安全?

[英]How do I make my database connection secure?

我目前正在为我教会的大学团队建立一个网站,我开始对我正在写的东西的安全性感到有些担忧。 例如,我使用这个函数:

function dbConnect() 
  {
  global $dbcon;

  $dbInfo['server'] = "localhost";
  $dbInfo['database'] = "users";
  $dbInfo['username'] = "root";
  $dbInfo['password'] = "password";

  $con = "mysql:host=" . $dbInfo['server'] . "; dbname=" . $dbInfo['database'];
  $dbcon = new PDO($con, $dbInfo['username'], $dbInfo['password']);
  $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $error = $dbcon->errorInfo();

  if($error[0] != "") 
    {
    print "<p>DATABASE CONNECTION ERROR:</p>";
    print_r($error);
    }
  }

每当我进行某种查询时连接到数据库。 我总是使用PDO预处理语句来阻止任何用户输入的SQL注入,并且我在输出之前使用htmlspecialchars来转义。 我的问题是: 如何保护我的数据库的用户名和密码? 我不知道是否有人可以查看我的PHP文件的来源,但如果他们可以,我只能想象我会被软管。 我该怎么办?

您应该将数据库凭据放在文档根目录之外的文件中,因此如果某些内容混乱并且您的PHP显示给未解析的用户,则任何人都无法看到您的密码。

看一下 这篇关于这个主题的文章 这篇关于这个主题的文章

解决方案很简单。 将所有敏感数据放在Web服务器的文档根目录之外。 许多专家现在主张将大部分(如果不是全部)PHP代码放在Web服务器的文档根目录之外。 由于PHP不受Web服务器相同的限制,您可以在与文档根目录相同的级别创建目录,并将所有敏感数据和代码放在那里。

好的,这需要一些澄清。 有人建议您将敏感数据放在文档根目录之外。 这有一些优点,但在实用性方面比其他任何东西都更安慰。

你必须考虑潜在的问题来源。

  • 无论您在何处放置数据库连接信息,具有shell访问权限的人都将损害您的数据库连接信息。 这可以包括授权用户和利用漏洞获取shell访问权限的用户(这已经发生了很多);

  • 如果PHP被禁用或Web服务器被认为是那么PHP文件可能以原始形式提供。 将它们放在文档根目录之外将保护您免受此攻击;

  • 如果有人以某种方式设法将PHP脚本编写到文档根目录,那么它与拥有shell访问权限的人基本相同,因此没有任何措施可以保护您。

实际上,如果您的Web服务器受到损害,那么您的配置文件位于文档根目录之外的情况将保护您的可能性很小。

数据库的安全要点是确保来自互联网的人无法直接连接。 这可以通过防火墙完成,将数据库绑定到专用IP地址或将数据库放在专用服务器上。

您可以采取预防措施。 创建一个特定于您的应用程序需要能够执行的mySQL用户。 这可以限制攻击者在用户名和密码泄露时可以造成的破坏程度。 例如,允许用户插入,更新,选择等,但不要丢弃等。此外,正如提到的那样,外部不应该访问数据库。 在共享主机环境中,这通常意味着只能从您的www服务器或localhost连接数据库。

Re:kalpaitch,不要在一些可逆的哈希中传递你的密码。 人们永远不应该看到你的来源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM