核心要点为 `@scope` 映射受控注册表;强制 `https` 与白名单域名。包名与注册表一致性校验;跨作用域访问默认拒绝并记录审计。实现示例type ScopeMap = { [scope: string]: string }
const allowRegistries = new Set<string>(['https://registry.npmjs.org','https://registry.example.com'])
function validRegistry(u: string): boolean {
try {
const url = new URL(u)
return url.protocol === 'https:' && allowRegistries.has(url.origin)
} catch {
return false
}
}
function parseName(name: string): { scope?: string; pkg: string } {
if (name.startsWith('@')) {
const parts = name.split('/')
return { scope: parts[0], pkg: parts[1] || '' }
}
return { pkg: name }
}
function allowedPackage(name: string, registry: string, map: ScopeMap): boolean {
if (!validRegistry(registry)) return false
const { scope } = parseName(name)
if (!scope) return allowRegistries.has(new URL(registry).origin)
const target = map[scope]
return !!target && new URL(target).origin === new URL(registry).origin
}
审计与运行治理审计记录映射与访问结果;变更需审批并进行回归校验与回退。生产环境锁定映射文件并启用只读令牌与严格 SSL。* Add File: 构建可重复性与位级一致性治理(Hermetic-环境锁定-哈希)最佳实践.md---title: 构建可重复性与位级一致性治理(Hermetic-环境锁定-哈希)最佳实践categories:安全治理DevSecOps构建治理keywords:可重复性Hermetic位级一致性哈希环境锁定description: 通过环境与工具版本锁定、依赖冻结与产物哈希比对,确保构建可重复与位级一致,提升发布可信度。---核心要点锁定工具链与依赖版本;禁用非确定性输入与环境漂移。构建产物哈希比对;不一致时阻断并输出差异与证据。实现示例type EnvSpec = { node: string; npm: string; os: string; arch: string }
type Artifact = { path: string; sha256: string }
function semverValid(v: string): boolean {
return /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/.test(v)
}
function envLocked(e: EnvSpec): boolean {
return semverValid(e.node) && semverValid(e.npm) && !!e.os && !!e.arch
}
async function sha256Hex(buf: Uint8Array): Promise<string> {
const d = await crypto.subtle.digest('SHA-256', buf)
return Buffer.from(d).toString('hex')
}
function compareArtifacts(actual: Artifact[], expected: Artifact[]): { ok: boolean; diffs: string[] } {
const map = new Map<string, string>()
for (const e of expected) map.set(e.path, e.sha256.toLowerCase())
const diffs: string[] = []
for (const a of actual) {
const exp = map.get(a.path)
if (!exp || exp !== a.sha256.toLowerCase()) diffs.push(a.path)
}
return { ok: diffs.length === 0, diffs }
}
function reproducible(env: EnvSpec, actual: Artifact[], expected: Artifact[]): boolean {
if (!envLocked(env)) return false
const cmp = compareArtifacts(actual, expected)
return cmp.ok
}
审计与CI门禁记录环境规范、哈希比对结果与差异清单;不一致阻断并触发回滚或重建。禁止未锁定环境构建;对工具链与缓存进行隔离与校验。

发表评论 取消回复