写点什么

Silverlight 开发中的代码安全性

  • 2007-10-23
  • 本文字数:1095 字

    阅读完需:约 4 分钟

在 Silverlight 发布时,微软宣称它将是一个完全跨平台、跨浏览器的下一代富客户端开发技术工具。但在使用绚丽功能的同时,很多人会思考 Silverlight 是否能够一如既往地实现不同平台间托管代码执行的安全性?答案是“除了安全,您没有别的选择”。

.NET Framework 提供了一个新的安全方式——代码访问安全(CAS:Code Access Security),通过 Stack Walk 检查、Permission(/set) 和 Security Policy 等一些措施我们可以保证不仅只有某些角色的人可以访问某些功能(也就是常说的 RBS:Role Based Security),就连哪些代码可以访问何种资源也可以有效管理。

Silverlight 推出后很多人更多关心的是它绚丽的 UI 效果和通过一个小小的 CoreCLR 就可以在多个平台运行的能力,但当我们尝试套用以往 CAS 的办法定义访问安全性的时候却发现无从下手,原因在于 SL 采用了所谓的“透明安全模型”(transparency model),它将代码分成两种:transparent Code 和 critical Code。前者是 SL 开发人员编写的应用代码,在用户态执行,执行主体是当前这个用户,而执行的访问控制设置为不受限;后者是 CoreCLR 在核心态执行的,它需要和具体的操作系统交互,完成例如文件访问、显卡调用等工作。在 CoreCLR 中两个代码可能保存在同一个 Assembly 中,但一个方法内部只能有唯一一类代码,而且 transparent Code 不能直接访问 critical Code。

因此,在 SL 开发中,我们能编写的代码只能是满足下述 transparent Code 要求的内容:

  • 隐式满足 LinkDemand,即整个调用栈的所有代码都必须是 transparent Code;
  • 不需执行 CAS 的断言(Assert);
  • 全部代码都是可验证的;
  • 不可以通过 Native Call 或 P/Invoke 调用本地资源,一方面为了安全,另一方面因为不同平台的本地调用方式不同;
  • 不可以直接访问 critical code。

这样您可能觉得 SL 开发限制很大,比如建立一个文件这种操作在应用中非常普遍,为了实现这个目的,CoreCLR 提供了一个中间过渡——IsolatedStorage。某种意义上讲,它是 SL 开发人员所能看到的逻辑运行平台,无论是文件、设备还是进程之类的信息都只能通过这个中间机制访问,而严格的检查也会“透明”的在这个中间机制完成。这么做有什么益处呢?很多。因为这一层把很多 Best Practice 强制实施了,例如:

  • 打开一个文件的时候,文件名称是否有效,是否存在潜在的缓冲区溢出等危险,当前用户是否可以执行这个文件打开操作等;
  • 访问一个 URL 的时候,这个 URL 是否会 Traverse up,是否可以遍历到高层目录。

总体上通过 IsolatedStorage,把很多已知的代码安全访问检查全部在 CoreCLR 平台一级内置了,开发人员可以通过这种“与生俱来”的安全性相对放心地开发自己的上层应用。

2007-10-23 19:011127
用户头像

发布了 61 篇内容, 共 14.2 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

SpreadJS 纯前端表格控件应用案例:Teammark知识管理库

葡萄城技术团队

SpreadJS

打开 政务上链 应用场景

CECBC

区块链 数字身份 政务

第十二周作业

赵龙

架构师训练营第十二周总结

R20114

非传统的“易观”,和他的技术驱动之路

易观大数据

Android 中的特殊攻击面(一)——邪恶的对话框

OPPO安全

android 安全攻防 安全

大数据应用

GalaxyCreater

大数据

释放数据价值:DAYU数据运营新能力解读

华为云开发者联盟

大数据 数字化转型 华为云 代码原理 数据运营

大数据作用

纯纯

为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我明白了

Java迁哥

Android中的特殊攻击面(二)——危险的deeplink

OPPO安全

android 安全攻防 安全

阿里巴巴Java开发手册-日志规约

魏杰

隐秘的MySQL类型转换

架构精进之路

MySQL

第 0 期架构师训练营第 7 周作业 2 ----总结

fujin

【架构师训练营】第 12 周作业

花生无翼

后疫情时代 数字经济如何大显身手

CECBC

疫情 数字经济 数字技术

架构师课程第十二周总结

dongge

第 0 期架构师训练营第 7 周作业 1

fujin

Android的特殊攻击面(三)——隐蔽的call函数

OPPO安全

android 安全攻防 安全 函数

第十二周学习总结

赵龙

第十二周总结

Linuxer

区块链技术创新应用势在必行 食品药品开启全链条溯源时代

CECBC

区块链 溯源 药品

大数据

GalaxyCreater

大数据

大数据总结

周冬辉

大数据

如何判断程序员的代码是否优美?

Garfield

代码质量 代码 代码优化 代码重构

超声大数据应用

周冬辉

大数据

前端源码宝库

InfoQ_34a83d636158

week12

强哥

极客大学架构师训练营

week12 总结

雪涛公子

大数据简介&架构(一)

dony.zhang

大数据 hdfs hive YARN MAPRED

week12 作业

雪涛公子

Silverlight开发中的代码安全性_.NET_王翔_InfoQ精选文章