谈谈Silverlight的一个跨域安全考虑

在文档中看到Silverlight在设计的时候对网络安全方面做了很多考虑。但由于本人对安全方面并不是 特别懂,所以看得挺模糊的。最近和同事黄讨论了其中一些点,得到一些结论,和大家分享一下。

在文档中有这么一段话:

There are important security considerations before you allow Silverlight clients to access Web services in a cross-domain situation. Whenever you put a cross-domain policy file in place you should configure your Web server hosting the Web services to disable browser caching. This enables you to easily update the file or restrict access to your Web services if necessary. Once the cross-domain policy file is checked, it remains in effect for the browser session so the impact of non-caching to the end-user is minimal.

In addition, all Silverlight requests are sent with cookies and authentication. This means that if you have Web services that allow users to access private information, you should host these in a different domain than the Web services exposed to third-party callers. For example, you have a Web store hosted at http://www.tailspintoys.com. Your site allows customers to store billing information that includes credit card numbers. You should not expose a Web service that returns product inventory to third-party Silverlight clients at the same domain. Because cookies and authentication are sent with each message, if you host these Web services on the same domain, you have effectively given the third-party callers access to your customer's private billing information. In this example, your publicly exposed Web services could safely be hosted at http://services.tailspintoys.com, because this is a different domain. You must carefully consider who you have exposed Web services to, and what other Web services are located at that domain. Also, you should always keep your cross-domain policy file as restrictive as possible. For more information about exposing secure Web services, see Security Considerations for Service Access and Making a Service Available Across Domain Boundaries.

我对第二段做了个简单的翻译:

所有的sl请求都会将Cookie和身份验证信息连同发送。这就意味着如果你有一个Web服务,允许用户访 问隐私信息,那么你应该将这个web服务放置在其他的域下,和暴露给第三方调用者的web服务的域名区分 开。例如,如果你有一个网店放置在http://www.tailspintoys.com,你的网店允许客户存储交易的信息 ,其中包含了信用卡号码。那么你不应该将一个返回产品清单的web服务放在同个主机域下,然后暴露给 第三方的SL客户端。因为Cookie和身份验证信息会和请求连同发送,如果你将这些web服务放置在同个域 下的话,你就给了第三方的调用者一个很方便的途径来访问你的客户的私人交易信息。在这个例子中,你 暴露给第三方的web服务应该放置在http://services.tailspintoys.com。因为这是一个不同的主机域。 你必须非常小心的选择哪些服务可以公开,哪些服务应该部署在那个域下。

我们知道Cookie中有一个主机名的属性,对于只有对于同个主机域的请求,浏览器才会把Cookie连带 发送。SL也不例外。

假设这么一种场景:淘宝开放了一个Web服务,这个服务干什么我们并不关心。但是我们知道,如果你 想要你的Web服务被其他第三方的客户端调用,你必须在网站下放置一个特定的xml文件,我们称为"安全 策略配置"文件,Flash对应的是crossdomain.xml文件,Silverlight除了支持Flash的这个策略文件之外 自己也有一套策略配置,放在clientaccesspolicy.xml文件中。与Flash不同的是,SL只会从网站的根目 录下去寻找这个策略文件,也就是说即使你的web服务是放在/serivce/目录下的,那么SL客户端也会查找 "主机名/clientaccesspolicy.xml"这个文件是否存在(我不清楚为什么要这样设计)。因此淘宝为了让 他的Web服务被Silverlight支持,就必须在网站根目录下放置一个策略文件。

假设一个顾客在淘宝www.taobao.com 上面购买了一些东西,登录的会话验证信息可能会存放在Cookie 中,然后这个顾客又访问了一个恶意网站(www.eyi.com 当然域名没那么弱了^^),这个恶意网站会向淘 宝发送一些登录的HTTP请求。因为这个时候是属于跨域请求,所以Silverlight Runtime会去查找网站根 目录下有没有这个策略文件,发现有(并且通过了文件里面定义的访问权限的验证),那么这个请求就会 被允许,同时会把你在www.taobao.com 上面的Cookie也连带发送到淘宝系统那里,那么这个时候,这个 恶意网站是不是就在你不知情的情况下登录到了淘宝后台,然后这个时候他就可以执行一些你不期望的操 作了。

当然这个例子能不能work还有待商榷,只是通过这个例子想告诉大家的是,对于策略安全文件一定要 非常小心的配置好访问权限,暴露给第三方的Web服务(涉及到跨域策略安全的),最好放在一个隔离的 域下,这样可以降低安全风险。

不知道我这样理解有没有问题,如果不正确的话请纠正我~

时间: 2024-11-01 14:52:11

谈谈Silverlight的一个跨域安全考虑的相关文章

通过jquery的$.getJSON做一个跨域ajax请求试验_jquery

(主要是留个备用,怕以后再用到自己却忘记了,所以没有太多的解释,实在看不明白的话,照着我的代码,你也试一个吧) 我后端是用php的,以下代码主要实现的一个功能就是提供一个预约登记的接口,需要传入的数据分别有:用户姓名.联系电话和地址 /*预约登记 执行 接口*/ 复制代码 代码如下: /*预约登记 执行 接口*/ case "yuyue_interface": $name = trim($_GET['name']); $phone = trim($_GET['phone']); $ad

页面中iframe中嵌入一个跨域的页面,让这个页面按照嵌入的页面宽高大小显示的方式;iframe嵌套的页面不可以编辑的问题解决方案

<html> <head> <style> body { margin-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; overflow: hidden; } </style> </head> <body> <iframe src="http://gongkai.kaipuyun.cn/databaseInfo/index"

分析Silverlight跨域调用

分析Silverlight跨域调用 在silverlight开发的过程中不免要遇到跨域的问题,在这里以跨域调用Webservice为例子来分析一下跨域的问题.   先介绍一下我的测试项目,我用flash和silverlight一同来调用一个webservice,一个flash客户端,一个silverlight客户端,一个web项目来host flash和silverlight,再加上一个webservice端. flash发布到web项目的swf文件夹下.  web项目中的clienttestp

HTML5 window/iframe跨域传递消息 API介绍

window.postMessage允许多个 window/frame之间跨域传递数据和信息.下面为大家介绍下window.postMessage的工作原理,以及如何在FireFox,IE8+,Opera,Safari和Chrome中使用它   原文地址:HTML5′s window.postMessage API 在线示例:Using HTML5's window.postMessage(请打开控制台看日志) 我写了一个 MooTools 的插件"PostMessager"来封装wi

flash as3.0 跨域的解决办法

    Flash跨域问题相信不是所有人都可以遇到,如果你在本地发布,或者说直接Ctrl+Enter在FlashIDE中预览,是不会遇到跨域问题的,当然,跨域有个前提,那就是Flash不是完全独立的,与外界要做一些通信和交互,如果你的Flash是完全独立的文件,没有和外界发生任何交互和数据通信的话,那么你可以不考虑跨域问题,因为这也不存在跨域问题. 什么是跨域?     跨域简单的说就是访问其他域名的文件或资源,比如a.com的Flash去访问b.com的资源,那么就会引起跨域的问题,因为a.c

JavaScript两种跨域技术全面介绍_javascript技巧

这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进行多iframe或多窗口编程.以及Ajax编程时显得尤为重要.根据这个策略,在baidu.com下的页面中包含的JavaScript代码,不能访问在google.com域名下的页面内容:甚至不同的子域名之间的页面也不能通过JavaScript代码互相访问.对于Ajax的影响在于,通过XMLHttpRequest实现的Ajax请

跨域资源共享(CORS)安全性浅析

一.背景提起浏览器的同源策略,大家都很熟悉.不同域的客户端脚本不能读写 对方的资源. 但是实践中有一些场景需要跨域的读写,所以出现了一些hack的方式来跨域.比如在同域内做一个代理,JSON-P等.但这些方式都存在缺陷,无法完美的实现跨域读写.所以在XMLHttpRequest v2标准下,提出了CORS(Cross Origin Resourse-Sharing)的模型,试图提供安全方便的跨域读写资源.目前主流浏览器均支持CORS.二.技术原理CORS定义了两种跨域请求,简单跨域请求和非简单跨

[CORS:跨域资源共享] W3C的CORS Specification

随着Web开放的程度越来越高,通过浏览器跨域获取资源的需求已经变得非常普遍.在我看来,如果Web API不能针对浏览器提供跨域资源共享的能力,它甚至就不应该被称为Web API.从另一方面来看,浏览器作为进入Internet最大的入口,是各大IT公司的必争之地,所以浏览器市场出现了种类繁多.鱼龙混杂的局面.针对这两点,我们迫切需要一种能够被各个浏览器厂商共同遵循的标准来对跨域资源共享作出规范,这就是由W3C指定2的CORS(Cross-Origin Resource Sharing)规范. 目录

跨域访问-iframe之间通信

在项目中,经常会使用到 iframe,把其它域名的内容嵌入到页面中,这对于我们来说是个很方便的方法,但是,有时候,无可避免需要多个iframe间或者iframe与主页面之间进行通信,比如交换数据或者触发一系列事件. 本文将重点介绍如何在跨域的情况下进行iframe通信.首先,我们了解一下在同域情况下,iframe的通信方法. frame同域通信 假设,www.a.com域的main.jsp需要与子页面sub_1.jsp的互相访问,实现的功能如下: (1)main.jsp通过iframe加载sub