写点什么

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

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

关注

评论

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

AI 算法在视频可分级编码中的应用

融云 RongCloud

人工智能 音视频 编解码

语聊房高质量音乐伴奏的实现

融云 RongCloud

语聊房 音乐播放

活动日程首公布|Apache ShardingSphere Dev Meetup 亮点新揭秘

SphereEx

ShardingJDBC ShardingSphere 技术沙龙 SphereEx

crm软件有哪些比较好?国内目前好用的crm系统推荐!

低代码小观

CRM 管理系统 企业管理系统 CRM系统 客户关系管理系统

别看是Java基础,很多人已入坑,java技术栈

Java 程序员 后端

糟糕程序员的20个坏习惯

Kaito

架构 程序人生 后端 编程修养

浅谈微信朋友圈架构设计

张平

架构实战营

优先队列一些记录以及解题思路

数据结构 Go 语言 优先队列

利用多condition动态管理池化的异步资源背景

Java 后端

利用这份文档,我成功定位阿里P6,却拿着P7的工资

Java 程序员 后端

字节Android Native Crash治理之Memory Corruption工具原理与实践

字节跳动终端技术

字节跳动 Android; 火山引擎

10月书讯 | 跟着泰拉去冒险

图灵教育

编程 程序员 书单

利用碎片化的时间逆袭进百度,我的面试经历你敢听吗?

Java 程序员 后端

GaussDB (for Cassandra) 数据库治理:大key与热key问题的检测与解决

华为云开发者联盟

数据库 分布式数据库 key GaussDB (for Cassandra) 数据库治理

BoCloud博云完成 E 轮融资

BoCloud博云

云计算 云原生 博云

双11大促 | 消息推送资源包6折购!一键集成华为、小米等多厂商推送通道

蚂蚁集团移动开发平台 mPaaS

消息推送 push mPaaS 双11 促销

判断对象是否已死分析总结——JVM系列,让人茅塞顿开

Java 程序员 后端

到了2020年,技术水平到底需要达到怎样的程度才能成为顶级的阿里P8架构师

Java 程序员 后端

ironSource现已支持自定义广告网络

【Quarkus技术系列】「云原生架构体系」打造基于Quarkus的云原生微服务框架实践

码界西柚

云原生 Quarkus 原生云 11月日更

开源应用中心|Discuz!X全新PC社区体验,多种场景一站解决

Discuz! 开源社区 Discuz

彻底理解 AQS我是懂了,你呢?

何小事儿

Java 多线程 并发

可观测性架构实践

郑印

hadoop nameNode/datanode 稳定性&性能改进点

Clarke

如何 30 分钟搭建一个语聊房

融云 RongCloud

DDD战术设计实践

郑印

DDD

揭秘 MatrixDB 数据库内核技术,可编程的数据库!

YMatrix 超融合数据库

数据库 时序数据库 分布式时序数据库 MatrixDB 超融合时序数据库

工具:Juypter Notebook

正向成长

Jupyter Notebook

【架构设计总结】

Ryoma

JavaScript 解构赋值 5 个常见场景和实例

devpoint

JavaScript 大前端 ES6 11月日更

FabEdge 和 SuperEdge 联合在边缘 K8s 集群支持原生 Service 云边互访和 PodIP 直通

BoCloud博云

云原生 边缘计算 superedge FabEdge

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