帮助中心FAQ

ASP.NET运行模式的权限说明图:

ASP.NET的默认运行模式是FULL TRUST 级别,在该级别下.NET程序拥有极高的权限执行程序或者代码。但是让程序运行在该模式下是十分危险的,黑客可以轻易地利用你的程序进行提权。国外空间,比如GoDaddy通常会把ASP.NET代码执行权限控制在中等安全模式。我司决定将ASP.NET的运行模式调为中等信任级别。

 

中等安全模式会有哪些影响?

 

以下是在ASP.NET中等安全模式下曾经遇到过的一些问题:


1. 基于VirtualPathProvider的模板机制不能用,因为VirtualPathProvider至少需要运行在High模式。


2. BuildProvider不能用,意味着你想自己添加自己的语言实现也不能用了,不过大部分项目不会用到这么高级的东西。


3. CodeDomEmit不能用了,这下惨了,什么IocAOP,动态注入的高科技玩意儿,全都废了,这些不是基于CodeDom的就是基于Emit的。


4. 通过aspx页面接管文件下载也不行了,Response写文件流到客户端需要更高的代码执行权限。


5. 大文件上传也别想了,因为大文件上传万变不离HttpWorkRequst,获取HttpWorkRequst的代码需要FullTrust模式。


6. SQLite不能用了,因为中等安全模式下没有非托管代码调用权限,所以除了SQLite外,涉及到非托管代码调用的,也都废掉了。


所以,如果要考虑允许让用户把程序部署到中等安全模式下,那就越早做中等安全模式的兼容性测试越好。


因为很多不能用的东西,都是涉及到基础结构的。

 

比如,文件下载不能通过Response写文件流的方式,你的程序正巧又是这么做防盗链,咋办?

答:用.htaccess做伪静态。

 

中等信任级别的主要限制:

 

不能调用非托管代码
不能调用服务组件
不能写事件日志
不能访问 Microsoft 消息队列
文件访问仅限于当前应用程序目录

注册表访问是不允许的

 

如果因为调整了安全级别导致您的网站出现访问异常的问题,请根据信任级别的限制调整您的程序。

以下是判断程序是否运行在中等安全模式的代码:

1

2

3

if (SecurityManager.IsGranted(new AspNetHostingPermission(AspNetHostingPermissionLevel.Medium)))

{

}

 

如果有遇到不是必须执行的逻辑,比如获取程序内存占用率或者大文件上传,那就可以先判断下,再决定是否调用。