Silverlight的HTML互操作性安全与离线应用
立即解锁
发布时间: 2025-08-26 01:40:53 阅读量: 4 订阅数: 20 

### Silverlight的HTML互操作性安全与离线应用
#### 1. Silverlight HTML互操作性安全
Silverlight的HTML互操作性功能带来了一些新的安全问题。特别是当Silverlight应用程序和托管网页由不同方开发时,存在Silverlight应用程序中的恶意代码篡改页面上其他HTML内容的风险,或者HTML页面中的JavaScript代码可能会向Silverlight应用程序传递恶意信息,诱使它执行错误操作。
为了限制Silverlight的HTML互操作性,可以在HTML入口页面设置以下两个参数:
- **enableHtmlAccess**:设置为`false`时,Silverlight应用程序将无法使用大多数HTML互操作性功能,比如`HtmlPage`类的`Document`、`Window`、`Plugin`和`BrowserInformation`属性(不过仍可调用`HtmlPage.PopupWindow()`方法)。通常情况下,`enableHtmlAccess`默认设置为`true`,需要手动将其关闭;但如果Silverlight应用程序和HTML入口页面位于不同域名下,`enableHtmlAccess`默认设置为`false`,可以手动将其开启以允许HTML互操作性。
- **allowHtmlPopupwindow**:设置为`false`时,Silverlight应用程序无法使用`HtmlPage.PopupWindow()`方法显示弹出窗口。默认情况下,当测试页面和Silverlight应用程序一起部署时,该参数为`true`;当Silverlight应用程序托管在不同域名下时,该参数为`false`。
以下是设置`enableHtmlAccess`和`allowHtmlPopupwindow`的示例代码:
```html
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2,"
type="application/x-silverlight-2" width="100%" height="100%">
<param name="enableHtmlAccess" value="false" />
<param name="allowHtmlPopupwindow" value="false" />
...
</object>
<iframe style="visibility:hidden;height:0;width:0;border:0px"></iframe>
</div>
```
Silverlight还能保护应用程序免受JavaScript代码的影响。不过,JavaScript代码只有在你明确将某些类和方法指定为可脚本化时才能与应用程序交互。一旦将某个方法指定为可脚本化,只要HTML入口页面和Silverlight应用程序一起部署,该方法就可供HTML入口页面使用。
如果HTML入口页面和Silverlight应用程序托管在不同域名下,Silverlight的限制会更严格,此时HTML页面将无法访问可脚本化的类和方法。可以通过在应用程序清单文件`AppManifest.xml`中设置`ExternalCallersFromCrossDomain`属性来覆盖此行为,确保可脚本化成员对任何HTML页面都可用,示例代码如下:
```xml
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
ExternalCallersFromsCrossDomain="ScriptableOnly" ...>
<Deployment.Parts>
...
</Deployment.Parts>
</Deployment>
```
使用此选项时需谨慎,因为可能会有未知人员在未经你同意的情况下,在其他服务器上创建托管你Silverlight应用程序的HTML页面。如果允许跨域访问可脚本化方法,任何人都可以随时使用任何信息调用这些方法。
#### 2. Silverlight离线应用概述
Silverlight应用程序的代码包含在XAP文件中,Silverlight浏览器插件从Web服务器下载该文件并在客户端执行。之后,代码会在本地计算机上运行,无需Web服务器再次参与。
这就引出了Silverlight离线应用的概念。用户访问网站下载并安装Silverlight应用程序后,该应用程序可以从开始菜单在独立窗口中启动。除了在单独窗口中运行外,离线应用程序的功能与托管在网页中的普通Silverlight应用程序几乎相同,还能在客户端计算机上下载并自动应用更新。
离线应用程序带来了两个新的可能性:
- **离线运行**:由于应用程序缓存在客户端计算机上,即使没有网络连接也能运行,对于网络连接不稳定的用户(如使用笔记本电脑的出差员工)非常有用。
- **提升信任权限**:离线应用程序可以以提升的信任级别安装,从而获得一些新功能,如自定义应用程序窗口、访问当前用户的文档以及运行已安装的COM组件。
#### 3. 理解离线应用支持
Silverlight离线应用程序并非真的不需要浏览器,而是隐藏了浏览器的存在。运行离线应用程序时,一个名为`sllauncher.exe`的Silverlight工具会创建一个独立窗口,其中包含一个浏览器控件。这个浏览器窗口被简化为一个基本框架,不包含标准的浏览器用户界面(如工具栏、收藏夹、导航按钮等)。
离线应用程序适用于所有支持Silverlight的平台,包括Windows和Mac计算机。
使用离线应用程序有以下几个原因:
- **获得桌面存在**:通过轻量级安装过程下载XAP文件并添加桌面和开始菜单快捷方式,方便用户直接启动应用程序,而无需打开浏览器并导航到相应URL。
- **允许离线运行**:普通Silverlight应用程序需要网络连接才能运行,而离线应用程序安装后会在本地永久缓存(除非用户手动移除)。
- **支持间歇性连接**:许多用户(特别是使用笔记本电脑通过无线连接访问互联网的用户)会遇到网络间歇性中断的情况。离线应用程序结合网络检测功能,可以在连接时调用Web服务获取更新数据和执行服务器操作,断开连接时仍能独立工作。
- **获得提升信任的功能**:虽然在浏览器内应用程序中也能获得提升信任的功能,但会面临一些严重的缺点。在大多数实际场景中,需要创建离线应用程序来利用这些提升信任的功能。
此外,离线应用程序与浏览器内应用程序的一个区别在于初始文件空间分配。普通浏览器内应用程序只有1MB的磁盘空间(可通过提示用户请求更多空间),而离线应用程序初始配额为25MB,在
0
0
复制全文
相关推荐










