レジストリファイアウォール
15108 ワード
私はそれをGoogleすることができなかったので、私は私自身を書きました:
セキュリティと法的リスクを緩和する.
オープンソースは現代のソフトウェア開発に不可欠である.According to various estimates , 結果のコードベースの少なくとも60 %は、オープンリポジトリ、ライブラリとパッケージで構成されています.成長し続ける.Synopsys OSSRA 2021 report アプリケーションの98 %がオープンソースコンポーネントを持っていることを発見.
しかし、オープンは無料を意味しません.価格はあなたが取るリスクです: 有効 セキュリティ 合法性/ライセンス JS宇宙の文脈でこれらの問題を考えましょう.
JSパッケージは様々な方法で配布されています.メソッドにかかわらず、任意のPKGマネージャによって解決される2つのエントリータイプだけです.
https://registry.yarnpkg.com https://registry.npmmirror.com https://r.cnpmjs.org https://skimdb.npmjs.com/registry https://registry.npm.taobao.org この信頼性レベルが十分でないならば、あなたは簡単にもう一つのレジストリを走らせることができます: sonatype-nexus verdaccio.org
任意のコードが正しく動作しない場合があります.エラーや悪意のために.ほとんどのOSSライセンスが損害賠償のどんな責任も除外することを心にとめておいてください.OSSコードが公開される前に確認されないことを常に覚えておくことも重要です.
これらの2つの状況は時々危険な事件を引き起こすcolors.js or node-ipc .
独立した監査プロセスは高価な、時間がかかるので、新しいPKGバージョンを使用する前に遅延を設定するだけでは効果的な対策かもしれません.
ライセンス契約はその瞬間の属性である.husky-5 ). 新しいバージョンの未使用の使用は、法的で財政的な結果を持っているかもしれません.したがって、自動化されたライセンスチェックは、CI/CDパイプラインまたはレジストリの独自の機能の一部である必要があります.
述語によるリモートパッケージへのアクセスを制限します 複数の設定
Expressjs -インスパイアサーバーの実装. がない.文字通りゼロ.
ノード.JS = 14
バグレポート、機能のリクエストや質問:任意の問題を開きます.
あなたは、PRを提案するのを常に歓迎します.
すべてのフィードバックが評価されます.
MIT
アントワンボルブ / レジストリファイアウォール
NPMレジストリプロキシのオンザフライフィルタリング
動機
セキュリティと法的リスクを緩和する.
オープンソースは現代のソフトウェア開発に不可欠である.According to various estimates , 結果のコードベースの少なくとも60 %は、オープンリポジトリ、ライブラリとパッケージで構成されています.成長し続ける.Synopsys OSSRA 2021 report アプリケーションの98 %がオープンソースコンポーネントを持っていることを発見.
しかし、オープンは無料を意味しません.価格はあなたが取るリスクです:
有効性リスク
JSパッケージは様々な方法で配布されています.メソッドにかかわらず、任意のPKGマネージャによって解決される2つのエントリータイプだけです.
"dependencies": {
"yaf" : "git://github.com/antongolub/yarn-audit-fix.git#commit-hash",
"yaf2": "antongolub/yarn-audit-fix",
"yarn-audit-fix" : "*"
}
yaf2@antongolub/yarn-audit-fix:
version "9.2.1"
resolved "https://codeload.github.com/antongolub/yarn-audit-fix/tar.gz/706646bab3b4c7209596080127d90eab9a966be2"
dependencies:
"@types/find-cache-dir" "^3.2.1"
"@types/fs-extra" "^9.0.13"
"node_modules/yaf": {
"name": "yarn-audit-fix",
"version": "9.2.1",
"resolved": "git+ssh://[email protected]/antongolub/yarn-audit-fix.git#706646bab3b4c7209596080127d90eab9a966be2",
"license": "MIT",
"node_modules/yarn-audit-fix": {
"version": "9.2.1",
"resolved": "https://registry.npmjs.org/yarn-audit-fix/-/yarn-audit-fix-9.2.1.tgz",
"integrity": "sha512-4biFNP4ZLOHboB2cNVuhYyelTFR/twlfmGMQ2TgJgGRORMDM/rQdQqhJdVLuKvfdMLFEPJ832z6Ws5OoCnFcfA==",
"dependencies": {
したがって、ミラーリングの実装は基本的に非常に簡単です.私たちは、これらの資産を別のssh/httpsエントリポイントから保存し、公開する必要があります.幸運にも、これはすでに起こりました.JSコードの主なリポジトリはregistry.npmjs.org . そして、少なくとも5つのパブリックレプリカは、選択肢として常に利用できます:セキュリティリスク
任意のコードが正しく動作しない場合があります.エラーや悪意のために.ほとんどのOSSライセンスが損害賠償のどんな責任も除外することを心にとめておいてください.OSSコードが公開される前に確認されないことを常に覚えておくことも重要です.
これらの2つの状況は時々危険な事件を引き起こすcolors.js or node-ipc .
独立した監査プロセスは高価な、時間がかかるので、新しいPKGバージョンを使用する前に遅延を設定するだけでは効果的な対策かもしれません.
法的危険
ライセンス契約はその瞬間の属性である.husky-5 ). 新しいバージョンの未使用の使用は、法的で財政的な結果を持っているかもしれません.したがって、自動化されたライセンスチェックは、CI/CDパイプラインまたはレジストリの独自の機能の一部である必要があります.
主な特徴
name
, org
, version
( semver range ), license
, dateRange
, username
, age
. port/context-path/rules
組み合わせは、必要な.Expressjs -インスパイアサーバーの実装.
要件
ノード.JS = 14
インストール
# npm
npm i npm-registry-firewall
# yarn
yarn add npm-registry-firewall
用途
CLI
npm-registry-firewall /path/to/config.json
js API
import {createApp} from 'npm-registry-firewall'
const app = createApp({
server: {
host: 'localhost',
port: 3001,
},
firewall: {
registry: 'https://registry.npmmirror.com',
rules: [
{
policy: 'allow',
org: '@qiwi'
},
{
policy: 'deny',
name: '@babel/*'
},
]
}
})
await app.start()
設定
{
"server": {
"host": "localhost", // Defaults to 127.0.0.1
"port": 3000, // 8080 by default
"secure": { // Optional. If declared serves via https
"cert": "ssl/cert.pem",
"key": "ssl/key.pem"
},
"base": "/", // Optional. Defaults to '/'
"healthcheck": "/health", // Optional. Defaults to '/healthcheck'. Pass null to disable
"keepAliveTimeout": 15000, // Optional. Defaults 61000
"headersTimeout": 20000, // Optional. Defaults 62000
"requestTimeout": 10000 // Optional. Defaults 30000
},
"firewall": {
"registry": "https://registry.npmmirror.com", // Remote registry
"entrypoint": "https://r.qiwi.com/npm", // Optional. Defaults to `${server.secure ? 'https' : 'http'}://${server.host}:${server.port}${route.base}`
"base": "/", // Optional. Defaults to '/'
"rules": [
{
"policy": "allow",
"org": "@qiwi"
},
{
"policy": "allow",
"name": ["@babel/*", "@jest/*", "lodash"] // string[] or "comma,separated,list". * works as .+ in regexp
},
{
"policy": "deny",
"name": "colors",
"version": ">= v1.4.0" // Any semver range: https://github.com/npm/node-semver#ranges
},
{
"policy": "deny",
"license": "dbad" // Comma-separated license types or string[]
},
{
"policy": "allow",
"username": ["sindresorhus", "isaacs"] // Trusted npm authors.
},
{
"policy": "allow",
"name": "d",
// `allow` is upper, so it protects `< 1.0.0`-ranged versions that might be omitted on next steps
"version": "< 1.0.0"
},
{
"policy": "deny",
// Checks pkg version publish date against the range
"dateRange": ["2010-01-01T00:00:00.000Z", "2025-01-01T00:00:00.000Z"]
},
{
"policy": "allow",
"age": 5 // Check the package version is older than 5 days. Like quarantine
}
]
}
}
マルチ設定
// Array at the top level
[
// Two servers (for example, http and https) share the same preset
{
"server": [
{"port": 3001},
{"port": 3002},
],
"firewall": {
"registry": "https://registry.yarnpkg.com",
"rules": {"policy": "deny", "org": "@qiwi"}
}
},
// One server has a pair of separately configured endpoints
{
"server": {"port": 3003},
"firewall": [
{"base": "/foo", "registry": "https://registry.npmjs.org", "rules": {"policy": "deny", "org": "@qiwi"}},
{"base": "/bar", "registry": "https://registry.yarnpkg.com", "rules": {"policy": "deny", "org": "@babel"}}
]
}
]
放医研registry=https://localhost:3000
strict-ssl=false
NPMビューnpm-registry-firewall % npm view d versions
[ '0.1.0', '0.1.1' ]
出力$ node src/main/js/cli.js config.json
{"level":"INFO","timestamp":"2022-04-11T20:56:47.031Z","message":"npm-registry-firewall is ready for connections: https://localhost:3000"}
{"level":"INFO","timestamp":"2022-04-11T20:56:49.568Z","traceId":"44f21c050d8c6","clientIp":"127.0.0.1","message":"GET /d"}
{"level":"INFO","timestamp":"2022-04-11T20:56:50.015Z","traceId":"44f21c050d8c6","clientIp":"127.0.0.1","message":"HTTP 200 446ms"}
貢献
バグレポート、機能のリクエストや質問:任意の問題を開きます.
あなたは、PRを提案するのを常に歓迎します.
すべてのフィードバックが評価されます.
許可
MIT
Reference
この問題について(レジストリファイアウォール), 我々は、より多くの情報をここで見つけました https://dev.to/antongolub/npm-registry-firewall-12aiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol