【问题标题】:How to prevent including database config.php from another client?如何防止包含来自另一个客户端的数据库 config.php?
【发布时间】:2020-04-04 23:28:38
【问题描述】:

我们有这个 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)。

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

【问题讨论】:

  • 不要放在www。将其放在不公开的文件夹中。它仍然可以从那里包含,但无法访问。
  • @El_Vanja 哦,对了。谢谢你:)
  • 我确定我之前在这个网站上看到过这个建议并想找到重复的,但我找不到提到它的问题,所以我发布了一个答案。

标签: php mysql sql database security


【解决方案1】:

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

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

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

不,他们不能。

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

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

此外,您的 Web 根目录中的文件通常具有更多的打开权限。所以,在可能的情况下尽量不让事情发生是一种很好的做法……但不是直接因为你担心的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多