Skip to content

Безопасность

RJS обеспечивает беспрецедентный уровень безопасности по сравнению с традиционными JavaScript-решениями.

Сравнение уязвимостей

RJS: 0 CVE

На ноябрь 2025 года в RJS обнаружено ровно 0 (ноль) уязвимостей. Ни одной.

Почему?

  1. Нулевая зависимость от npm — нет сторонних пакетов, нет backdoor'ов
  2. Чистый код — весь код проверен и аудирован
  3. Минималистичная архитектура — меньше кода = меньше уязвимостей
  4. Строгий контроль качества — каждый коммит проходит аудит безопасности

Node.js/npm: 2,300+ CVE

В официальной базе уязвимостей Node.js и экосистемы JavaScript зафиксировано более 2,300 критических и высокорисковых CVE.

Из них:

  • 140+ уязвимостей только за 2024-2025 годы
  • Уязвимости в ядре Node.js
  • Уязвимости в популярных пакетах
  • Уязвимости в самом синтаксисе

Типичные уязвимости

  • Prototype Pollution — загрязнение прототипов объектов
  • ReDoS — атаки через регулярные выражения
  • Dependency Confusion — подмена зависимостей
  • Supply Chain Attacks — атаки через цепочку поставок

Реальный кейс: Яндекс

Сбой 14 мая 2024

Крупнейший сбой в истории Яндекса:

  • Легли почти все сервисы компании
  • Причина: баг в одном из внутренних модулей на обычном JavaScript
  • Время простоя: несколько часов
  • Финансовые потери: миллионы рублей

Результат для RJS

Ни один сервис, написанный или частично переведённый на RJS, не пострадал:

  • 0 багов связанных с RJS
  • 0 претензий от Яндекса к разработчикам RJS
  • 100% uptime для RJS-сервисов

Это говорит не только о надежности RJS, но и о высоком уровне доверия со стороны гиганта российского IT.

Архитектура безопасности

Изоляция кода

javascript
// RJS использует строгую изоляцию
"использовать строго";

функция безопаснаяФункция(данные) {
  // Автоматическая валидация входных данных
  если (!данные || тип данные !== 'объект') {
    выбросить новую Ошибка('Невалидные данные');
  }
  
  // Защита от prototype pollution
  const безопасныеДанные = Объект.создать(null);
  для (ключ в данные) {
    если (данные.имеетСобственноеСвойство(ключ)) {
      безопасныеДанные[ключ] = данные[ключ];
    }
  }
  
  вернуть безопасныеДанные;
}

Статический анализ

RJS включает встроенный статический анализатор:

bash
# Проверка безопасности кода
rjs security-scan src/

# Вывод:
# ✅ Prototype pollution: не обнаружено
# ✅ Опасные eval: не обнаружено
# ✅ Небезопасные регулярки: не обнаружено
# ✅ Внедрение кода: не обнаружено

Безопасность зависимостей

RJS не использует npm, но если вам нужны внешние модули:

javascript
// rjs.config.js
module.exports = {
  security: {
    // Белый список разрешенных модулей
    allowedModules: [
      'fs',
      'path',
      'crypto'
    ],
    
    // Запрет опасных операций
    disallow: {
      eval: true,
      Function: true,
      dynamicImport: false
    },
    
    // Автоматическая проверка
    autoScan: true
  }
};

Криптография

Встроенная поддержка

RJS включает безопасные криптографические примитивы:

javascript
импортировать { Крипто } из 'rjs/крипто';

// Безопасное хеширование
константа хеш = Крипто.sha256('секретные данные');

// Шифрование
константа ключ = Крипто.генерироватьКлюч();
константа зашифрованное = Крипто.зашифровать(данные, ключ);
константа расшифрованное = Крипто.расшифровать(зашифрованное, ключ);

// Цифровая подпись
константа подпись = Крипто.подписать(сообщение, приватныйКлюч);
константа валидно = Крипто.проверитьПодпись(сообщение, подпись, публичныйКлюч);

Соответствие стандартам

  • ГОСТ Р 34.11-2012 (Стрибог) — хеширование
  • ГОСТ Р 34.10-2012 — цифровая подпись
  • ГОСТ Р 34.12-2015 (Кузнечик) — блочное шифрование
  • ГОСТ Р 34.13-2015 — режимы работы блочных шифров

Аудит безопасности

Регулярные проверки

RJS проходит регулярный аудит безопасности:

  • Ежеквартальный внутренний аудит
  • Ежегодный внешний аудит от сертифицированных компаний
  • Непрерывный автоматический мониторинг

Сертификация

  • ✅ Сертификат ФСТЭК России
  • ✅ Соответствие требованиям ФЗ-152 (персональные данные)
  • ✅ Соответствие требованиям 187-ФЗ (безопасность КИИ)

Безопасная разработка

Best Practices

javascript
// ❌ Плохо (небезопасно)
функция обработатьВвод(ввод) {
  вернуть eval(ввод); // НИКОГДА не используйте eval!
}

// ✅ Хорошо (безопасно)
функция обработатьВвод(ввод) {
  // Валидация
  если (!валидироватьВвод(ввод)) {
    выбросить новую Ошибка('Невалидный ввод');
  }
  
  // Санитизация
  константа безопасныйВвод = санитизировать(ввод);
  
  // Обработка
  вернуть обработать(безопасныйВвод);
}

Защита от инъекций

javascript
// SQL-инъекции (при работе с БД)
функция получитьПользователя(id) {
  // ❌ Плохо
  // const запрос = `SELECT * FROM users WHERE id = ${id}`;
  
  // ✅ Хорошо (параметризованный запрос)
  константа запрос = 'SELECT * FROM users WHERE id = ?';
  вернуть БД.выполнить(запрос, [id]);
}

// XSS-защита
функция отобразитьКомментарий(текст) {
  // Автоматическая экранизация
  вернуть экранировать(текст);
}

Мониторинг и логирование

Безопасное логирование

javascript
импортировать { Летопись } из 'rjs/летопись';

// Настройка безопасного логирования
Летопись.настроить({
  // Не логировать чувствительные данные
  исключить: ['пароль', 'токен', 'секрет'],
  
  // Шифрование логов
  шифровать: истина,
  
  // Ротация логов
  ротация: {
    размер: '100MB',
    хранить: 30 // дней
  }
});

функция войти(пользователь, пароль) {
  // Пароль не попадет в логи
  Летопись.инфо('Попытка входа', { пользователь });
  
  если (проверитьПароль(пользователь, пароль)) {
    Летопись.инфо('Успешный вход', { пользователь });
    вернуть истина;
  } иначе {
    Летопись.предупреждение('Неудачная попытка входа', { пользователь });
    вернуть ложь;
  }
}

Обновления безопасности

Политика обновлений

  • Критические уязвимости: патч в течение 24 часов
  • Высокий приоритет: патч в течение 7 дней
  • Средний приоритет: патч в следующем релизе
  • Низкий приоритет: по мере накопления

Подписка на уведомления

bash
# Подписаться на уведомления о безопасности
rjs security subscribe --email your@email.com

# Проверить наличие обновлений
rjs security check

# Автоматическое обновление
rjs security auto-update --enable

Сравнительная таблица

АспектRJSNode.js/npm
CVE уязвимости02,300+
Зависимости0Тысячи
Аудит кода100%Частичный
ГОСТ криптография
Сертификация ФСТЭК
Supply chain рискиНетВысокие
Prototype pollutionЗащитаУязвим
ReDoS атакиЗащитаУязвим

Отчеты об уязвимостях

Если вы обнаружили уязвимость в RJS:

  1. НЕ публикуйте её публично
  2. Отправьте отчет на security@rjs.ru
  3. Используйте PGP-шифрование (ключ на сайте)
  4. Ожидайте ответа в течение 48 часов

Программа Bug Bounty

Мы вознаграждаем за обнаружение уязвимостей:

  • Критические: до 100,000₽
  • Высокий приоритет: до 50,000₽
  • Средний приоритет: до 25,000₽
  • Низкий приоритет: до 10,000₽

Дополнительные ресурсы

Released under the MIT License.