PHP&;MySQL连接更安全

PHP&;MySQL连接更安全,php,mysql,login,mysqli,wamp,Php,Mysql,Login,Mysqli,Wamp,我有一个小页面,其中包含到MySQL数据库的连接数据,我在需要它的其他页面中包括它。小代码是: [connect_DB.php] ---------------- <?php define("HOST", "localhost"); define("USER", "myUser"); define("PASSWORD", "myPasword"); define("DATABASE", "members"); $mysqli = new mysqli(HOST, USER, PASSW

我有一个小页面,其中包含到MySQL数据库的连接数据,我在需要它的其他页面中
包括它。小代码是:

[connect_DB.php]
----------------
<?php

define("HOST", "localhost");
define("USER", "myUser");
define("PASSWORD", "myPasword");
define("DATABASE", "members");

$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);

?>
[connect_DB.php]
----------------
我的一个朋友向我证明了他可以下载.PHP文件,不到2分钟,他就下载了。这意味着他得到了我的MySQL服务器的登录信息。我想知道是否存在另一种与数据库连接的方式,而无需将密码放入文件中等。他建议我使用SSL或TSL,或者简单地配置HTTPD.CONF或.HTACCES以不允许“外部”访问该文件。这是正确的还是可以实现的

我实际上是在Wamp服务器(Win7)上测试这个,我无法创建一个.HTACCESS文件,因为它告诉我要为这个文件输入一个名称(我已经介绍了!:()),每次我都尝试这样命名它


我知道这可能是一个重复的问题,但相信我,我读了很多,但我不知道该怎么办。提前,谢谢。

很可能,您的服务器没有正确设置,这意味着PHP引擎没有运行,所以它只是将文件内容发送或显示回,比如
text/html
,而不是bein这是像您在评论中提到的一些工具可能访问文件的唯一方法,如果在某个地方没有指向该文件的链接,这样的工具也不会看到该文件,所以您可能启用了目录索引来访问它

要测试是否启用了PHP,只需创建一个文件并放入其中:
如果它显示了您的php信息,那么我就被难住了,如果不是,那么它就证明您的服务器对php配置错误

虽然一旦修复,将敏感文件放在web根目录之外是一种很好的做法。将常量中的值设置为函数不是一个好主意,因为这样可以访问敏感值。只需将它们直接放在构造参数中即可


如果您想阻止对只有PHP可以访问的目录的访问,那么您可以在其中创建一个.htaccess文件,其中包含
deny from all
,这将导致服务器发送一个403 probled。

我非常确定您的主机提供商没有解析PHP文件,因为如果源文件通过interpr,则无法下载源文件彼得

确保已安装、配置和激活PHP,如有疑问,请联系提供商的支持。测试此问题的最简单方法是上载文件:

test.php

为了增加一点安全性, 您可以通过在上面添加以下内容来保护db_config.php:

if (!defined('IN_MY_PROJECT')) {
    die('forbidden');
}
并将其放在index.php的顶部:

define('IN_MY_PROJECT', true);

您只需禁止从apache设置中的根非html目录下载任何文件即可。您将密码保存在
www
无法访问的文件中,如果该文件无法访问密码,则Web服务器很难连接到数据库。如果他能够下载php文件而不进行处理,则会出现服务器配置错误由php引擎执行。否则,如果它被处理,他只下载了一个空白文件,不管他使用什么,它仍然执行HTTP请求,因此web服务器必须编译该文件并发送正在执行的文件的输出。在这种情况下,这是空的。现在,如果他从前端页面截取输出,这是不同的如果服务器配置正确的话,这个文件就是naah。所以,如果我创建了一个目录ej.“connection”,在它里面我放了connect_db.php和.htaccess,我只放在里面,还有一行“deny from all”。这将禁止访问文件的任何类型的外部访问,但不会阻止我将其包含在其他php文件中。可以吗?是的,php可以访问任何文件,直到虚拟主机中设置的服务器基目录(如果设置)但是如果它是一个基本的WAMP,那么PHP很可能会一直到C:只有web服务器才会考虑
deny from all
业务如果您满意并且web服务器允许访问您的页面,您可以自由地在PHP脚本中包含任何您想要的内容。htaccess将不再被视为。因此,请明确……httpd.conf是全局Apache筛选器,.htaccess具有每个文件夹或子文件夹的本地规则?它们都可以具有完全相同的语法类型?这是基本正确,虽然您无法在.htaccess中设置每个配置指令,但有些指令只能在httpd.conf中设置,并且可以在httpd.conf中配置您可以在.htaccess文件中覆盖的内容(如果有的话)。非常有用!今晚将对其进行测试。谢谢:)顺便说一句,
定义('in_MY_PROJECT',true)我只把它放在index.php中?或者在所有使用
db_config.php
(如register.php、login.php logout.php等)的文档中,将其放入所有文件中。它防止外部脚本包含您的配置。如果PHP没有正确运行,那么它将毫无帮助;如果外部脚本选择
define('IN_MY_PROJECT',true)?或者选择
文件获取内容('db_config.php')?是否真的值得将这些定义放在所有地方,即它们应该保护什么场景?如果有任何问题的话,这将阻止通过HTTP通过web服务器进行直接访问,但正如您所建议的,可以通过将db配置片段放在docroot之外来缓解这一问题。我通常不这样做,因为这实际上不值得。知道这样一种机制也不坏。移出文档根目录仍然是最好的解决方案
if (!defined('IN_MY_PROJECT')) {
    die('forbidden');
}
define('IN_MY_PROJECT', true);