Próba uzyskania dostępu przez przezroczystą metodę bezpieczeństwa X do krytycznej metody bezpieczeństwa Y nie powiodła się

Mam dość stabilną wersję aplikacji serwerowej, która jest wdrażana od prawie roku u kilkudziesięciu klientów.

Jeden nowy klient niedawno skonfigurował aplikację i otrzymuje następujący błąd:

System.MethodAccessException: Attempt by security transparent method [SomeMethod] aby uzyskać dostęp do metody krytycznej dla bezpieczeństwa [SomeOtherMethod] nie udało się.

SomeMethod i SomeOtherMethod są metodami w zespołach, które napisałem, które są zbudowane przeciwko . NET 4 i które działają wewnątrz usługi Windows. Jeśli to robi różnicę, to ktoś odwołuje się do typu z 3rd party assembly (EntLib 4.1) zbudowanego na bazie.NET 2.0. Patrząc na kod EntLib 4.1, widzę, że używają zarówno atrybutów SecurityTransparent, jak i APTC, ale to nigdy nie powodowało problemów u innych klientów.

[1]}te zespoły zostały zaktualizowane z. NET 2.0 CLR, ale dawno temu. Ten dokładny kod działa na innych klientów po prostu dobrze, a ja nie jestem jawnie używam atrybutu APTC ani nigdzie nie używam atrybutu SecurityCritical.

To prowadzi mnie do wniosku, że jest to problem z konfiguracją lub być może problem z łatką.NET Framework. Czy został wydany patch dla. NET, który spowodowałby tę przełomową zmianę? Czy istnieje jakieś ustawienie konfiguracyjne, w którym wymusza to tego typu sprawdzanie, które jest domyślnie wyłączone, ale które mój klient mógł włączyć?

Ostatnia uwaga. Mój serwis wykorzystuje SSRS RDLCs do generowania PDF. Ze względu na pewne zmiany w. Net 4, muszę zmusić usługę do korzystania ze starszych zasad bezpieczeństwa poprzez następujący config:
  <runtime>
    <NetFx40_LegacySecurityPolicy enabled="true" />
  </runtime>

Aby uzyskać więcej informacji na temat tego, dlaczego muszę to zrobić, zobacz ten post stackoverflow: Bardzo Wysokie zużycie pamięci w. NET 4.0

Ważne jest to, że robię to również u wszystkich innych klientów. Tylko ten klient ma problemy.
Author: Community, 2012-08-09

4 answers

Wzdychanie, wzorce i praktyki stosowane przez zespół Microsoft Patterns And Practices, który jest odpowiedzialny za Biblioteki korporacyjne, są godne ubolewania. Cóż, wyjątek jest dokładny, nie można nazwać metody, która jest ozdobiona jako "na pewno sprawdzę bezpieczeństwo" z kodu, który jest ozdobiony "Meh, nie sprawdzę bezpieczeństwa, więc nie przejmuj się wypalaniem cykli procesora, aby to sprawdzić". Które skaluje się zarówno w specyfikacji WYJĄTKÓW, jak i stosowanych w Javie. CAS jest niezwykle przydatny, ale diagnozowanie wyjątków jest poważnym bólem głowy i często wiąże się z kodem, którego nie posiadasz i nie możesz naprawić. Duży powód, dla którego został wycofany w. Net 4.

Redakcja skończona. Biorąc pod uwagę problem, musisz dowiedzieć się, dlaczego CAS jest egzekwowany tutaj. Najprostszym wyjaśnieniem tego jest to, że usługa nie działa w pełnym zaufaniu. Najprostszym wyjaśnieniem , że jest to, że Klient nie zainstalował usługi na lokalnym dysku twardym. Lub ogólnie działa kod w tryb don ' t-trust - it nawet na lokalnych zgromadzeniach, bardzo paranoiczny admin mógłby to preferować. To musi być skonfigurowane z Caspol.exe, narzędzie, którego opcje wiersza poleceń są tak tajemnicze jak CAS. Pot-strzelanie w nie zaufanej lokalizacji Wyjaśnienie, twój Klient musi uruchomić Caspol, jak pokazano w tym blogu post . Lub po prostu wdrożyć usługę lokalnie, więc domyślne "ufam Ci" ma zastosowanie.

Edycja w prawdziwym celu, jak odkrył OP: uważaj na alternatywny strumień danych , który jest dodawany do pliku, gdy jest pobierany z niezaufanego Internetu lub lokalizacji sieciowej. Plik otrzyma strumień o nazwie " Strefa.Identyfikator", który śledzi skąd pochodzi z wartością "ZoneId". To właśnie ta wartość nadpisuje zaufanie pochodzące z miejsca przechowywania. Zazwyczaj umieszczam go w strefie internetowej. Użyj Eksploratora, kliknij plik prawym przyciskiem myszy i kliknij "Odblokuj", aby usunąć ten strumień. Po upewnieniu się, że możesz zaufać plikowi:)

 21
Author: Hans Passant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-26 12:08:43

W przypadku, gdy pomaga innym, zamieszczam moje rozwiązanie tego problemu:

1) Na AssemblyInfo.cs, usunął / skomentował linię [assembly: SecurityTransparent].

2) klasa i metoda wykonująca rzeczywiste zadanie zostały oznaczone jako [SecuritySafeCritical], w moim przypadku nawiązanie połączenia sieciowego:

[SecuritySafeCritical]
public class NetworkConnection : IDisposable
{
    [SecuritySafeCritical]
    public NetworkConnection(string networkName, NetworkCredential credentials)
    {
        .............
    }
}

3) klasa i metoda rozmówcy były brane pod uwagę jako [SecurityCritical]:

[SecurityCritical]
public class DBF_DAO : AbstractDAO
{
    [SecurityCritical]
    public bool DBF_EsAccesoExclusivo(string pTabla, ref ArrayList exepciones)
    {
        ....
        using (new NetworkConnection(DBF_PATH, readCredentials))
        {
            ....
        }
    }
}
 10
Author: Jhollman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-22 06:18:04

Miałem do czynienia z podobnym problemem podczas uruchamiania pobranej próbki WCF z http://www.idesign.net / podczas korzystania z biblioteki ServiceModelEx. Skomentowałem poniższą linię w AssemblyInfo.cs w projekcie ServiceModelEx

//[assembly: AllowPartiallyTrustedCallers]
I zadziałało na mnie.
 8
Author: Hemendr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-30 16:34:58

W moim przypadku był to problem, gdy zarządzałem pakietami NuGet w rozwiązaniu jakiś pakiet nadpisuje System.Www.Wersja montażowa Mvc w projekcie strony głównej. Ustaw z powrotem do 4.0.0.0(miałem zainstalowany 5.0). Nie zmieniłem uwagi o zmianie, ponieważ Mvc v4. 0 został zainstalowany i dostępny przez GAC. Set back

 0
Author: wałdis iljuczonok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-06 09:32:56