阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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:01674
用户头像

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

关注

评论

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

艺术生,我劝你Mac

zhoo299

Mac CG 艺术

完美兼容老项目!Dataway 4.1.6 返回结构的全面控制

哈库纳

spring Spring Boot Dataway Hasor

Vol.2 谷歌不只有搜索

pyfn2030

谷歌Google

Gartner 【RPA市场竞争格局】:中国厂商首次进入国际视野

人称T客

自己常用的一些快捷键 windows10

halapano

Windows技巧

Vol.5 Go初探,新手必看!

pyfn2030

编程语言 新手指南

《程序员的数学》笔记

Rex

读书笔记

Vol.4 了解一下渗透测试

pyfn2030

黑客 网络安全

说到做到

Yukun

拖延症

Dataway 4.1.5 以上版本升级指南

哈库纳

string StringBoot Dataway Hasor

无需代码!通过 Dataway 配置一个带有分页查询的接口

哈库纳

spring springboot Dataway Hasor

代码简洁之路 [持续更新]

hq

Java 大前端 编程习惯

计算机的时间

伴鱼技术团队

分布式 服务器 技术交流

绝了!Dataway让Spring Boot不再需要Controller、Service、DAO、Mapper

哈库纳

StringBoot DataQL

ARTS-WEEK01

子路无倦

ARTS 打卡计划

Dataway 整合 Swagger2,让 API 管理更顺畅

哈库纳

Spring Boot DataQL Dataway Hasor

Anaconda与虚拟环境

halapano

Python virtualenv Anaconda

使用SpreadJS 开发在线问卷系统,构筑CCP(云数据采集)平台

葡萄城技术团队

数据挖掘 大数据 SpreadJS CCP

【快点查查】微信小程序使用流程

tomatocc

系统服务化构建-两方OAuth

图南日晟

微服务 软件工程 身份认证 架构设计

Dataway 配置数据接口时和前端进行参数对接

哈库纳

Spring Boot DataQL Dataway Hasor

那些会阻碍程序员成长的细节[1]

MavenTalker

程序员 职业规划

AB 测试平台的设计与实现

伴鱼技术团队

架构 系统设计 后端 A/B

Wi-Fi p2p & ap 共存

贾献华

wifi p2p ap

Vol.6 几个数据库相关的词

pyfn2030

数据库 大数据 新手指南

码农远程办公指北

大伟

如何用一台电脑制作一部动画短片?

zhoo299

动画 CG

Vol.3 人工智能这么热,你必须知道一点儿!

pyfn2030

人工智能

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十)在项目中准备测试环境

编程道与术

Java 编程 软件测试 TDD 单元测试

免费领课的活动你错过了么?

池建强

极客时间

从 0 到 1 搭建技术中台之技术文化篇

伴鱼技术团队

企业文化 技术管理

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