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

Joe*_*ssi 12 php mysql database security pdo

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

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);
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

Ski*_*ick 10

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

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

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


cle*_*tus 9

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

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

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

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

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

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

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