Silverlight 5 Beta In-Browser Elevated Trust

0 dakikada yazıldı

10033 defa okundu

Düzenle

Silverlight'ın masaüstündeki Elevated Trust özelliği duyurulduğundan beridir bu konuda çerçevesinde en çok sorulan soru "Acaba tarayıcı içerisinden de bu haklara sahip olabilir miyiz?" şeklindeydi. Özellikle AutomationFactory'yi herkes tarayıcıdan da kullanabilmek istiyordu. Tabi ki bu durum web ortamında uygulamalar için epey tehlikeli olabilir fakat eğer şirket için bir intranet uygulamasından bahsediyorsak iplleri biraz daha ele alarak bu tarz işlevsellikleri sağlamak da mümkün.

İşte tam da bu noktada Silverlight 5 Beta ile beraber In-Browser (Tarayıcı içi) Elevated-Trust özelliği geliyor. Gelin hangi şartlarda neyin nasıl çalışacağına bir göz atalım.

In-Browser Elevated Trust nasıl ayarlanır?

Her zaman olduğu gibi ilk yapmanız gereken tabi ki uygulamanın manifestinde Elevated-Trust çalışabilmesi ile ilgili değişiklikleri yapmak. Bunun için Visual Studio içerisinde projeye sağ tıklayarak Properties komutuyla ulaştığınız ekranlardaki kontrolleri de kullanabilirsiniz.

[OutOfBrowserSettings.xml]

  \<OutOfBrowserSettings.SecuritySettings>\     \<SecuritySettings ElevatedPermissions="Required" />\   \OutOfBrowserSettings.SecuritySettings\>

Bu işlemi tamamladıktan sonra basit bir Elevated Trust testi için aşağıdaki kodu uygulama yerleştirip önce tarayıcı dışında sonra da tarayıcı içinde kodun çalışıp çalışmadığına göz atalım.

[C#]

            dynamic WScript = AutomationFactory.CreateObject("WScript.Shell");\             WScript.Run(@"C:\Windows\notepad.exe", 1, true);

İlginç bir şekilde göreceksiniz ki kod hem tarayıcı içerisinde hem de dışında çalışacak. Yani bir anda tarayıcı içerisindeki uygulamamız da Elevated Trust oldu. Eh olay bu kadar mı? :) Tabi ki değil. Şu anda büyük ihtimal ile uygulamayı 127.0.0.1 localhost üzerinden çalıştırdığınız için herşey sorunsuz çalışıyor. Silverlight dosyasının bir sunucuya atıp remote download yaptığınız anda tarayıcı içerisindeki Elevated Trust ortadan kalkacaktır. Biraz önce karşılaştığımız durum aslında biz developerların debug hayatını kolaylaştırmak için yapılmış bir güzellik :)

[Registry.exe]

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Silverlight\AllowElevatedTrustAppsInBrowser (DWORD) 0×00000001

Bir uygulamanın tarayıcı içerisinde de Elevated Trust çalışabilmesi için yukarıdaki Registry kaydının hedef makineden yapılmış olması gerekiyor. Söz konusu kayıt bir GP ile de uygulanabilir. Bu kadarla bitmiyor, uygulamanın hedef makinede Trusted Publishers Certificate listesinde bulunan bir Code Signage Certificate ile imzalanmış olması gerekiyor.

Daha daha?

Registry'de kayıt olarak ekleyebileceğiniz iki ayar daha var aslında. Bunlardan ilki AllowInstallOfElevatedTrustApps şeklinde. Eğer bu şekilde bir DWORD'ü 0 değeri ile eklerseniz artık Elevated Turst uygulamalar kullanıcılar tarafından bilgisayarlarına yüklenemez. Fakat bu uygulamalar tarayıcı içerisinde Elevated Trust modunda çalışmaya devam edebilir. İkinci keyword ise AllowLaunchOfElevatedTrustApps.Tahmin edebileceğiniz gibi bu arkadaş ise hem tarayıcı içi hem de dışı tüm Elevated Trust'ların deaktif olmasını sağlayabiliyor. Bu senaryoda kullanıcı bilgisayarına Elevated Turst uygulama yüklese de uygulama normal modda çalışıyor.

Peki eksik birşey var mı?

Evet :) SL5 Beta ile beraber yeni gelen Window sınıfı sadece Out-Of-Browser Elevated Trust'ta çalışabiliyor. In-Browser uygulama Elevated Trust olsa da Window sınıfını kullanma şansı yok.

Son bir ekleme daha... Eğer uygulamanız sadece tarayıcı içerisinde Elevated Trust çalışsın istiyorsanız ve varsayılan "Install...." context menüsünün gözükmemesini istiyorsanız bunu projenin OutOfBrowserSettings özelliklerinden ayarlayabileceğinizi unutmayın ;)

[OutOfBrowserSettings.xml]

\"SilverlightApplication9 Application" \                       EnableGPUAcceleration="False" \                       ShowInstallMenuItem="False"\>\   \<OutOfBrowserSettings.Blurb>SilverlightApplication9 \ Application on your desktop; at home, at work or on the go.\ \\   \\     \"SilverlightApplication9 Application" /\>\   \\   \\     \"Required" /\>\   \\   \\ \\>

Hepinize kolay gelsin ;)