我在许多文章中看到,程序集的延迟签名和强名称可以防止它被劫持。
这意味着什么?
我唯一知道的是,如果没有强名称,您将无法在 GAC 中安装程序集。所以假设我有一个没有强名称的程序集,它会被劫持吗?
有人请澄清我的疑问。
我在许多文章中看到,程序集的延迟签名和强名称可以防止它被劫持。
这意味着什么?
我唯一知道的是,如果没有强名称,您将无法在 GAC 中安装程序集。所以假设我有一个没有强名称的程序集,它会被劫持吗?
有人请澄清我的疑问。
总结一下基本思路:
强命名是一种用简单的识别标记标记您的程序集的方法,以后可以使用它来验证它自部署以来没有被修改过。强名称基本上是程序集名称、版本和开发人员独有的“强名称密钥”的散列。对强名称程序集的引用比对非强名称程序集的引用要经过更严格的验证;特别是,强名称引用必须匹配版本号,并且强名称哈希必须匹配。
这有助于避免程序中两个常见的潜在安全漏洞来源:
强名称过程将拒绝这两个操作,因为强名称数据将不匹配。这就是为什么 GAC 中的程序集必须具有强命名的原因:它们的用途如此普遍,否则它们将成为此类劫持的主要目标。
但是请注意,强名称绝对不会验证发布者的身份。任何人都可以发布声称是 Microsoft 的强名称程序集,并且强名称中没有任何内容可以反驳该断言。验证身份是 Authenticode 数字签名的工作,这与强命名不同。两者经常一起使用,但它们是正交的概念。
延迟签名是一种在构建过程之外对程序集进行签名的技术。这里的想法是,您的公司可能有不允许强名称密钥在构建时可用的策略(可能它们保持脱机,或受密码保护。)延迟签名的程序集标记有一个空白的强-名称密钥:它基本上为授权用户稍后添加的密钥保留空间。同时,包含一个部分强名称密钥——仅足以让其他程序集进行强引用的信息,但不足以检测更改或修改。