12 subscribers
182 photos
3 videos
212 links
Programmer - Курсы программирования. Канал для тех, кто не хочет остаться на задворках цивилизации.
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Safety🪬, [02.04.2025 16:00]
🚀 Полное руководство по PHP – Глава 38

📌 Тема: Безопасность в PHP – Защита от SQL-инъекций и XSS

Привет, кодеры! 👨‍💻 В этой главе разберём ключевые аспекты безопасности PHP-приложений.

### 🔒 1. Защита от SQL-инъекций
Используйте подготовленные выражения (Prepared Statements) вместо прямой вставки переменных в SQL-запросы.

Пример с PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => $email]);
$user = $stmt->fetch();



Пример с MySQLi:
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();



### 🛡 2. Защита от XSS (Cross-Site Scripting)
Всегда экранируйте вывод с помощью htmlspecialchars():
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');



### 🔐 3. Валидация и фильтрация данных
Используйте filter_var():
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if ($email === false) {
die("Некорректный email!");
}



### 🚫 4. Защита от CSRF (межсайтовая подделка запроса)
Используйте CSRF-токены:
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("Ошибка CSRF-токена!");
}
// Обработка формы
}
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));



📢 Подписывайтесь на канал [Safety_Y](https://t.me/Safety_Y) – больше полезного о безопасности в IT!

#PHP #Безопасность #WebDev #Программирование #SQL #XSS
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 Полное руководство по PHP – Глава 39

📌 Тема: Работа с файлами и загрузка файлов на сервер

Привет, разработчики! 👨‍💻 В этой главе разберём, как безопасно работать с файлами в PHP и реализовать загрузку файлов на сервер.

### 📂 1. Основы работы с файлами
Чтение файла:
$content = file_get_contents('example.txt');
echo $content;



Запись в файл:
file_put_contents('example.txt', 'Hello, PHP!');



Проверка существования файла:
if (file_exists('example.txt')) {
echo "Файл существует!";
}



### ⚠️ 2. Безопасная загрузка файлов
Пример обработки загружаемого файла:
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
$uploadDir = 'uploads/';
$fileName = basename($_FILES['file']['name']);
$filePath = $uploadDir . $fileName;
$fileType = strtolower(pathinfo($filePath, PATHINFO_EXTENSION));

// Проверка типа файла (например, только изображения)
$allowedTypes = ['jpg', 'png', 'jpeg', 'gif'];
if (!in_array($fileType, $allowedTypes)) {
die("Недопустимый тип файла!");
}

// Проверка размера файла (например, не более 2MB)
if ($_FILES['file']['size'] > 2 * 1024 * 1024) {
die("Файл слишком большой!");
}

// Перемещение файла в нужную директорию
if (move_uploaded_file($_FILES['file']['tmp_name'], $filePath)) {
echo "Файл успешно загружен!";
} else {
echo "Ошибка загрузки файла!";
}
}



### 🔒 3. Безопасность при работе с файлами
- Проверяйте MIME-тип файла ($_FILES['file']['type']).
- Генерируйте случайные имена для файлов, чтобы избежать перезаписи.
- Ограничивайте права доступа к папке загрузок (chmod).
- Используйте `is_uploaded_file()` для проверки легитимности файла.

📢 Подписывайтесь на канал [Safety_Y](https://t.me/Safety_Y) – больше полезного о безопасности в IT!

#PHP #Файлы #WebDev #Безопасность #Программирование #ЗагрузкаФайлов
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 Полное руководство по PHP – Глава 40

📌 Тема: Аутентификация и авторизация в PHP

Привет, кодерам! 👋 В этой главе разберём, как правильно реализовать вход пользователей и управление их правами.

### 🔑 1. Базовая аутентификация
Хранение паролей:
Всегда используйте password_hash() и password_verify()!

// Регистрация  
$hashedPassword = password_hash($_POST['password'], PASSWORD_DEFAULT);
// Сохраняем $hashedPassword в БД

// Вход
$user = getUserFromDB($_POST['login']);
if ($user && password_verify($_POST['password'], $user['password'])) {
$_SESSION['user_id'] = $user['id'];
header('Location: /dashboard.php');
} else {
die('Неверный логин или пароль!');
}



### 🛡 2. Защита сессий
session_start([  
'cookie_secure' => true, // Только HTTPS
'cookie_httponly' => true, // Запрет JS-доступа
'use_strict_mode' => true // Защита от фиксации
]);

// Регенерация ID сессии после входа
session_regenerate_id(true);



### 🔐 3. Ролевая модель (авторизация)
// Проверка прав  
function checkPermission($requiredRole) {
if ($_SESSION['user_role'] !== $requiredRole) {
header('HTTP/1.0 403 Forbidden');
die('Доступ запрещён!');
}
}

// Использование
checkPermission('admin');



### ⚠️ 4. Защита от bruteforce
// Ограничение попыток входа  
if ($_SESSION['login_attempts'] > 5) {
die('Превышено число попыток. Попробуйте позже.');
}



### 🔥 Бонус: JWT-авторизация (для API)
use Firebase\JWT\JWT;  

// Генерация токена
$payload = [
'user_id' => 123,
'exp' => time() + 3600 // 1 час
];
$jwt = JWT::encode($payload, 'your_secret_key', 'HS256');

// Проверка токена
try {
$decoded = JWT::decode($jwt, 'your_secret_key', ['HS256']);
} catch (Exception $e) {
http_response_code(401);
die('Недействительный токен!');
}



📢 Больше о безопасности: [Safety_Y](https://t.me/Safety_Y)
#PHP #Безопасность #Аутентификация #JWT #WebDev #Программирование

P.S. В следующей главе разберём OAuth-интеграцию! 💡