Security Briefs...小心完全信任的代码
http://tech.ddvip.com 2006年07月20日 社区交流
本文详细介绍Security Briefs...小心完全信任的代码
大多数的托管应用程序都以完全信任环境下运行。然而,根据我自己的经验,在给那些经验丰富的开发人员讲授 .NET 安全问题的时候,我发现他们大多数 人都没有理解完全信任代码的真正含义。我收集了很多例子,在这些例子中,完全信任的代码可以绕过通用语言运行时(CLR)的安全特性。 每个例子都以一个提问开始,而每个问题的答案似乎都显而易见。
CLR 是否会在运行以前检查所有的代码?
很多CLR的安全特性是基于类型安全的。以一个简单的包含私有成员的类为例。CLR 会在运行时限制对私有成员的访问。但是,这 只有在使用合法手段进行访问时才成立。考虑如下非托管 C++ 类定义:class DiskQuota {
private:
long MinBytes;
long MaxBytes;
};
我之所以要在这里选择非托管 C++,是因为它将示范当类型系统被破坏时,下面这段程序是如何被利用进行类型诈骗的:
void EvilCode(DiskQuota* pdq) {
// use pointer arithmetic to index
// into the object wherever we like!
((long*)pdq)[1] = MAX_LONG;
}通过使用指针和不安全的强制类型转换,攻击者可以访问甚至修改某个类的私有成员。在非托管代码中,运行时没有提供针对这方面的保护 。然而,CLR 被设计成能在 JIT 编译期间(在此特殊情况下的不安全指针运算)探测到这种滥用类型的行为并产生一个异常。缓冲区溢出是另外一个 违反类型系统的例子,它会导致令人厌恶的安全漏洞。CLR 通过保证所有代码的类型安全来封堵这些漏洞,是这样吗?
是的,除非你搬起石头砸自己的脚,盲目信任这些程序集。任何程序集都可以用一个标志来标记自身,技术上称作许可请求,它告诉 CLR 跳过对 代码的安全检查。下面是一个 C# 例子:
作者:红裤子 责编:豆豆技术应用
正在加载评论...
- VC/VC++按钮设计专题
- VC/VC++ 菜单专题
- VC/VC++ 工具条专题
- VC/VC++ 对话框教程
- VC/VC++ 报表教程
- VC/VC++ 控件
- VC/VC++ GDI
- Visual Studio 2008
- VC/VC++ MFC教程
- VC/VC++ QQ
- VC/VC++ Socket编程
- VC/VC++ 钩子编程
- TangramMini组件应用教程
- VC/VC++ 窗体
- VC/VC++ ADO 教程
- Windows CE 教程
- VC/VC++ DLL(动态链接库)编程
- VC/VC++ PDFlib
- VC与MATLAB编程
- VC/VC++ DirectShow 教程
- VC++入门视频教程
- VC/VC++ COM组件设计与应用
- VC/VC++ ATL
- VC/VC++ WTL
- VC/VC++ 定制调试诊断工具和程序
- VC/VC++ 进程
- VC/VC++ Win32
- VC/VC++ WMI
- VC/VC++ 消息
- 更多VC/VC++专题……