如何防止从另一个客户端包含数据库config.php?

问题描述 投票:0回答:2

我们有这个config.php文件:

<?php
$host = "host";
$dbname = "db";
$user = "user";
$pass = "pass";
        try {
        $conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        } catch(PDOException $e) {
        die("Error");
        }
?>

和此结构

/www/
    index.php
    config.php

可以通过www.example.com/index.php访问索引文件,但也可以通过www.example.com/config.php访问config.php文件。

[其他人可以只在其中的php文件中包含www.example.com/config.php并用我的$conn执行代码吗? 如何防止这种情况?

php mysql sql database security
2个回答
1
投票

的确,如果将文件保留在Web根目录中,则当匹配请求URI通过时,Web服务器将执行它们。

但是,请务必了解源代码(通常)无法被客户端查看。例如,当有人请求/index.php时,他们看不到PHP源代码。他们只看到它的输出。同样,如果有人要/config.php的请求,给定示例代码您的问题,他们应该只会得到空响应。因此,回答您的问题...

其他人可以在其中的php文件中仅包含www.example.com/config.php并使用我的$ conn执行代码吗?

不,他们不能。

要执行代码,他们需要在您的服务器上运行代码。

现在,将config.php和其他所有内容都移出网络根目录仍然是一个好习惯。这样做的原因是为了防止在Web服务器上禁用PHP时公开代码。尝试升级Web服务器或其他东西,破坏配置,意外禁用实时服务器上的PHP并不少见,现在每个人都可以看到您的所有源代码。如果该源代码不在Web根目录中,那么他们将无法请求任何内容。

此外,您的Web根目录中的文件通常具有更多打开权限。因此,在可能的情况下将事物保留在外面是一种很好的做法,但并非直接出于您担心的原因。


1
投票

这里最简单的解决方案是将配置文件放在您的公共文件夹之外。这样一来,仍然可以在必要的情况下将其包括在内,同时可以防止公众访问。

© www.soinside.com 2019 - 2024. All rights reserved.