Действительно ли WriteableBitmap в Silverlight 4 препятствует законному междоменному доступу во имя DRM?

В этой ветке годичной давности объясняется, что WriteableBitmap заблокирует доступ для чтения когда какая-либо его часть поступает из внешнего домена - скажем, с бесплатного сервера изображений.

Далее уточняется, что это для «DRM». Я предполагаю, что есть большая угроза того, что кто-то напишет риппер фильмов в Silverlight, который включает в себя фильм из другого домена, а затем повторно захватит его... за исключением осознания того, что вы можете просто переписать чертов xap, когда он будет передан по сети, а затем это тот же домен! Но это ни здесь, ни там.

В любом случае, очевидно, я пытаюсь использовать WritableBitmap для экспорта снимка экрана текущей настройки пользователя; но меня остановила эта междоменная проблема.

Действительно ли нет поддерживаемого способа сделать это в последней версии Silverlight? Нет файла crossdomain.xml или clientaccesspolicy.xml? Разве это не нанесение вреда Silverlight — гигантский «иди нахуй», устанавливающий половинчатые контрольно-пропускные пункты безопасности, которые мешают разработчикам, но не останавливают злоумышленников?

Изменить: этот вопрос идентичен этот вопрос здесь.


person Tom Ritter    schedule 27.07.2010    source источник


Ответы (3)


Ваше мнение разделяют многие, многие разработчики, пытающиеся сделать это в законных целях. Есть несколько обходных путей, все они либо хакерские, либо причудливые. Но это, вероятно, лучший из тех, что я видел: Захват экрана в SIlverlight 4.0.

Просто прочитайте еще раз и убедитесь, что вы не ищете решение для crossdomain.xml. На этой странице есть еще несколько вариантов (опять же, ни одно решение не является «отличным»): http://betaforums.silverlight.net/forums/t/118030.aspx

Кроме того, не уверен, что это вариант, но ваше приложение как приложение OOB не будет ограничено проверками безопасности в ClientAccessPolicy.xml или CrossDomain.xml. Подходит ли вам вариант «Вне браузера»?


РЕДАКТИРОВАТЬ: После дальнейшего изучения сообщения и комментариев я считаю (Том, ​​пожалуйста, подтвердите это), что нет необходимости получать снимок экрана пользовательского экземпляра приложения SL, работающего на их собственной машине. (что-то вроде Поддержка клиентов в Silverlight займет уход очень хороший).

Скорее, это снимок экрана пользователя (так же, как PrtSc-ish). В данном случае это намного сложнее, но не невозможно. Руи показывает, как он это делает здесь, но он зависит от того, что компонент уже находится на компьютере пользователя. Джереми становится еще более креативным с Silverlight 4 Hack: используйте Native/Desktop CLR без COM-регистрации, что эффективно разрешит доступ.

person Todd Main    schedule 03.08.2010
comment
Наличие OOB не решает эту проблему; все, что он делает, это ослабляет ограничения, связанные с сокетами и разрешениями. - person Tom Ritter; 05.08.2010
comment
@ Том Риттер: я думаю, я запутался - как это не решает проблему? Я предполагаю, что я должен был сказать повышенное разрешение OOB. - person Todd Main; 05.08.2010
comment
Даже полный Trust OOB не отменяет возможности WriteableBitmap DRM Pixel. ClientAccessPolicy/CrossDomain не при чем — междоменный доступ к пикселям от них не зависит. - person Tom Ritter; 06.08.2010
comment
@Tom Ritter: Хорошо, основываясь на вашем ответе, я думаю, что, возможно, неправильно понял вашу потребность. См. редактирование выше. - person Todd Main; 07.08.2010

Это поведение WritableBitmap не имеет ничего общего с DRM и полностью связано с безопасностью. Если на снимке экрана, который вы пытаетесь сделать, показан элемент изображения с содержимым из другого домена, то в этом домене должен быть файл crossdomain.xml с соответствующими разрешениями. Вы можете связаться с владельцем домена и попросить его разместить crossromain.xml в корне своего домена.

В качестве альтернативы, приложение Full-Trust OOB должно сработать, поскольку оно не проверяет наличие файла crossdomain.xml.

Хорошо, если у вас есть ‹Image Source="http://crossdomain.com/someimage.jpg" /› в вашем визуальном дереве и вы пытаетесь создать из него WriteableBitmap, доступ к этому пикселю WriteableBitmap будет заблокирован, независимо от того, crossdomain.xml или нет. . (Позор вам майкрософт). Хорошие новости (вроде как) в том, что вы можете использовать следующий обходной путь: загрузить изображение с помощью WebClient; вызвать SetSource для изображения с потоком из обработчика OpenReadCompleted. Создайте свой WriteableBitmap и обратите внимание, что свойство Pixels больше не вызывает исключение безопасности. Далеко от идеала, но управляемо.

person Denis    schedule 04.08.2010
comment
В связанном потоке Silverlight MVP прямо говорит, что crossdomain.xml не отменяет ограничения. Вы проверили это и подтвердили, что он не прав? - person Tom Ritter; 04.08.2010

Как объяснено в идентичном вопросе единственный способ заставить silverlight получить содержимое из Writeable Bitmap без любого из следующего:

  • Вне браузера
  • Служба/код/приложение/корневой GAC, установленный на компьютере пользователя.
  • Повышенное доверие

заключается в том, чтобы проксировать содержимое и заставить Silverlight думать, что все это из одного и того же домена.

person Tom Ritter    schedule 09.08.2010