2009-07-18 16 views
6

Używam VSTS 2008 + .Net 2.0 + C#. I po analizie przeprowadzam analizę kodu. Mam następujące mylące ostrzeżenie o zabezpieczeniach. Oto ostrzeżenie i związany z nim kod, wszelkie pomysły, co jest nie tak? Jeśli jest ostrzeżenie o zabezpieczeniach, jak to naprawić?co oznacza to ostrzeżenie o zabezpieczeniach (klasa .Net Process)?

System.Diagnostics.Process myProcess = new System.Diagnostics.Process(); 
myProcess.StartInfo.FileName = "IExplore.exe"; 
myProcess.StartInfo.Arguments = @"default.html"; 
myProcess.StartInfo.Verb = "runas"; 
myProcess.Start(); 

ostrzeżenie: CA2122: Microsoft.Security: "TestHtml() nazywa się 'Process.Start()', która ma LinkDemand. Wykonując to połączenie, "Process.Start()" jest pośrednio narażone na kod użytkownika. Zapoznaj się z poniższym stosem wywołań, który może narazić sposób na obejście zabezpieczeń:

Odpowiedz

11

Twoja metoda wywołuje funkcję Foo, która wywołuje funkcję Process.Start, która jest chroniona przez żądanie połączenia dla Full Trust. Aby uniknąć problemu, o którym ostrzega Cię FxCop, powinieneś dodać żądanie połączenia lub pełne żądanie dla tych samych uprawnień do swojej metody.

można naprawić poprzez dodanie do swojej metody

[PermissionSetAttribute(SecurityAction.LinkDemand, Name="FullTrust")] 

Zobacz http://msdn.microsoft.com/en-us/library/970x52db.aspx

+0

Dzięki, ale Twój kod ma budować błąd. Błąd Nazwa "Prawda" nie istnieje w bieżącym kontekście. Jakieś pomysły? Używam .Net 2.0 i .Net 2.0 nie obsługuje go? – George2

+0

Witam serdecznie, mam kilka nowych pomysłów i myślę, że to nie dziura w bezpieczeństwie. Załóżmy, że metoda Foo wywołuje wywołania TestHtml i TestHtml Process.Start. Nawet jeśli TestHtml nie jest włączony w LinkDemand, proces Sice Process.Start jest włączony z LinkDemand, zawsze będzie sprawdzał uprawnienia TestHtml (TestHtml jest bezpośrednim dzwoniącym). Więc nawet jeśli Foo nie ma wystarczających uprawnień, wywołanie z TestHtml do Process.Start zakończy się niepowodzeniem. Myślę więc, że nie ma problemów z bezpieczeństwem. Wszelkie komentarze? – George2

+1

@George, właśnie zgaduję, ale lepiej byłoby sprawdzić wymagania bezpieczeństwa tak wcześnie, jak to możliwe, jeśli TestHtml zmieniłby stan dowolnego zastosowania przed niepowodzeniem. – sisve

1
+0

Dzięki Kb, dokumenty, które polecasz, są bardzo pomocne. Chcę potwierdzić, czy moje zrozumienie jest prawidłowe. Myślę, że główną przyczyną jest Process.Start potrzebuje żądania połączenia (sprawdzanie uprawnień dla natychmiastowego dzwoniącego), ale metoda, którą zaimplementowałem w TestHtml, nie sprawdza uprawnień dla bezpośredniego dzwoniącego, więc istnieje luka w zabezpieczeniach, której bezpośredni rozmówca TestHtml może mieć za mało pozwolenie, czy to prawidłowe zrozumienie? – George2

+1

@ George2: Jak rozumiem, masz rację. Proces.Start zadeklarował sprawdzenie bezpieczeństwa. Dzwoniący musi zadeklarować tę samą kontrolę bezpieczeństwa lub upewnić się, że zabezpieczenia nie zostaną naruszone (a następnie zignorować czek). –

+0

Dzięki Kb, mam kilka nowych pomysłów i myślę, że to nie dziura w bezpieczeństwie. Załóżmy, że metoda Foo wywołuje wywołania TestHtml i TestHtml Process.Start. Nawet jeśli TestHtml nie jest włączony w LinkDemand, proces Sice Process.Start jest włączony z LinkDemand, zawsze będzie sprawdzał uprawnienia TestHtml (TestHtml jest bezpośrednim dzwoniącym). Więc nawet jeśli Foo nie ma wystarczających uprawnień, wywołanie z TestHtml do Process.Start zakończy się niepowodzeniem. Myślę więc, że nie ma problemów z bezpieczeństwem. Wszelkie komentarze? – George2