← Статьи

Кроссплатформенные desktop-приложения

Кроссплатформенные desktop-приложения

Electron

Плюсы: огромная экосистема, легко для веб-разработчиков.

Минусы: большой размер, высокое потребление RAM.

Tauri

Плюсы: Rust-бэкенд, маленький размер, нативная производительность.

Минусы: молодая экосистема, сложнее веб-разработчикам.

React Native Desktop

Плюсы: один код для мобильных и десктопа.

Минусы: меньше UI-компонентов под десктоп.

Flutter Desktop

Плюсы: отличная производительность, единый UI.

Минусы: размер приложения, Dart-экосистема.

Qt

Плюсы: нативная скорость, зрелый фреймворк.

Минусы: C++, лицензирование для коммерческого использования.

← Статьи

Базовая защита Linux-сервера

Базовая защита Linux-сервера

1. SSH-ключи

Отключите вход по паролю в `/etc/ssh/sshd_config`:

PasswordAuthentication no
PermitRootLogin no

2. Фаервол UFW

ufw default deny incoming
ufw allow 22
ufw allow 80
ufw allow 443
ufw enable

3. fail2ban

apt install fail2ban
systemctl enable fail2ban
systemctl start fail2ban

4. Автообновления безопасности

apt install unattended-upgrades

5. Мониторинг логов

Используйте `logwatch`, `auditd` или стек ELK для анализа подозрительной активности.

6. Бэкапы

Настройте регулярные бэкапы на отдельный сервер или облачное хранилище. Проверяйте восстановление.

← Статьи

Как почистить сайт от вирусов

Как почистить сайт от вирусов

Признаки взлома: неизвестные файлы, редиректы, спам-рассылки, изменения в ядре CMS, подозрительные процессы.

1. Изолируйте сайт

Отключите доступ для пользователей, смените все пароли (FTP, SSH, база данных, админка).

2. Просканируйте файлы

find /var/www/site -type f -name "*.php" -newer /var/www/site/wp-config.php

Ищите подозрительные функции: `eval`, `base64_decode`, `exec`, `shell_exec`, `preg_replace` с `e`-модификатором.

3. Сравните с оригиналом

Скачайте чистый архив вашей CMS и сравните файлы:

diff -r /path/to/clean /path/to/site

4. Удалите бэкдоры

Удалите все неизвестные файлы. Проверьте cron, планировщики, права на файлы.

5. Обновите всё

CMS, темы, плагины, расширения PHP, сам сервер. Закройте уязвимости.

6. Восстановление из бэкапа

Если бэкап точно чистый — восстановите его. После восстановления смените пароли и проведите аудит.

← Статьи

Деплой Laravel в Docker

Деплой Laravel в Docker

Структура проекта

version: '3.8'
services:
  app:
    build: ./docker/php
    volumes:
      - .:/var/www/html
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./docker/nginx:/etc/nginx/conf.d
      - .:/var/www/html
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: laravel
  redis:
    image: redis:alpine
  queue:
    build: ./docker/php
    command: php artisan queue:work
  scheduler:
    build: ./docker/php
    command: sh -c "while true; do php artisan schedule:run; sleep 60; done"

Важные моменты

  • Используйте переменные окружения (.env).
  • Не храните секреты в образе.
  • Настройте volumes для persistent данных.
  • Используйте healthchecks.
  • Настройте бэкапы базы отдельным контейнером или скриптом.
  • ← Статьи

    Битрикс D7 API

    Битрикс D7 API

    D7 — современное API 1С-Битрикс, которое пришло на смену старым `CModule` и глобальным функциям.

    Подключение модуля

    use BitrixMainLoader;
    
    Loader::includeModule('iblock');

    Работа с ORM

    use BitrixIblockElementTable;
    
    $result = ElementTable::getList([
        'select' => ['ID', 'NAME', 'CODE'],
        'filter' => ['IBLOCK_ID' => 1, 'ACTIVE' => 'Y'],
        'limit' => 10,
    ]);
    
    while ($element = $result->fetch()) {
        echo $element['NAME'];
    }

    Обработка событий

    use BitrixMainEventManager;
    
    EventManager::getInstance()->addEventHandler(
        'iblock',
        'OnBeforeIBlockElementUpdate',
        function (&$arFields) {
            // ваш код
        }
    );

    Кэширование

    $cache = BitrixMainDataCache::createInstance();
    if ($cache->initCache(3600, 'my_cache_key', '/my/cache/dir')) {
        $data = $cache->getVars();
    } else {
        $data = getHeavyData();
        $cache->startDataCache();
        $cache->endDataCache($data);
    }

    Откажитесь от `CIBlockElement::GetList` в новых проектах в пользу ORM и `BitrixIblockElementTable`.

    ← Статьи

    Харденинг WordPress

    Харденинг WordPress

    WordPress — самая популярная CMS в мире, поэтому сайты на ней постоянно подвергаются атакам. Ниже собран чек-лист базовой и продвинутой защиты.

    1. Защита wp-config.php

    Перенесите wp-config.php на уровень выше корня сайта, если структура сервера позволяет. Установите права 640:

    chmod 640 wp-config.php

    Добавьте в .htaccess:

    <files wp-config.php>
    order allow,deny
        deny from all
    </files>

    2. Секретные ключи

    Обновите уникальные ключи и соли в wp-config.php через сервис WordPress:

    define('AUTH_KEY', '...');
    define('SECURE_AUTH_KEY', '...');

    3. Отключение XML-RPC

    Если не используете мобильное приложение или пингбеки:

    add_filter('xmlrpc_enabled', '__return_false');

    4. Скрытие версии WordPress

    remove_action('wp_head', 'wp_generator');

    5. Ограничение попыток входа

    Используйте плагины или настройте fail2ban на сервере. Брутфорс — основной вектор атаки.

    6. Регулярные бэкапы и мониторинг

    Настройте автоматические бэкапы файлов и базы. Проверяйте целостность ядра WordPress и плагинов.