/
codxplr
/
simple-php-blog
Обзор
Документация
Войти
/
codxplr
/
simple-php-blog
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
init.php
64 строки
2 KB
codxplr
Create: article.php, config.php, editor.php, index.php, init.php, login.php, logout.php, sql_dump.sql, toggle_publish.php
08 авг 2026, 21:23
Верифицирован
08 авг 2026, 21:23
1113d72
Код
Авторство
О чём код?
<?php // 1. Сначала проверяем, не запущена ли сессия случайно раньше if (session_status() === PHP_SESSION_NONE) { // 2. Устанавливаем параметры ДО запуска session_start() // Используем строгую политику ID сессии против фиксации ini_set('session.use_strict_mode', '1'); // Делаем куки HttpOnly (недоступны для JS) ini_set('session.cookie_httponly', '1'); // Передаем куки только по HTTPS (если сайт работает по SSL) if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') { ini_set('session.cookie_secure', '1'); } session_start(); // Немедленно регенерируем ID при входе в админку или критических действиях // Здесь это можно убрать, если нет логина в этом файле, но оставить полезно // session_regenerate_id(true); } require_once 'config.php'; function csrf_token(): string { if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } return $_SESSION['csrf_token']; } function check_csrf(): void { if ($_SERVER['REQUEST_METHOD'] !== 'POST' || !isset($_POST['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) { http_response_code(403); die('Ошибка безопасности: неверный CSRF-токен.'); } } // PDO подключение try { $pdo = new PDO(DSN, DB_USER, DB_PASS, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false ]); } catch (PDOException $e) { error_log($e->getMessage()); die("Ошибка подключения к базе данных."); } // Вспомогательные функции function e(string $string): string { return htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); } function redirect(string $url): void { header("Location: $url"); exit; } function is_admin_logged_in(): bool { return isset($_SESSION['admin_id']); }