Skip to main content

Избегайте публикации секретов в реестре npm

Объяснение в один абзац

Следует принять меры предосторожности, чтобы избежать риска случайной публикации секретов в публичных реестрах npm. Файл .npmignore может использоваться для внесения в черный список определенных файлов или папок, или массив files в package.json может выступать в качестве белого списка.

Чтобы получить представление о том, что npm publish действительно будет публиковать в реестре, можно добавить флаг --dry-run, добавив команду npm publish, чтобы обеспечить подробное представление созданного пакета tarbell.

Важно отметить, что если в проекте используются файлы .npmignore и .gitignore, все, чего нет в .npmignore, публикуется в реестре (то есть файл .npmignore переопределяет . gitignore). Это условие является распространенным источником путаницы и является проблемой, которая может привести к утечке секретов. Разработчики могут в конечном итоге обновить файл .gitignore, но не забудьте также обновить .npmignore, иначе это может привести к тому, что потенциально конфиденциальный файл не будет передан в систему контроля версий, но все же будет включен в пакет npm.

Пример кода

Example .npmignore file

# Tests
test
coverage

# Build tools
.travis.yml
.jenkins.yml

# Environment
.env
.config

Пример использования массива файлов в package.json

{ 
"files" : [
"dist/moment.js",
"dist/moment.min.js"
]
}

Что говорят другие блогеры

Из блога Liran Tal & Juan Picado at Snyk:

... Еще одна полезная практика - использование свойства files в package.json, который работает в качестве белого списка и определяет массив файлов, которые должны быть включены в пакет, который должен быть создан и установлен (в то время как файл игнорирования функционирует как черный список). Свойство files и файл ignore можно использовать вместе, чтобы определить, какие файлы должны быть явно включены, а также исключены из пакета. При использовании обоих, первое свойство files в package.json имеет приоритет над файлом игнорирования.

Из npm блога

... Когда вы запускаете npm publish, npm объединяет все файлы в текущем каталоге. Он принимает несколько решений о том, что включать и что игнорировать. Чтобы принять эти решения, он использует содержимое нескольких файлов в каталоге вашего проекта. Эти файлы включают в себя .gitignore, .npmignore и массив файлов в пакете.json. Он также всегда включает определенные файлы и игнорирует другие.