mysql/php 是连接到 mysql DB 的安全方式


mysql/php is this a secure way to connect to mysql DB?

好的,很多人都在问这个问题,并且有很多方法可以确保与DB的连接安全,

现在我做了一些谷歌搜索,许多人建议,将与DB代码的连接放在html_public之外的文件中,并在我需要建立连接时从那里调用它。

老实说,我对我所拥有的感到满意,尽管我不确定它有多安全,

这是我连接到数据库的方式:

首先,我确保所有输入都已完全转义和验证......

之后,在同一页面中,我建立了连接,例如:

mysql_connect("localhost","Admin","Password") or 
die ("DB Connection Error");
mysql_select_db("Users") or die ("DB Error");

其余代码之后,我关闭了 mysql 连接。

现在,只是感觉数据库用户信息写在页面中是不对的,但是某人("黑客")如何获取此信息呢?

的意思是,所有输入都已完全转义和验证,我使用的用户具有非常有限的先决条件,例如选择和更新...只。

这安全吗?? 如果没有,你能建议一种更安全的方法吗?

非常感谢您提前提供的帮助:)

阴暗

您应该考虑将此文件放在 Web 根目录之外的原因是一些托管服务提供商不时暂时停止解释 PHP(由于配置错误,通常是在他们更新之后)。然后,代码将以明文形式发送,密码将在野外发布。

请考虑以下目录结构,其中public_html是 Web 根目录:

/include1.php
/public_html/index.php
/public_html/includes/include0.php

现在考虑这个索引.php

<?php
include('includes/include0.php');
do_db_work_and_serve_page_to_visitor();
?>

如果 Web 服务器开始打开提供此文件,则很快就会有人尝试下载 include0.php。但是,没有人能够下载include1.php,因为它位于Web根目录之外,因此永远不会由Web服务器处理。

我个人没有听说过托管服务提供商不解释PHP,导致您的PHP源代码公开。我刚刚在没有安装 php 的基于 RHEL5 的服务器上对此进行了快速测试,并且在尝试访问 php 文档时刚刚返回一个空白页。

mysql_* 函数在最新版本的 PHP 中已被弃用,现在正朝着 Mysqli 发展,作为一个整体上更高效、更安全的解决方案;我建议看看;http://php.net/manual/en/book.mysqli.php - PHP5.4 中还没有使用普通mysql_函数的弃用错误或任何类似错误,但如果你想保持领先,请查看 mysqli。

至于对你上述问题的快速回答,老实说,我认为这种方法是相当安全的。只要确保您设置了转义字符等,我认为您不会遇到任何问题。

编辑:有些人发帖说,在极少数情况下,一些提供商可以以这种方式泄漏您的php源代码。如果是这种情况,我的第一个建议是切换提供商。但是使用include_once从另一个 PHP 文件/库加载数据库信息将是一种快速解决方法。但同样,如果您的提供商的设置确实允许此类泄漏,我会比您的更关心它们的安全性。

你可以让php从存储在公共网络空间之外的文本文件中获取你的数据库密码(使用fopen),但我个人认为没有任何真正的理由这样做。

祝你好运!

  • 伊奥汉

最好的做法是使用 PHP PDO 而不是旧的 mysql API。

看一看:http://php.net/manual/en/ref.pdo-mysql.connection.php

另外,这里有一篇有趣的文章:http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/