活着的死人 发表于 2015-1-16 22:39:26

ASP.NET网站制作之回护你的DLL和Code不被他人利用

你觉得学习.NET怎么样,我懂的少,问的可能很幼稚,见笑了啊:)人人做项目开辟一样平常都是分层的,好比UI层,营业层,数据会见层。营业层援用数据会见层的DLL(好比dataAccess.dll),并利用dataAccess.dll中的办法。当项目完成并给客户用了,可有些内心BT的客户这个时分也能够请个略微懂NET的人来援用你的dataAccess.dll并挪用个中的办法弄损坏。好比能够间接利用内里的ChangePwd(stringUserName,stringPwd)办法把其他用户的暗码改了,这个时分就你就.......好了,该入手下手说怎样回护我们的代码了:
起首我们必要把我们的程序集做成强定名的程序集。
这里我们在.NET命令提醒中输出sn-kc:        est.snk创立一个新的随秘密钥对并将其存储在c:        est.snk中
然后新创建类库ClassLibrary1,内里只要个类文件Class1.cs,代码以下:
1usingSystem;
2
3namespaceClassLibrary1
4{
5publicclassClass1
6{
7publicClass1()
8{
9//
10//TODO:在此处增加机关函数逻辑
11//
12}
13
14publicstringInsert()
15{
16return"ok";
17}
18}
19}
20
AssemblyInfo.cs代码:
//............其他的就用默许
//毗连下面用强定名工具SN.exe天生的文件.
接着创立个WindowApplication来挪用我们的ClassLibrary1,代码:
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
MessageBox.Show(newClassLibrary1.Class1().Insert());
}不修正WindowApplication的AssemblyInfo.cs。
在这里就能够间接运转了,不外人人都看的出来,如许是能乐成挪用Class1中的办法的。
如今让我们来修正下Class1.cs,代码:
usingSystem;
usingSystem.Security.Permissions;

namespaceClassLibrary1
{
[StrongNameIdentityPermissionAttribute(SecurityAction.LinkDemand,PublicKey=
"00240000048000009400000006020000002400005253413100040000010001000551684edd1600"+
"8ccbdd337b1cf1490490d97fe0048c5f3629cc4f5104578499eace9b2a94115022edd620def472"+
"8b4f088291cfa77a40659afba611fdafbb7894b93a64049d439936bd0cd8dc0704625aeb735892"+
"e9eb3f910a49a2925af10515d935654d7adac5567ff6d780d23d587de0ff4d271da7b30680fa88"+
"a47a4ba4")]
publicclassClass1
{
publicClass1()
{
//
//TODO:在此处增加机关函数逻辑
//
}
publicstringInsert()
{
return"ok";
}
}
}
然后再编译后运转windowapplication挪用class1中的办法就会堕落。
这里的StrongNameIdentityPermissionAttribute是NET供应的CAS(CodeAccessSecurity)中的1个类,详细可参考MSDN,SecurityAction.LinkDemand是请求间接挪用方已被授与了指定的权限,这里即windowapplication要授与了权限才行,假如利用SecurityAction.Demand请求挪用仓库中的一切初级挪用方都已被授与了以后权限工具所指定的权限。他们的区分是:假如windowapplication已受权会见,而另有个windowapplication2(未受权会见)经由过程挪用windowapplication中的button1_Click办法来挪用class1,这个时分假如利用SecurityAction.LinkDemand就可以乐成挪用,而利用SecurityAction.Demandwindowapplication2就不克不及挪用,windowapplication在这2种情形下都能挪用。
说到这里人人必定再问PublicKey=前面一串那末长的字符串怎样来。PublicKey前面的字符串是你入手下手天生的c:        est.snk文件中保留的公钥。那怎样才干看到这个公钥了,还是是用SN.EXE。
输出sn-pc:        est.snkc:publicKey.snk(从test.snk中提取公钥并将其存储在publicKey.snk中)
再输出sn-tpc:publicKey.snk(显现公钥信息)
下面这个命令就可以看到PublicKey前面的字符串了,还想甚么啊,把那字符串copy上去啊。
最初人人必定在体贴这个时分windowapplication要怎样挪用class1了,实在也复杂,只需把windowapplication的AssemblyInfo.cs修正为:

到这里就统统OK了,人人都看到最关头的就是test.snk文件了,以是必定要回护好你本人的test.snk文件。
上面是我的代码,人人能够下载看看,在利用的时分记的要把我KEY文件夹下的test.snkcopy到c盘。
否则会堕落^_^。
http://www.ckuyun.com/Files/BearsTaR/Solution1.rar
如果需要重新编写代码,几乎任何一门计算机语言都可以跨平台了,还用得着Java嘛,而且像PHP/C#等语言不需要修改代码都可以跨Windows/Linux。

因胸联盟 发表于 2015-1-19 20:42:15

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

谁可相欹 发表于 2015-1-26 14:14:04

代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。

分手快乐 发表于 2015-2-4 15:55:35

使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

再现理想 发表于 2015-2-10 03:45:09

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。

海妖 发表于 2015-2-28 18:47:23

平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。

若天明 发表于 2015-3-17 05:06:50

平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。

莫相离 发表于 2015-3-23 19:59:07

虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。
页: [1]
查看完整版本: ASP.NET网站制作之回护你的DLL和Code不被他人利用