Как предотвратить включение базы данных config. php с другого клиента? - PullRequest
1 голос
/ 05 апреля 2020

У нас есть этот конфиг. 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, но конфиг. php файл тоже (через www.example.com/config.php).

Могут ли другие просто включить www.example.com/config.php в файлы php и выполнить код с моим $conn? Как это предотвратить?

Ответы [ 2 ]

2 голосов
/ 05 апреля 2020

Это правда, что если вы оставите файлы в Интернете root, веб-сервер выполнит их, когда пройдет соответствующий URI запроса.

Однако следует понимать, что исходный код не является (обычно) для просмотра клиентами. Например, когда кто-то делает запрос на /index.php, он не видит исходный код PHP. Они видят только его вывод. Аналогично, если кто-то должен был сделать запрос на /config.php, учитывая код примера на ваш вопрос, он не должен получить ничего, кроме пустого ответа. Итак, чтобы ответить на ваш вопрос ...

Могут ли другие просто включить www.example.com/config.php в php файлы и выполнить код с моим $ conn?

Нет, они не могут.

Чтобы выполнить код, они должны запускать код на вашем сервере.

Теперь, все еще хорошая практика - получить ваш config.php и любой другие включают вне сети root. Причиной этого является предотвращение раскрытия кода в случае, если на вашем веб-сервере отключено PHP. Нередко можно попробовать обновить ваш веб-сервер или что-то в этом роде, сломать конфигурацию, случайно отключить PHP на работающем сервере, и теперь каждый может увидеть весь ваш исходный код. Если этот исходный код отсутствует в сети root, он ничего не может запросить.

Кроме того, часто есть дополнительные открытые разрешения для файлов в вашей сети root. Так что это хорошая практика - держать вещи оттуда, когда вы можете ... но не напрямую по той причине, о которой вы беспокоились.

1 голос
/ 05 апреля 2020

Самое простое решение - разместить конфигурационный файл вне вашей общедоступной папки. Таким образом, он может быть включен при необходимости, при этом он защищен от публичного доступа c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...