PHP: безопасность. Подключение файлов.
Всем привет! В этой статье мы разберемся, как правильно подключать файлы в PHP.
Если вы разрабатываете свой движок, то вы можете сделать что-то вроде этого:
<?php
if(!isset($_GET['show'])) {
die();
}
$show = $_GET['show'];
$content = file_get_contents("content/{$show}.php");
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>File Includes</title>
</head>
<body>
<?php echo $content; ?>
</body>
</html>
Здесь мы просто получаем данные из URL и подключаем нужный нам файл из папки content, добавляя к нему расширение .php. Казалось бы, что здесь может быть опасного? Чтобы разобраться с этим, давайте создадим папку app в корне нашего сайта и добавим в нее файл db.php, в котором пропишем следующее:
$db = new PDO('mysql;host=127.0.0.1;dbname=localhost', 'root', '12345');
Теперь зайдите на страницу, введите в URL следующее:
domain.com/site/?show=../app/db // вместо domain.com/site/ введите url своего сайта
Перед вами окажется пустая страница, но, если вы посмотрите в ее исходный код, то увидите там наше подключение к базе данных. Работает это очень просто: у нас есть файл index.php, в котором мы пишем код, есть папки app и content. С файла index.php с помощью функции file_get_contents мы запрашиваем введенную в URL страницу из папки content, но, если мы введем ../, это будет означать, что нужно подняться на уровень выше, мы выйдем в корень, оттуда перейдем в папку app, где и найдем нужный нам файл.
Чтобы такой проблемы не было, никогда не создавайте сайт таким образом. Если вы еще новичок и не знаете, как правильно делать движки для сайтов, то советую приобрести курс Создание движка на PHP и MySQL 2.0. Если же вам очень нужно делать именно так, то обязательно используйте проверки. К примеру, обезопасить наш сайт можно вот таким образом:
// ...
$show = $_GET['show'];
$allowed = ['main', 'card'];
$content = in_array($show, $allowed) ? file_get_contents("content/{$show}.php") : '';
// ...
Т.е. мы создаем массив, где указываем названия страниц, к которым можно получить доступ, а дальше делаем проверку, есть ли такая страница в списке. Если есть, то переходим на нее, иначе же просто выводим пустую строку.
Итак, на этом все. Спасибо за внимание!
-
- Михаил Русаков
Комментарии (1):
Если вы еще новичок и не знаете, как правильно делать движки для сайтов, то советую приобрести курс Создание движка на PHP и MySQL 2.0. Извините Михаил, но данный курс не подходит для новичков, скорей всего для более продвинутых разработчиков.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.