Почему важна безопасность сайта
Безопасность сайта — это не опция, а необходимость. Взломанный сайт может привести к:
- Утечке персональных данных пользователей
- Потере доверия клиентов
- Штрафам по GDPR и другим регуляциям
- Падению позиций в поиске
- Финансовым потерям
Основные угрозы
SQL-инъекции
SQL-инъекция — это внедрение вредоносного SQL-кода в запросы к базе данных.
Пример уязвимого кода:
$username = $_POST['username'];
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysql_query($query);
Защита — использование подготовленных запросов:
// PHP PDO
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
// PHP mysqli
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
XSS (Cross-Site Scripting)
XSS — внедрение вредоносного JavaScript-кода на страницу.
Защита:
// Экранирование вывода
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
// В PHP
$safe = filter_var($input, FILTER_SANITIZE_STRING);
// Content Security Policy
header("Content-Security-Policy: default-src 'self'");
CSRF (Cross-Site Request Forgery)
CSRF — выполнение действий от имени пользователя без его ведома.
Защита — CSRF-токены:
// Генерация токена
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
// В форме
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
// Проверка
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('Invalid CSRF token');
}
Защита паролей
Хеширование паролей
Никогда не храните пароли в открытом виде. Используйте современные алгоритмы хеширования:
// PHP
$hash = password_hash($password, PASSWORD_DEFAULT);
// Проверка
if (password_verify($password, $hash)) {
// Пароль верный
}
// Node.js
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash(password, 10);
const isValid = await bcrypt.compare(password, hash);
Требования к паролям
- Минимум 12 символов
- Комбинация букв, цифр и символов
- Проверка на утечки (Have I Been Pwned)
- Двухфакторная аутентификация для админок
HTTPS и SSL-сертификаты
Всегда используйте HTTPS для передачи данных:
- Шифрование данных между браузером и сервером
- Защита от перехвата трафика
- Повышение доверия пользователей
- Фактор ранжирования в Google
Используйте бесплатные SSL-сертификаты от Let's Encrypt или платные от проверенных провайдеров.
Защита файлов и директорий
.htaccess для Apache
# Запрет доступа к конфигурационным файлам
<FilesMatch "\.(htaccess|htpasswd|ini|log|sh|sql)">
Order Allow,Deny
Deny from all
</FilesMatch>
# Защита директорий
Options -Indexes
# Защита от hotlinking
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
Регулярные обновления
- Обновляйте CMS, плагины и модули
- Следите за уязвимостями (CVE)
- Используйте автоматические обновления безопасности
- Тестируйте обновления на staging-окружении
Резервное копирование
Регулярные бэкапы — последняя линия защиты:
- Ежедневные автоматические бэкапы
- Хранение бэкапов на отдельном сервере
- Проверка восстановления из бэкапа
- Шифрование бэкапов
Мониторинг безопасности
- Логирование всех действий
- Мониторинг подозрительной активности
- Уведомления о попытках взлома
- Регулярные аудиты безопасности
Заключение
Безопасность сайта — это комплексный процесс, требующий постоянного внимания. Начните с базовых мер: HTTPS, обновлений, защиты паролей и валидации входных данных. Затем переходите к более продвинутым техникам защиты.
Помните: безопасность — это не разовое действие, а постоянный процесс мониторинга и улучшения.