Аудит зависимостей

Аудит зависимостей — регулярная проверка пакетов на наличие известных уязвимостей. timeago.js имеет нулевые или минимальные зависимости, что снижает атакуемую поверхность, но периодическая проверка остаётся необходимой.


npm audit

# Проверить текущие уязвимости
npm audit

# Только критические
npm audit --audit-level=critical

# Только высокие и выше
npm audit --audit-level=high

# JSON вывод для CI
npm audit --json > audit-report.json

Пример вывода npm audit

found 0 vulnerabilities

Для timeago.js это типичный результат — библиотека без зависимостей имеет минимальную атакуемую поверхность.


Проверка конкретной версии

# Посмотреть информацию о пакете
npm show timeago.js

# Проверить уязвимости через npm registry API
curl https://registry.npmjs.org/-/npm/v1/security/advisories/bulk \
  -H "Content-Type: application/json" \
  -d '{"timeago.js": ["4.0.0"]}'

Snyk — расширенный аудит

npm install -g snyk
snyk test
snyk monitor  # Непрерывный мониторинг

Snyk предоставляет более детальные отчёты и показывает уязвимости в транзитивных зависимостях.


Dependabot (GitHub)

# .github/dependabot.yml
version: 2
updates:
  - package-ecosystem: npm
    directory: "/"
    schedule:
      interval: weekly
    open-pull-requests-limit: 10
    labels:
      - "dependencies"
    ignore:
      # Игнорировать мажорные обновления (требуют ручной проверки)
      - dependency-name: "*"
        update-types: ["version-update:semver-major"]

Dependabot автоматически создаёт PR при обнаружении уязвимостей.


Проверка целостности пакета

# Убедиться, что установленный пакет совпадает с registry
npm pack timeago.js --dry-run

# Проверить hash пакета
cat package-lock.json | grep -A3 '"timeago.js"'

package-lock.json содержит integrity поле — SHA512 хеш пакета:

"timeago.js": {
  "version": "4.0.2",
  "resolved": "https://registry.npmjs.org/timeago.js/-/timeago.js-4.0.2.tgz",
  "integrity": "sha512-...",
  "dev": false
}

Автоматический аудит в CI

# .github/workflows/security.yml
name: Security Audit

on:
  push:
    branches: [main]
  schedule:
    - cron: '0 9 * * 1'  # Каждый понедельник в 9:00

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '18'
      - run: npm ci
      - run: npm audit --audit-level=high

Проверка лицензии

timeago.js распространяется под лицензией MIT — совместима с большинством коммерческих и open-source проектов:

# Проверить лицензию
npm show timeago.js license
# MIT

# Аудит лицензий всех зависимостей
npx license-checker --summary

Lock-файл и атаки на цепочку поставок

Всегда использовать package-lock.json или yarn.lock:

# Установить точно по lock-файлу
npm ci  # Вместо npm install

# Проверить, что lock-файл актуален
npm install --package-lock-only
git diff package-lock.json

Не использовать npm install в CI — он может обновить транзитивные зависимости.


Ручная инспекция пакета

# Скачать и проверить пакет без установки
npm pack timeago.js
tar -tzf timeago.js-4.0.2.tgz  # Список файлов
tar -xzf timeago.js-4.0.2.tgz  # Распаковать для проверки

Реакция на обнаруженную уязвимость

  1. Проверить severity — critical/high требуют немедленного внимания.
  2. Прочитать advisory — понять вектор атаки.
  3. Обновить до патч-версии (если доступна): npm install timeago.js@latest.
  4. Если патча нет — оценить workaround или временно отключить функциональность.
  5. Зафиксировать обновление в git и обновить CHANGELOG.

Чеклист аудита