- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我想发布一个开源类库。我想知道我是否应该用它发布 snk。例如,我确实想要一个 snk 来使 dll GAC 友好。我见过有公共(public) snk (NHibernate) 和非公开 snk (DevExpress) 的大项目,也见过双方的小项目,所以没有普遍一致,这是肯定的。
假设我不发布私钥。该库的用户本身就是开发人员,如果他们想要进行任何更改,则需要重新编译我的源代码,或者对强名称验证进行异常(exception)处理。既有颈痛,我也有过。
假设我发布了它。我看不出如何利用它。 CAS 之类的东西不再被广泛使用,更重要的是,它甚至在 .NET 4.5 中被弃用了。因此,这不像可怜的用户根据其公钥 token 向我的程序集授予某些权利,而坏人则使用相同的 token 产生了一个错误的程序集。如果坏人可以将自己的 dll 放到某人的计算机上,那么真正阻止他们的并不是强名称。
我认为没有人会检查程序集的公钥 token 。当然,运行时会检查自引用程序集编译后它没有更改,仅此而已。发布者不发布他们的 token ,因此据我所知,我在编译我的代码时可能会首先引用错误程序集。
所以我倾向于发布snk。在我看来,它在理论上提供的安全性很小,在实践中没有安全性,所以为什么要让我的用户的生活更加艰难。也许我应该进行 X.509 代码签名(使用真正私钥的那个),但我认为大多数人也不会检查它。
发布还是不发布?最好的论据获胜。理论方面、实践方面、MS™ 指南,都欢迎。
最佳答案
我不会发布它。
它将允许攻击者重新编译程序集并向其中添加恶意代码。更改后的程序集将与您的程序集具有相同的强名称。
如果您不发布 key ,您可以在没有 key 的情况下分发库和源代码的“可信”二进制文件。如果第 3 方开发人员需要自定义库,他们只需要为其生成一个新 key (但生成的程序集将具有与官方版本不同的强名称,允许运行时区分两者)。
关于.net - 发布 .net 强名称私钥的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10787051/
我是一名优秀的程序员,十分优秀!