Archiwum kategorii ‘.NET’

Uwierzytelnianie NTLM i Single Sign On: czyli jak w PHP zalogować się do ActiveDirectory bez znajomości loginu i hasła

czwartek, 14 Kwiecień 2011

Przeglądając gotowe biblioteki PHP do uwierzytelniania w domenie ActiveDirectory zauważyłem, że żadne z tych rozwiązań nie pozwala na zalogowanie użytkownika domenowego bez konieczności podania przez niego loginu i hasła.

Funkcjonalność automatycznego logowania do domeny wbudowana jest oczywiście tylko w w przeglądarce Internet Explorer, ale powiedzmy sobie szczerze: w dużych firmach i korporacjach jest to nadal jedyna słuszna aplikacja do surfowania po Int(ra|er)necie.

Co ciekawe, w innych językach programowania (Java, C#) nie ma najmniejszego problemu, by użytkownik domenowy mógł wejść poprzez Internet Explorer do chronionego serwisu, istnieje tam wiele gotowych rozwiązań operujących na uwierzytelnianiu NTLM.

Po dwóch dniach spędzonych na czytaniu dokumentacji Microsoftu, Samby, oraz po sniffingu sieciowym, udało mi się zaimplementować działające rozwiązanie.

W niniejszym artykule postaram się przybliżyć schemat automatycznego logowania skryptów PHP do domeny ActiveDirectory za pomocą… ataku Man-in-the-middle. (więcej…)

Obiektowe PHP: Implementacja getterów i setterów znanych z języka C#

środa, 13 Kwiecień 2011

Każdy, kto choć raz przyjrzał się językowi C#, mógł zauważyć, że posiada on możliwość deklarowania konkretnych getterów oraz setterów dla właściwości obiektu, np w taki sposób:

public class Person
{
    //default constructor 
    public Person()
        {
        }
 
    private string _Name;
    public string Name
    {
        //set the person name
        set { this._Name = value; }
        //get the person name 
        get { return this._Name; }
    }
}

O ile w języku PHP udostępniono zarządzanie magicznymi zmiennymi poprzez funkcje __get() oraz __set(), to jednak rozwiązanie to ma jedną wielką wadę. Zmienne magiczne nie są widoczne z poziomu kodu PHP (w ramach deklaracji klasy), ani z poziomu aplikacji IDE (do czasu aż zadeklaruje się je „wirtualnie” z poziomu komentarzy phpdoc).

Przedstawiam więc kolejną, mało znaną funkcjonalność języka PHP, która rozwiązuje wspomniany problem. Jest nią umagicznianie zadeklarowanych właściwości obiektu. (więcej…)

Ciasteczka HttpOnly oraz Secure, czyli zabezpieczenia których nie ma

czwartek, 7 Kwiecień 2011

Zgodnie z dokumentacją Microsoftu flaga HttpOnly przesłana w nagłówku HTTP Set-Cookie sprawia, że w przeglądarkach WWW obsługujących ten mechanizm skrypty JavaScript nie są w stanie odczytywać, ani modyfikować zawartości ciasteczka którego ten parametr dotyczył.

Podobnie działa mechanizm Secure, z tym że nie ukrywa on danych przed skryptami JS, lecz dotyczy rodzaju połączenia, przez które przesyłane jest ciasteczko. Jeśli zostało ono ustawione jako bezpieczne, przeglądarka WWW wyśle je do serwera jedynie wtedy, gdy połączenie jest szyfrowane (HTTPS).

Poniżej prezentuję prosty przykład w języku JavaScript łamiący częściowo te zabezpieczenia. (więcej…)