mysql / php这是一种连接mysql DB的安全方式吗?

时间:2012-06-24 22:22:50

标签: php mysql database security

好的,很多人都在问这个问题,有很多方法可以解决如何与数据库安全连接的问题,

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

老实说,我对自己拥有的东西感到满意,但我不确定它有多安全,

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

首先,我确保所有输入都完全转义并经过验证......

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

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

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

现在,只是觉得数据库用户信息写在页面中感觉不对,但有人(“黑客”)怎么能得到这些信息呢?

我的意思是,所有输入都是完全转义和验证的,我使用的用户具有非常有限的优先级,例如仅限选择和更新。

这安全吗?如果没有,请你建议一个更安全的方式吗?

非常感谢您的帮助:)

黑幕

3 个答案:

答案 0 :(得分:4)

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

考虑这个目录结构,其中public_html是Web根目录:

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

现在考虑这个 index.php

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

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

答案 1 :(得分:1)

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

使用最新版本的php已经不推荐使用mysql_ *函数,现在正朝着mysqli迈进,这是一个整体更高效,更安全的解决方案;我建议你去研究一下; http://php.net/manual/en/book.mysqli.php - 在PHP5.4中没有使用普通mysql_函数的弃用错误或任何类型的错误,但是如果您希望掌握最新的东西,请查看mysqli

至于对上述问题的快速回答,说实话,我认为该方法合理安全。只要确保你已经设置了逃脱字符等,我就不会认为你会遇到任何问题。

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

你可以让PHP从存储在公共网站空间之外的文本文件中获取你的数据库密码(使用fopen),但我个人没有看到这样做的真正原因。

祝你好运!

  • 锐衡

答案 2 :(得分:0)

最佳做法是使用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/