http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx
一切都是临时的,beta2相对于beta1改了很多,不知道正式发布时是否还会改变。
翻译的作用是备忘。
Silverlight 2 beta 支持2种访问远程服务器的方式:
System.Net命名空间中的WebClient和HTTP类。这些类使用HTTP或者HTTPS访问。
System.Net.Sockets命名空间中的Socket类。这些类提供更低层次的socket接口,可以用在更普通的网络通讯应用中。
这两种情况都需要提供安全机制以防止silverlight程序发起未经允许的连接。潜在风险包括:
DOS攻击:大量的远程PC用来攻击一个特定的站点
DNS改写攻击:把受害站点的DNS该写为silverlight源站点,从而让silverlight访问非源站点
反向连接攻击:让用户的silverlight访问某个远程节点,从而攻击者可以通过此连接访问用户的私有网络(这个攻击的模式是,用户访问了一个恶意silverlight站点,下载了silverlight并运行,该silverlight建立一个到私有网络的连接,例如内部file server,从而实现偷窃内部file server数据的功能)
Silverlight设计出了防止以上的攻击之外,还立足于提供管理员更好的控制。
原有的设计是仅允许silverlight访问源站点。beta1的这个安全模型仅仅允许silverlight通过socket访问下载的那个站点。这个源站点可以是localhost,如果这个silverlight直接从文件中打开的话。
beta包含了跨域连接的支持从而允许访问非源站点。这个重要特性允许silverlight程序使用已有的web service。Silverlight 2 Runtime在允许一个网络连接之前,需要首先从该网站下载一个安全策略文件。这个安全策略文件仅影响WebClient和HTTP类的跨域网络访问。WebClient和HTTP类在访问源的时候,无须安全策略文件。
对于socket,这个安全策略系统不仅影响跨域访问,也影响源访问。即便是源访问,也需要安全策略。这和beta1不一样。beta1中源访问总是被允许的。
安全策略系统基础
Silverlight 存在2种安全策略文件:
Flash policy file - Adobe Flash所使用的crossdomain.xml文件。这个策略文件仅仅用于WebClient和HTTP类。
Silverlight policy file - 可以用来在Web/Socket两种。该文件和Flash策略文件有不同的格式。
在允许到某个网络资源的连接之前,Silverlight2 Runtime会试图从该网络资源下载一个安全策略文件。不同的访问方式有不同的下载方式。
如果连接是WEB跨域,Silverlight2 运行时使用HTTP协议下载安全策略文件。Silverlight2 运行时首先试图从目标域的根下载Silverlight策略文件clientaccesspolicy.xml,如果能获得这个文件(即便解析该文件出现错误),它也用该文件做跨域策略文件。如果找不到该文件,Silverlight运行时试图从目标域的根下载flash策略文件crossdomain.xml。这个flash策略文件必须允许连接所有域。
如果是socket连接(跨域或者源访问),Silverlight2运行时试图连接目标站点的943端口(固定端口)。如果可以建立,Silverlight运行时发送一个特殊的字符串到服务器以获得策略文件。Silverlight2运行时会等待目标站点返回Silverlight策略文件。如果返回了(即便解析出错),也会用作策略文件。
如果策略文件正确解析,并且保证了权限,连接会建立。否则,连接以及以后的连接均被阻止。
另一个socket连接的限制是服务器端口必须在4502-4534之内。如果服务器提供服务器的端口不在其内,可以用程序重定向(例如ssh)
为WebClient/HTTP部署安全策略文件,系统管理员需要配置web service,以便可以下载策略文件。
为socket部署安全策略文件,系统管理员需要配置一个单独的认证服务。
如下是一个开放socket 4502~4506端口的策略文件。必须listen在943端口。(这个问题很令人郁闷,这个绑定冲突怎么解决?)
 
  
    
      
        
  
        
      
    
  
如果发现943被bind,kill掉该process,启动自己的server,同时策略文件允许所有。