我在很多文章中都看到
程序集的延迟签名和强名称可以防止其被劫持。

那是什么意思?

我唯一知道的就是没有一个好名字,您不能在GAC中安装程序集。
因此,假设我有一个没有强名的装配,可以被劫持吗?

有人请澄清我的疑问。

最佳答案

在MSDN上有很多有关此的信息。例如:Strong NamingDelay Signing

总结一下基本思想:

强命名是一种用简单的识别标记标记装配体的方法,以后可用于验证自部署以来未对其进行过修改。强名称基本上是程序集名称,版本和对开发人员唯一的“强名称键”的哈希。对强名称程序集的引用经过更严格的验证,对非强名称程序集的引用也是如此。特别是,强名称引用必须匹配版本号,强名称哈希必须匹配。

这有助于避免程序中潜在安全漏洞的两个常见来源:

  • 恶意用户将程序中的程序集替换为具有相同文件名但包含恶意代码的其他程序集,并诱使您的程序加载并执行该程序集。
  • 恶意用户用同一程序集的不同版本替换了程序中的程序集,但是该程序集已经修复了一些已知的错误。

  • 强名过程将拒绝这两个操作,因为强名数据将不匹配。这就是为什么GAC中的程序集必须使用强名称命名的原因:它们的使用是如此普遍,否则它们将成为此类劫持的主要目标。

    但是请注意,强名绝对不会验证发布者的身份。任何人都可以发布一个自称是Microsoft的强名称程序集,并且该强名称中没有任何内容可以驳斥该主张。验证身份是Authenticode数字签名的工作,这与强命名不同。两者经常一起使用,但是它们是正交的概念。

    延迟签名是一种在构建过程之外对程序集进行签名的技术。这里的想法是,您的公司可能有一些策略,不允许在构建时使用强名称键(也许它们保持脱机状态或在密码后面进行保护。)延迟签名的程序集标有空白的强-名称 key :它基本上保留了空间,供授权用户以后添加 key 。同时,其中包括部分强名称 key -仅足够的信息供其他程序集提供强引用,但不足以检测更改或修改。

    关于c# - .net中延迟签名和强名称到底是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8394357/

    10-11 19:02