首页 > 解决方案 > 如何防止包含来自另一个客户端的数据库 config.php?

问题描述

我们有这个 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,但 config.php 文件也可访问(通过 www.example.com/config.php)。

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

标签: phpmysqlsqldatabasesecurity

解决方案


确实,如果您将文件保留在 Web 根目录中,Web 服务器将在匹配的请求 URI 到达时执行它们。

但是,请了解源代码(通常)不被客户查看。例如,当有人请求 时/index.php,他们看不到 PHP 源代码。他们只看到它的输出。同样,如果有人提出请求/config.php,给定示例代码您的问题,他们应该得到的只是一个空的响应。所以,回答你的问题...

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

不,他们不能。

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

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

此外,您的 Web 根目录中的文件通常有更多的打开权限。因此,在可能的情况下将事情排除在外只是一个好习惯……但不是直接出于您担心的原因。


推荐阅读