知识大全 保护你的代码——谁动了我的组件
Posted 知
篇首语:安全感,不是来源于爱,而是偏爱。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 保护你的代码——谁动了我的组件相关的知识,希望对你有一定的参考价值。
摘要 本文描述了如何用Code Access Security技术来保护代码 使代码不致被恶意调用
作为一名 NET开发人员 你没日没夜地写代码 你的组件运行在越来越多的机器上 忽然有一天 你发现你写的组件被引用在别人写的项目里 而且最可气的是 那人竟用你的名义在做破坏它人系统的恶事!你忍不住了 大叫一声Oh shit! 然后打开MSDN 看看有什么办法能帮助你阻止这场阴谋
OK 办法找到了 那就是 NET平台提供的Code Access Security 有大量继承于CodeAccessPermission的类可以帮你实现不同方面 不同范围的代码安全控制 你所需要做的只是从中挑出最适合的类别加以应用 从而达到保护你的组件的目的
在经过一番挑选之后 你最终确定了使用StrongNameIdentityPermissionAttribute类 这个类允许你将组件(或类 方法)与某一强名称(通常就是你发布程序时所用的强名称)绑定 这样 只有在客户端程序具有该强名称签名的情况下才能使用你的组件 也就是说 除了你自己编写的客户端代码因为拥有同样的签名而被允许使用组件以外 任何第三方代码都无法通过StrongNameIdentityPermissionAttribute的防护 因此也就无法恶意调用你的组件了 ) 听起来真的不错 马上就动手做吧!
为了简便起见 先创建一个很简单的Class Library项目 代码如下
// SecureComp dll
using System
namespace musicland
public class SecureComp
public string Confidential()
return This is confidential!
现在的这个组件非常可怜 因为任何人都可以写代码来调用它 下面 你就要耍点手段了 )
首先引入System Security Permissions命名空间
using System Security Permissions
然后 在组件级加上StrongNameIdentityPermissionAttribute属性
[assembly StrongNameIdentityPermissionAttribute(SecurityAction RequestMinimum
PublicKey= c c d +
f d d b b a d fc ed d d cceda c bc e a e ecd f +
d e b cab f a f cbf afb b c efb e e ff c e b f d f +
a a c f ccad b d e e a cc ca c b af c a c feb e ab )]
namespace musicland
…
注意 这里使用了SecurityAction RequestMinimum 这申明除非获得StrongNameIdentityPermissionAttribute所表明的资源访问权限(即对SecureComp dll组件的访问权限 可以把SecureComp dll看作一样资源) 否则CLR不会准许调用方(即客户端代码)访问所请求的资源 此外 在PublicKey属性中加入了你所允许的公匙(Public Key)的十六进制表示(转化成字符串类型) CRL在运行期间将依照这一段公匙来判断调用方是否合法 除非调用方拥有相应的私匙(Private Key) 否则将无法访问 看来 平时一定要倍加保护你的密钥文件 因为密钥文件(特别是private key)的泄露将会成为你无尽恶梦的根源 而延迟签名(delay signing)在这里也就显得格外重要了 )
说到这里 你一定会有个大大的问号 这长长的一串PublicKey是怎么得出来的?难道要我凭空凑出来不成?当然不是 还记得那个Sn exe工具吗?通过它就可以把PublicKey给提取出来 OK 打开你的命令行 定位到密钥文件所在目录并输入以下内容
sn –p Key snk PublicKey snk
这样 提取出来的公匙信息就被存储在PublicKey snk文件中 你现在只需把公匙信息读取出来并转化成适当的格式就可以了 这里 你可以使用 NET Framework自带的Secutil exe工具 但据我所了解 Secutil工具的输出都是数组格式(我在自己的机器上测试了Secutil所提供的全部输出选项 但所得结果都是一样 这让我很感意外 不知大家是否有更好的办法) 因此就动手自己写了一个小工具来完成这一读取和转换 大家如果感兴趣可以发邮件给我(因为我没有自己的网络空间可以存放 当然你也可以自己来写 因为它实在是太简单了 就是读取二进制文件)
好了 现在你的代码就被全副武装起来了 试着写一个Console客户端来调用SecureComp 结果怎么样?是不是 无法获得相应权限 ?试着用Key snk给客户端程序签名后再访问 这回可以访问了吧! )
cha138/Article/program/net/201311/12839相关参考
用JNA保护你的传统代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java本地接入(JNA
运用JNA保护你的遗留代码(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JavaNati
运用JNA保护你的遗留代码(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 从Java中引用
知识大全 你好!请问我的电脑开机显示英文字母就不会动了该怎么办
你好!请问我的电脑开机显示英文字母就不会动了该怎么办?谢谢蓝屏是由于应用程序或驱动程序与系统服务或操作系统冲突引起的。1,建议开机按F8不放,在出现高级菜单时松开F8键,选择最近一次正确配置(您的起作
详解.NET4.0代码契约组件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 代码契约组件是对N
知识大全 我的电脑开机进入系统就蓝屏,重装系统也蓝屏,现在卡在那里不动了,怎么办啊
我的电脑开机进入系统就蓝屏,重装系统也蓝屏,现在卡在那里不动了,怎么办啊1:开机按F8,回车,回车,进安全模式里,高级启动选项,最后一次正确配置,回车。2:再不行,进安全模式,回车,到桌面后,win+
ASP无组件分页实现思路及代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!后台代码 &
Extjs单独定义各组件的实例代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 网上看到的一个
我是一个女教师,我的一个女学生爱上了我,怎么办?晕纳,有这事我只听说过男学生喜欢女老师还从未听过女学生喜欢女老师刚看你的问题我带琢磨着是不是楼住打错字了我估计眼这女学生应该不会是爱吧是喜欢吧她喜欢你这
知识大全 Javascript日期级联组件代码分析及demo
Javascript日期级联组件代码分析及demo 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!