4

一年前的这个线程中,它解释说当它的任何部分来自外部域时, WriteableBitmap将阻止读取访问 - 例如免费图像服务器。

进一步详细说明这是针对“DRM”的。我猜有人在 Silverlight 中编写一个电影开膛手,其中包含来自另一个域的电影然后重新捕获它,这是一个很大的威胁......除了意识到你可以重写该血腥的 xap,因为它从电线上下来,然后同域!但这既不是这里也不是那里。

无论如何,显然我正在尝试使用 WritableBitmap 来导出用户当前设置的屏幕截图;但我被这个跨域问题阻止了。

在最新版本的 Silverlight 中真的没有支持的方法吗?没有 crossdomain.xml 或 clientaccesspolicy.xml?这对 Silverlight 来说不是很严重吗?一个巨大的“Screw You”,半心半意地设置安全路障,阻碍开发人员但不能阻止攻击者?

编辑:这个问题与这里的这个问题相同。

4

3 回答 3

5

许多、许多出于合法目的尝试这样做的开发人员都分享了您的观点。那里有一些变通方法,所有这些都是hacky或bizarro。但这可能是我见过的最好的:Screen Capture in SIlverlight 4.0

再次阅读,发现您不是在寻找 crossdomain.xml 解决方案。此页面还有一些其他选项(同样,没有“很好”的解决方案):http ://betaforums.silverlight.net/forums/t/118030.aspx

此外,不确定这是否是一个选项,但您的应用程序作为 OOB 应用程序将不限于 ClientAccessPolicy.xml 或 CrossDomain.xml 中的安全检查。浏览器外是您的选择吗?


编辑: 在进一步审查帖子和评论后,我相信(汤姆,请确认这一点)不需要获取用户在他们自己的盒子上运行的 SL 应用程序实例的屏幕截图(类似于客户支持中的Silverlight会处理得很好)。

相反,它是拍摄用户屏幕的照片(与PrtSc-ish 相同)。在这种情况下,这要困难得多,但并非不可能。Rui在这里展示了他是如何做到的,但它依赖于用户机器上已经存在的组件。Jeremy get 的 Silverlight 4 Hack 更有创意:使用 Native/Desktop CLR without COM Registration,这将有效地允许访问。

于 2010-08-03T02:01:22.247 回答
-1

这种 WritableBitmap 行为与 DRM 无关,而与安全性有关。如果您尝试截取的屏幕截图显示包含来自不同域的内容的图像元素,则该域必须具有具有适当权限的 crossdomain.xml 文件。您可以联系域所有者并要求他们将 crossromain.xml 放在其域的根目录中。

或者,Full-Trust OOB 应用程序应该可以解决问题,因为它不检查 crossdomain.xml。

好的,如果您的可视化树中有 <Image Source="http://crossdomain.com/someimage.jpg" /> 并尝试从中创建 WriteableBitmap,则 WriteableBitmap 的像素访问将被锁定,无论是否为 crossdomain.xml . (微软为你感到羞耻)。好消息(排序)是,您可以使用以下解决方法:使用 WebClient 加载图像;使用来自 OpenReadCompleted 处理程序的流对图像调用 SetSource。创建您的 WriteableBitmap 并注意 Pixels 属性如何不再引发安全异常。远非理想,但可以管理。

于 2010-08-04T00:02:11.813 回答
-4

正如在相同问题中所解释的那样,获得 silverlight 的唯一方法是允许您从可写位图中获取内容,而无需执行以下任何操作:

  • 浏览器外
  • 服务/代码/应用程序/根 GAC 以其他方式安装在用户的计算机上
  • 提升信任度

是代理内容并欺骗 Silverlight 使其认为它们都来自同一个域

于 2010-08-09T17:43:41.220 回答