SharePoint 2007-RunWithElevatedPrivileges - pułapki korzystania z tego

Mam silne przeczucie, że korzystanie z SharePoint RunWithElevatedPrivileges powinno być unikane jak zaraza, ale muszę przekonać innych, dlaczego. Oto co mam.

  • wyświetla nowy wątek z podwyższonymi uprawnieniami
  • blokuje inne operacje dopóki przekazany delegat nie powróci
  • problemy z bezpieczeństwem (działa z wysokim poziomem uprawnień, być może przez użytkownika końcowego)
  • Inni?
Author: abatishchev, 2009-10-06

4 answers

Powody do podnoszenia dzielą się na dwie kategorie:

  1. Twój kod musi wykonywać operacje w SharePoint, do których bieżący użytkownik nie ma uprawnień. Należy to robić zawsze podczas pracy z zabezpieczeniami SharePoint, a nie jako środek "na wszelki wypadek", który wskazuje, że musisz lepiej zrozumieć swoją sytuację bezpieczeństwa.
  2. Twój kod musi uzyskać dostęp do zewnętrznych zasobów (system plików serwera, baza danych, udział plików, itp.), do których tożsamość puli aplikacji ma dostęp, ale obecny użytkownik nie.

Dla tych pierwszych, o wiele lepiej używać podszywania się pod spite. To ostatnie jest jedynym powodem, dla którego używam RWEP.

Dla jasności, RWEP nie tworzy nowego wątku. Zamiast tego używa API Win32, aby przywrócić tożsamość bieżącego wątku do tożsamości procesu (wyłączając podszywanie się), aby uruchomić podwyższony kod, a następnie ponownie włączyć podszywanie, aby wznowić pracę w imieniu bieżącego użytkownika. To ma kilka implikacje:

  1. RWEP nie robi nic, jeśli wątek nie jest podszywany, więc jest bezużyteczny w zadaniach timera, przepływach pracy Visual Studio, aplikacjach konsolowych i kodzie uruchamianym przez stsadm (odbiorniki funkcji).
  2. Dostęp do SharePoint, zakładając utworzenie nowego SPSite w swoim CodeToRunElevated, będzie wykonywany z prawami puli aplikacji (SHAREPOINT \ system). To konto będzie miało pełny dostęp do bieżącej aplikacji internetowej, ale nie powinno mieć uprawnień na poziomie gospodarstwa aby zmienić właściwości SPFarm lub wprowadzić zmiany w SSP.
  3. Używanie obiektów świadomych tożsamości (takich jak SPSite i jego dzieci) poza granicami wykonywania kodu CodeToRunElevated może spowodować naprawdę dziwne zachowanie i warunki rasowe. Dla wszystkich intencji i celów, Uznaj to za nieobsługiwane.

I jak powiedział Alex, dzieci SPSite dziedziczą swoje uprawnienia od SPSite, który z kolei ma swoje uprawnienia ustawione podczas jego tworzenia. Więc Spkontekst.Aktualne.Witryna nadal będzie zachowywać się z uprawnieniami bieżącego użytkownika, nawet jeśli odwołasz się do niego w swoim CodeToRunElevated. Zamiast tego musisz utworzyć i zużyć nowy SPSite w podwyższonym bloku.

Podsumowując: RWEP podszywa się pod pulę aplikacji poza SharePoint, spsite podszywa się pod pulę aplikacji wewnątrz SharePoint.

 15
Author: dahlbyk,
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
2009-10-06 19:01:31

1) znaczne wykorzystanie RWEP jest dobrym wskaźnikiem zapachu kodu.[2]} można go łatwo nadużywać bez zastanowienia, co prowadzi do poważnych problemów z bezpieczeństwem. Wielu deweloperów nie myśli o tym, co użytkownicy mogliby zrobić z mocą, którą pośrednio otrzymują "pod maską".

Tylko jeden przykład: ważne jest, aby wywołać ValidateFormDigest przed użyciem RWEP do zapobiegania złośliwym żądaniom na stronach aplikacji .


2) Obiekty SPWeb i SPSite muszą być stworzony w kontekście RWEP. jest to łatwe do zapomnienia dla początkujących programistów, co prowadzi do wielu frustracji.

To ograniczenie oznacza również, że wszystkie prace i wszystkie obiekty utworzone przez te obiekty muszą być użyte i zakończone przed końcem delegata RWEP. To kolejny częsty błąd.

Keith Dahlby napisał metody rozszerzenia , aby obejść te problemy, dając bardziej solidny i czytelny kod.

 4
Author: Alex Angas,
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
2009-10-06 15:21:08

RWEP, jak Wszystko inne, ma plusy i minusy.

Jeśli obawiasz się, że użytkownik końcowy uruchomi RWEP, prawdopodobnie masz już większy problem, ponieważ ten kod został już zainstalowany na GAC.

Czasami po prostu musisz się tego trzymać: rozważ użytkownika, który nie ma praw administratora, uruchamiającego obieg dokumentów. Po tym, jak ten użytkownik zatwierdzi (lub odrzuci, nie ma znaczenia), Twój silnik przepływu pracy powinien być w stanie na nowo zdefiniować uprawnienia SPListItem.

 2
Author: Rubens Farias,
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
2009-10-06 14:37:17

Używam go i uważam, że jest to bardzo przydatna funkcjonalność. Moim zdaniem, decyduję się pozwolić użytkownikowi uruchomić mój kod i mieć ten kod zrobić rzeczy, które użytkownik nie może normalnie zrobić. Możesz coś zablokować i nadal pozwolić użytkownikowi uzyskać do tego dostęp w bardzo kontrolowany sposób.

 0
Author: Chrisb,
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
2009-10-06 14:47:07