如果我是用三层结构写的,那肯定就可能逻辑层和数据层DLL被别人拿去引用在.NET 1.1中用
http://gxh973121.cnblogs.com/archive/2006/05/26/409648.html
的方法可以实现,可到了.net 2.0 中,就不起作用了。
http://gxh973121.cnblogs.com/archive/2006/05/26/409648.html
的方法可以实现,可到了.net 2.0 中,就不起作用了。
尽量定义结构和接口,不要实现
实现部分在服务器和客户端写,可以防止业务逻辑被盗窃
这样,就可以直接用我的方法了。TO:luofix(luofix)
逻辑层和数据层DLL多用来定义元数据
尽量定义结构和接口,不要实现
实现部分在服务器和客户端写,可以防止业务逻辑被盗窃如果我做的是网站呢,全部代码都给了对方。
在1.1中能成功的保护,就是我给的地址http://gxh973121.cnblogs.com/archive/2006/05/26/409648.html
大家可以看看,但在了.NET 2.0中就不奏效了,不知道是不是因为2.0版本的原因,还是修改了方式。
全部用internal,不要用public全部用internal的话,我怎么去访问呢。生成多个DLL那种。CodeAnyWhere(随风飘散)
层与层间的dll文件,可以被恶意调用,你可以把层与层间做个密钥接口呀,只用成功登录了,调用方法才好用我现在说的就是这种方法,但奇怪的是,.NET 1.1中测试成功,但在.NET 2.0中就不行。不信你们也试试看,通过的希望给个回复,谢谢
既然微软不实现,那么我们自己实现好了。
贴主所引用的1.1的StrongNameIdentityPermissionAttribute方式,实际上就是微软用CLR来检测调用方的强名称引用。既然微软在2.0里面去掉了这个功能,那么我们自己实现好了。即
自己建立一个Attribute,方式可以是方法/类之类的,如public sealed AssemblyCallCheckAttribute : Attribute
{
// 检查代码
}在检查代码里使用System.Reflection名称空间的Assembly类
Assembly call = Assembly.GetCallingAssembly();
上面代码的含义是获取调用当前方法的程序集。就是假设你的程序集AssemblyName.ClassName.MethodName() 方法被另一个程序集调用,则上面的GetCallingAssembly()方法获取的就是另一个程序集的引用。然后用Assembly的实例方法GetName()获取一个AssemblyName类的实例。而这个AsseblyName实例包含的就是程序集的信息,如程序集文件名,版本,和最重要的强名称信息,代码如下AssemblyName name = call.GetName();
AssemblyName.GetPublicKey() 和
AssemblyName.GetPublicKeyToken()上面的两个方法从字面上就可以获得它的含义。获取了以后,就可以判断了。
如自己写的所有的程序集固定使用一个专用的强名称文件,然后通过Reflector或ILDASM等软件获取自己的签名强名称的PublicKey或PublicKeyToken,保存在(可以加密保存)资源活着其他什么地方,运行的时候写一个算法随机检测调用的程序集是否是自己的程序集,如果是,则什么问题都没有,如果不是,那么抛出异常的方法谁不会?
1、拦截调用进行检查,CAS可以在CLR处拦截对代码的调用进行安全检查,很显然我们自己的检查机制必须自行在所有要检查的地方进行拦截。
2、权限缓存,一旦CAS判定某个调用具备有效的权限,那么在下次同样调用时CAS将不会再进行安全检查,这是提高效率的一个方法,很显然我们根本没办法用到这个好处,所以会导致代码运行效率降低。