57 просмотров

Безопасность сайта: защита от взлома и утечек данных

Содержание

Почему важна безопасность сайта

Безопасность сайта — это не опция, а необходимость. Взломанный сайт может привести к:

  • Утечке персональных данных пользователей
  • Потере доверия клиентов
  • Штрафам по 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, обновлений, защиты паролей и валидации входных данных. Затем переходите к более продвинутым техникам защиты.

Помните: безопасность — это не разовое действие, а постоянный процесс мониторинга и улучшения.

Автор статьи Evaris

Мы используем файлы cookie для улучшения работы сайта и персонализации контента. Продолжая использовать сайт, вы соглашаетесь с использованием cookies в соответствии с нашей Политикой конфиденциальности.