实现示例type Req = { name: string; version: string; hash: string; url?: string } const allowHosts = new Set<string>(['pypi.org','files.pythonhosted.org','pypi.example.com']) function hex64(h: string): boolean { return /^[A-Fa-f0-9]{64}$/.test(h) } function validUrl(u?: string): boolean { if (!u) return true; try { const x = new URL(u); return x.protocol === 'https:' && allowHosts.has(x.host) } catch { return false } } function semverLike(v: string): boolean { return /^(\d+\.\d+\.\d+)(?:[-A-Za-z0-9_.]+)?$/.test(v) } function evaluate(list: Req[]): { ok: boolean; errors: string[] } { const errors: string[] = [] for (const r of list) { if (!r.name || !semverLike(r.version)) errors.push(`id:${r.name}`) if (!hex64(r.hash)) errors.push(`hash:${r.name}`) if (!validUrl(r.url)) errors.push(`url:${r.name}`) } return { ok: errors.length === 0, errors } } 审计与运行治理审计哈希与来源;构建安装必须启用 `--require-hashes` 并拒绝缺失哈希项。来源变更需审批与记录,支持回溯。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
1.853282s