我在很多文章中都看到
程序集的延迟签名和强名称可以防止其被劫持。
那是什么意思?
我唯一知道的就是没有一个好名字,您不能在GAC中安装程序集。
因此,假设我有一个没有强名的装配,可以被劫持吗?
有人请澄清我的疑问。
最佳答案
在MSDN上有很多有关此的信息。例如:Strong Naming和Delay Signing
总结一下基本思想:
强命名是一种用简单的识别标记标记装配体的方法,以后可用于验证自部署以来未对其进行过修改。强名称基本上是程序集名称,版本和对开发人员唯一的“强名称键”的哈希。对强名称程序集的引用经过更严格的验证,对非强名称程序集的引用也是如此。特别是,强名称引用必须匹配版本号,强名称哈希必须匹配。
这有助于避免程序中潜在安全漏洞的两个常见来源:
强名过程将拒绝这两个操作,因为强名数据将不匹配。这就是为什么GAC中的程序集必须使用强名称命名的原因:它们的使用是如此普遍,否则它们将成为此类劫持的主要目标。
但是请注意,强名绝对不会验证发布者的身份。任何人都可以发布一个自称是Microsoft的强名称程序集,并且该强名称中没有任何内容可以驳斥该主张。验证身份是Authenticode数字签名的工作,这与强命名不同。两者经常一起使用,但是它们是正交的概念。
延迟签名是一种在构建过程之外对程序集进行签名的技术。这里的想法是,您的公司可能有一些策略,不允许在构建时使用强名称键(也许它们保持脱机状态或在密码后面进行保护。)延迟签名的程序集标有空白的强-名称 key :它基本上保留了空间,供授权用户以后添加 key 。同时,其中包括部分强名称 key -仅足够的信息供其他程序集提供强引用,但不足以检测更改或修改。
关于c# - .net中延迟签名和强名称到底是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8394357/