IIS üzerinde çalışan ASP.NET uygulamaları Code Access Secutiry (CAS) denilen bir mekanizma ile kısıtlanırlar. Bu güvenlik katmanı hangi class’ın hangi şartlarda çalışacağını, neler yapabileceğini belirler.
Genelde ASP.NET programcıları Partial Trust denen şeyi dikkate alarak uygulama geliştirmezler fakat Shared Hosting ortamlarında buna dikkat edilmesi gerekmektedir yoksa nereden fırlatıldığı bilinmez Security Exception’lar alırsınız.
Aslında Partial Trust’ı sadece Shared Hosting bazında düşünmemek lazım. Uygulamanız hacklendiğinde yada bir fake assembly yediğinde yapabileceklerini Partial Trus ile kısıtlamak programcının boynunun borcudur. Hele birde MaestroPanel gibi kritik seviyelerde çalışan uygulamalar için kaçınılmaz hareketlerdir.
Bu kadar vaaz verdikten sonra bütün bu kavramları bir çırpıda nasıl anlamsız hale getirebiliriz bir bakalım :)
IIS üzerinde .NET uygulamasının hangi CAS şartlarına göre çalışacağını belirten Trust Level denen bir olay vardır.
Full, Hight, Medium, Low, Minimal diye seviyelere ayırmış ve her seviyeninde kendine has hakları, hukukları vardır. Bu Trust Level seviyelerini kendiniz ayarlayabilir veya kıçınızdan trust level uydurabilirsiniz. Bunların hepsini
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config
klasöründe bulup değiştirebilirsiniz.
Dikkat edilmesi gereken bir husus’ da CAS dosyalarında değişiklik yaparken .NET’in versionlarının yanı sıra 32bit ve 64bit ayrımına da dikkat edilmesi gerektiğidir.
IIS üzerinde çalışan uygulamanız aynı anda hem .NET 2.0 hemde .NET 4.0 assembly’lerini isteyebilir ve bunlarda hem x86 hemde x64 olarak çalışabilir bu nedenle CAS’da veya Trust Level ayarında değişiklik yapacaksanız toplamında 4 kombinasyon içinde aynı ayarı yapmalısınız.
Örnekle pekiştirelim:
IIS üzerinde çalışan web sitenizin Trust Level’ini Full yapmak ve sorunsuz çalıştırmak için aşağıdaki komutları kullanmalısınız.
C:\Windows\System32\inetsrv\appcmd.exe set config "SITE_ISMI" -section:system.web/trust /level:"Full" /clr:4.0 /commit:webroot C:\Windows\SysWOW64\inetsrv\appcmd.exe set config "SITE_ISMI" -section:system.web/trust /level:"Full" /clr:4.0 /commit:webroot C:\Windows\System32\inetsrv\appcmd.exe set config "SITE_ISMI" -section:system.web/trust /level:"Full" /clr:2.0 /commit:webroot C:\Windows\SysWOW64\inetsrv\appcmd.exe set config "SITE_ISMI" -section:system.web/trust /level:"Full" /clr:2.0 /commit:webroot
Bu komutlar hem 32bit hemde 64bit çalışan assembly’ler için Trustl Level’i full yapar. Buradaki trick x64 alanı için SysWOW64 klasörünün içindeki appcmd.exe yi kullanmaya dikkat etmekdir. Diğer bir hususda clr parametresi. Bu parametre ile de .Net versonuna göre işlem yaptırıyoruz zaten 2 ve 4 değeri alıyor.
Uygulamanızın ne yaptığından eminseniz yani benim uygulamam sadece .NET 4.0 ve 32bit kullanır diyorsanız sadece tek bir komut da girebilirsiniz (Bu komut burada 2 satır oluyor) ama bunu yaptığınız taktirde Security Exception hala devam ediyorsa bu saydığımız kombinayonlardan birine erişmeye çalıtığındandır.
Kolay gelsin.Uygulamamda buna benzer bir hata alıyorum. Hatanın Friendly url ile bir ilgisi varmı sizce. Olayın içinden cıkamadım. Hosting firması ile görüştüm. Hostingin full trust desteği olan servere taşınmasından bahsettiler fakat sanırım buda bir güvenlik açığı sağlıyor.
Server Error in ‘/’ Application.
Security Exception
Description: The application attempted to perform an operation not allowed by the security policy. To grant this application the required permission please contact your system administrator or change the application’s trust level in the configuration file.
Exception Details: System.Security.SecurityException: Request for the permission of type ‘System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’ failed.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[SecurityException: Request for the permission of type ‘System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’ failed.]
System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal(String virtualPath, IPrincipal user, String verb) +42
Microsoft.AspNet.FriendlyUrls.Abstractions.UrlAuthorizationModuleWrapper.CheckUrlAccessForPrincipal(String virtualPath, IPrincipal user, String verb) +14
Microsoft.AspNet.FriendlyUrls.FriendlyUrlRoute.GetWebObjectFactory(HttpContextBase httpContext, String modifiedVirtualPath) +159
Microsoft.AspNet.FriendlyUrls.FriendlyUrlRoute.Resolve(HttpContextBase httpContext, IList`1 extensions, String virtualPathOverride, IFriendlyUrlRouteSupportFunctions supportFunctions) +220
Microsoft.AspNet.FriendlyUrls.FriendlyUrlRoute.Microsoft.AspNet.FriendlyUrls.Abstractions.IFriendlyUrlRouteSupportFunctions.Resolve(HttpContextBase httpContext, IList`1 extensions, String virtualPathOverride) +16
Microsoft.AspNet.FriendlyUrls.FriendlyUrlRoute.GetRouteData(HttpContextBase httpContext, String pathOverride, IFriendlyUrlRouteSupportFunctions supportFunctions) +140
Microsoft.AspNet.FriendlyUrls.FriendlyUrlRoute.GetRouteData(HttpContextBase httpContext, String pathOverride) +9
Microsoft.AspNet.FriendlyUrls.FriendlyUrlsModule.RedirectToFriendlyUrl(HttpContextBase httpContext, IFriendlyUrlRoute route, IVirtualPathUtility virtualPathUtility) +346
Microsoft.AspNet.FriendlyUrls.FriendlyUrlsModule.b__0(Object sender, EventArgs e) +171
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
Bu hoş anlatım için teşekkür ederim. Saatlerce aradım internette. Şuan sorunum çözüldü.
merhabalar kolay gelsin godaddy de bulunan web hosting içeresinde yer alan web sitemde plesk panelden CAS güven seviyesi full olduğu halde ve web config dosyamada kodu olduğu halde mail gönderim işlemlerinde Security Exception hatası alıyorum goaddy firması web config dosyanızda değişiklik yapmanız gerekiyor diyor bu konuda yardımcı olabilirmisiniz teşekkürler
Adamın dibisin
Hayat kurtaran paylaşım:)
Sırf bu işlem yüzünden sunucu değiştiren biriyim.
anlatımın için teşekkür ederim.
buradan yapıkredi bankasına sesleniyorum sisteminizi silin yeniden yazın.
Süpersiniz.Saatlerce aramıştım..Halloldu çok şükür..
Ya sana nasıl teşekkür etsem az. 3 gündür internette bu problemi arıyorum şu 4 satır kodu çözemedim. MaestroPanel’e buradan 3 günümü çaldığı için, ingilizce hocama da beni ingilizceden soğuttuğu için selamlar.
Teşekkür ederim paylaşımın için.
Bu arada MaestroPanel bunu otomatik yapıyordu ;) https://wiki.maestropanel.com/maestropanelde-asp-net-trust-level-ayari/
Teşekkürler bu link için. Problemin maestro’dan kaynaklı olduğunu hiç tahmin etmediğim için üstüne düşmemiştim. Bundan sonra daha dikkatli olacağım.
Merhaba hocam sunucu sirketiyle görüstüm sadece trust medium level desteklediklerini söylediler verdiginiz 4 komutta bulunan site ismi yerine proje dosyasının ismini mi yazmamız lazım
Mükemmelsin dostum! Bu gönderi bu aramada google da SPONSORLU’da çıkmalı.
Süpersin hocam her işin kolay gelsin.