C#代码安全性文档格式.docx
- 文档编号:16659268
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:12
- 大小:19.40KB
C#代码安全性文档格式.docx
《C#代码安全性文档格式.docx》由会员分享,可在线阅读,更多相关《C#代码安全性文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
Minimal"
web_minimaltrust.config"
/securityPolicy>
trustlevel="
originUrl="
"
默认为Full,表示拥有最大的权限,当然风险也就最高,我们可以在自己的网站下的web.config中自定义信任级别:
Custom"
E:
\_NetProject\PermissionTrust\WebSite11\web_customtrust.config"
这里使用了自定义的配置文件,其实也就是复制C:
\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\web_lowtrust.config文件,然后在此文件上进行适当修改就可以了(使用此配置默认是不允许连接数据库的)
配置Sqlconnection的代码访问权限
配置的方法就是修改自定义的web_customtrust.config文件,修改后的文件如下所示:
粗体部分为修改点
web_customtrust.config
configuration>
mscorlib>
security>
policy>
PolicyLevelversion="
1"
>
SecurityClasses>
SecurityClassName="
AllMembershipCondition"
Description="
System.Security.Policy.AllMembershipCondition,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
AspNetHostingPermission"
System.Web.AspNetHostingPermission,System,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
FileIOPermission"
System.Security.Permissions.FileIOPermission,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
FirstMatchCodeGroup"
System.Security.Policy.FirstMatchCodeGroup,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
IsolatedStorageFilePermission"
System.Security.Permissions.IsolatedStorageFilePermission,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
NamedPermissionSet"
System.Security.NamedPermissionSet"
SecurityPermission"
System.Security.Permissions.SecurityPermission,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
StrongNameMembershipCondition"
System.Security.Policy.StrongNameMembershipCondition,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
UnionCodeGroup"
System.Security.Policy.UnionCodeGroup,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
UrlMembershipCondition"
System.Security.Policy.UrlMembershipCondition,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
ZoneMembershipCondition"
System.Security.Policy.ZoneMembershipCondition,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
SqlClientPermission"
System.Data.SqlClient.SqlClientPermission,System.Data,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
/SecurityClasses>
NamedPermissionSets>
PermissionSet
class="
version="
Unrestricted="
true"
Name="
FullTrust"
Allowsfullaccesstoallresources"
Nothing"
Deniesallresources,includingtherighttoexecute"
ASP.Net"
IPermission
Level="
Read="
$AppDir$"
PathDiscovery="
Allowed="
AssemblyIsolationByUser"
UserQuota="
1048576"
Flags="
Execution"
IPermissionclass="
addConnectionString="
datasource=dbserver;
initialcatalog=db1"
KeyRestrictions="
UserID=;
Password=;
ConnectionReset="
KeyRestrictionBehavior="
AllowOnly"
/IPermission>
/NamedPermissionSets>
CodeGroup
PermissionSetName="
IMembershipCondition
Url="
$AppDirUrl$/*"
/CodeGroup>
$CodeGen$/*"
CodeGroupclass="
Zone="
MyComputer"
Microsoft_Strong_Name"
ThiscodegroupgrantscodesignedwiththeMicrosoftstrongnamefulltrust."
PublicKeyBlob="
002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293"
Ecma_Strong_Name"
ThiscodegroupgrantscodesignedwiththeECMAstrongnamefulltrust."
00000000000000000400000000000000"
/PolicyLevel>
/policy>
/security>
/mscorlib>
/configuration>
加入以上的配置后限制使用SqlConnection时只能访问dbserver上的db1数据库,不能访问其他数据库,用户名密码等可以自由输入,也就是在代码中只能:
SqlConnectionconnection=newSqlConnection("
datasource=dbserver;
UserID=gspring;
Password=***;
initialcatalog=db1"
)
如果连接其他数据库就会报错:
说明:
应用程序试图执行安全策略不允许的操作。
要授予此应用程序所需的权限,请与系统管理员联系,或在配置文件中更改该应用程序的信任级别。
异常详细信息:
System.Security.SecurityException:
请求“System.Data.SqlClient.SqlClientPermission,System.Data,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”类型的权限已失败。
这样就从源头上限制住了数据库的连接操作。
当然如果希望可以连接任意数据库,可以修改为如下配置:
实现和使用一个最简版的自定义权限
自定义一个代码访问权限需要从CodeAccessPermission继承,并且要实现IUnrestrictedPermission接口,主要需实现的方法有:
Copy创建当前权限对象的副本。
Intersect返回当前类与传递的类所允许权限的交集。
IsSubsetOf如果传递的权限包括当前权限允许的一切操作,则IsSubsetOf返回true。
FromXml对您的自定义权限的XML表示形式进行解码。
ToXml对您的自定义权限的XML表示形式进行编码。
Union创建一个权限,该权限是当前权限与指定权限的并集。
1usingSystem;
2usingSystem.Text;
3usingSystem.Security;
4usingSystem.Security.Permissions;
5
6namespaceMyPermission
7{
8[Serializable]
9publicsealedclassCustomPermission:
CodeAccessPermission,IUnrestrictedPermission
10{
11privateDateTime_expiredDate;
12
13publicDateTimeExpiredDate
14{
15get{return_expiredDate;
}
16set{_expiredDate=value;
17}
18
19publicCustomPermission()
20{
21}
22
23//必须有这个方法,CAS系统会调用此方法的
24publicCustomPermission(PermissionStatestate)
25{
26}
27
28publicboolIsUnrestricted()
29{
30returnfalse;
31}
32
33publicoverrideIPermissionCopy()
34{
35CustomPermissioncopy=newCustomPermission();
36copy.ExpiredDate=this.ExpiredDate;
37
38returncopy;
39}
40
41publicoverrideIPermissionIntersect(IPermissiontarget)
42{
43if(null==target)
44{
45returnnull;
46}
47else
48{
49returntarget;
50}
51}
52
53privateboolCheckDate(DateTimedate)
54{
55if(System.DateTime.Now.CompareTo(date)<
0)
56{
57returntrue;
58}
59else
60{
61returnfalse;
62}
63}
64
65/**////<
summary>
66///进行权限判断
67///<
/summary>
68///<
paramname="
target"
>
<
/param>
69///<
returns>
/returns>
70publicoverrideboolIsSubsetOf(IPermissiontarget)
71{
72if(null==target)
73{
74returnfalse;
//为false时,指示条件不满足,需要读取config中配置来判断
75}
76try
77{
78CustomPermissionpassedpermission=(CustomPermission)target;
79
80returnCheckDate(passedpermission.ExpiredDate);
81}
82catch(InvalidCastException)
83{
84thrownewArgumentException("
Argument_WrongType"
this.GetType().FullName);
85}
86}
87
88publicoverridevoidFromXml(SecurityElementPassedElement)
89{
90stringelement=PassedElement.Attribute("
expireddate"
);
91
92if(null!
=element)
93{
94this.ExpiredDate=Convert.ToDateTime(element);
95}
96}
97
98publicoverrideSecurityElementToXml()
99{
100SecurityElementelement=newSecurityElement("
IPermission"
101Typetype=this.GetType();
102StringBuilderAssemblyName=newStringBuilder(type.Assembly
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 代码 安全性