1

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

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

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

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

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

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

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

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

现在,DB用户信息写在页面上感觉不对,但是某人(“黑客”)怎么能得到这个信息呢?

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

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

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

阴凉

4

3 回答 3

4

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

考虑这个目录结构,public_htmlWeb 根目录在哪里:

/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();
?>

如果 Web 服务器开始公开提供此文件,那么很快就会有人尝试下载include0.php。然而,没有人能够下载include1.php,因为它位于 Web 根目录之外,因此从不被 Web 服务器处理。

于 2012-06-24T22:27:17.253 回答
1

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

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

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

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

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

祝你好运!

  • 伊根
于 2012-06-24T22:38:30.580 回答
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/

于 2012-06-24T23:03:56.497 回答