RSS Feed
  1. phpMyAdmin – wkurzające 1440 sekund

    Kwiecień 15, 2012 by luki

    Też Cię wkurza 1440 sekund limitu na bycie zalogowanym? Po tym czasie znów trzeba wpisać dane i akurat wtedy, gdy szybko musimy coś zmienić, dodać…

    Ustawmy nowy czas na przykładowo jedną godzinę (3600 sekund).

    Po pierwsze aktualizacja oprogramowania. W tej chwili dostępna jest stabilna wersja 3.4.10.1 – zachęcam do pobrania.

    Po drugie znajdujemy plik config.default.php (domyślnie pod ścieżką phpMyAdmin\libraries\), ignorujemy duży napis „don’t edit” i ustawiamy nowy czas w sekundach przy zmiennej $cfg['LoginCookieValidity'].

    Taki sam czas ustawiamy przy zmiennej session.gc_maxlifetime w pliku php.ini (funkcja phpinfo() pomoże nam namierzyć ten plik).

    Gotowe! O jeden problem w życiu mniej :)


  2. NetBeans: Wyrażenia regularne

    Kwiecień 10, 2012 by luki

    Czasami trzeba skorzystać z funkcji „zamień” (CTRL+H) w NetBeans i naprawdę warto pamiętać o możliwości użycia wyrażeń regularnych. Pokażę na przykładzie, jak bardzo szerokie daje to możliwości i jak bardzo potrafi ułatwić* i przede wszystkim skrócić czas potrzebny na uzyskanie oczekiwanego efektu. * – z tym może być różnie, bo bez wprawy czasami trzeba trochę „pomóżdżyć”, aby wyczarować odpowiednie wyrażenie regularne. Z czasem oczywiście wszystko przychodzi łatwiej.

    Znajdź i zamień w NetBeans

    Znajdź i zamień w NetBeans

    Zastosowanie wyrażeń regularnych zaprezentuję na przykładzie z życia wziętym.

    Parsowanie bilingu połączeń telefonicznych

    W celu policzenia kosztów za konkretne połączenia w wyznaczonym czasie stworzyłem sobie prosty parser.
    Parser otrzymuje dane zawsze w tym samym formacie, odczytuje je odpowiednio, a później pozwala mi zsumować np. połączenia z numerem XXX YYY ZZZ w miesiącu marzec. Jednak kiedyś zdarzyło się, że przez kilka dni nie mogłem pobrać bilingu, więc otrzymałem spis połączeń prosto od BOK-u. Lista od BOK-u miała inny format niż ten, do którego dostosowałem swój parser.

    Domyślny format danych:
    2012-03-31       17:00            Telefoniczne     XXXXXXXXX        00:08:42         0,27 zł

    Format, który otrzymałem od BOK-u:
    2012-01-14 19:36:00 XXXXXXXXX PLAY Rozmowa 00:00:53 (godz:min:sec) 0.71

    Kawałek tego trefnego bilingu, który wymaga poprawienia możecie znaleźć tutaj. Polecam pobrać i przetestować własnoręcznie poniższe wyrażenia.

    Powyżej wkleiłem przykładowe wpisy z  bilingów. Jeden wpis w bilingu odpowiada jednemu połączeniu telefonicznemu lub SMS. Jak widać powyższe różnią się od siebie. Zdecydowanie biling od BOK-u ma różnice, które muszę poprawić, jeśli chcę, aby mój parser przyjął biling:

    1. godzina połączenia zawiera sekundy (19:36:00) – trzeba usunąć
    2.  zamiast napisu Rozmowa powinno być Telefoniczne
    3. zawiera niepotrzebne oznaczenie operatora PLAY - trzeba usunąć
    4. trzeba przestawić numer trochę dalej
    5. niepotrzebny fragment (godz:min:sec)
    6. kwota w złym formacie 0.71 zamiast 0,71 zł

    Jak poprawić różnice?

    Wszystkie różnice można załatwić wyrażeniami regularnymi w programie NetBeans. Czyli używamy skrótu CTRL+H, zaznaczamy „Regular Expressions”, podajemy wyrażenie, które ma znaleźć pasujące rzeczy do wzorca i podajemy na co chcemy podmienić. Pokażę, jak to zrobić.
    1. Usuniemy :00 z godziny połączenia. Tutaj jest mały problem, bo jak widać zapis :XX (gdzie XX to dwie cyfry) występuje w dwóch miejscach, a my chcemy usunąć ten zapis tylko z pierwszego. Jak odróżnić oba zapisy od siebie, tak aby wyrażenie złapało nam tylko pierwszy?
    [:][\digits]{2}[ ]{1}([^(])
    Powyższe wyrażenie znajdzie nam ciągi składające się kolejne z : dwóch cyfr 1 spacji oraz dowolnego znaku nie będącego lewym nawiasem. Proste, prawda? Jest tylko jeden mały szkopuł. Ostatni zaznaczony znak to pierwsza cyfra numeru telefonu, której nie chcemy skasować. Jak „oszczędzić” tę cyfrę? Bardzo prosto. W wyrażeniu użyliśmy ( ) to zaznaczenia ostatniej części wyrażenia, która odpowiada właśnie za zaznaczenie tej cyfry. Nawiasy odpowiadają za grupowanie (tak to się chyba fachowo nazywa po polsku?). W każdym razie teraz pod zmiennymi $0 $1 $2 … będziemy mieć poszczególne dopasowania, gdzie $0 – oznacza całe dopasowanie (czyli to co zaznaczy nam się po wpisaniu wyrażenia w NetBeans), a kolejne cyfry oznaczają kolejne grupy, o ile użyliśmy gdzieś nawiasów (). W naszym przypadku $1 wskaże właśnie tę pierwszą cyfrę. Tak więc to co wskaże nam powyższe zapytanie podmieniamy na:
     $1
    Przed $1 jest spacja.

    Pozostałe wyrażenia

    Rozwiązania dla następnych różnic opublikuję w kolejnych postach. Proszę o cierpliwość!


  3. Cron ponownie: przygody ciąg dalszy, tym razem $_SERVER

    Kwiecień 4, 2012 by luki

    Wyobraź sobie, że gdy cron uruchamia Twój skrypt PHP, to niektóre zmienne środowiskowe są niedostępne. Dobrze o tym wiedzieć. Przykładowo jeśli używasz zmiennych z globalnej tablicy $_SERVER, to przy wywołaniu crona ta tablica nie będzie dostępna – dostaniesz na wyjście (cron.out) Notice/Warning.

    Jak sobie z tym poradzić?

    Trzeba stworzyć tablicę $_SERVER, gdy nie jest ona dostępna i zapełnić pola, których potrzebujemy.

    $_SERVER['HTTP_HOST'] = 'host';

    albo używać isset:

    if(isset($_SERVER['HTTP_HOST'])) ...

    Pozdrawiam.


  4. Cron: file_put_contents(…): failed to open stream: Permission denied in …

    Marzec 29, 2012 by luki

    Cron to narzędzie m.in. do automatycznego wywoływania skryptów co określony czas. Taki harmonogram zadań, który np. odpali nam czyszczenie bazy co 10 minut. Bardzo przydatne narzędzie, ale może również narobić trochę problemów zanim zacznie się sprawować jak należy…

    Załóżmy, że ustawiliśmy działanie cron-a na plik cron.php z wywołanie co 10 minut. W cron.php mamy funkcję, która zrzuca loga do pliku ‘test.txt’. Odpalamy plik cron.php ręcznie na serwerze i wszystko działa, ale okazuje się, że z automatycznym wywołaniem wygląda to trochę gorzej… Zamiast zrzucić log dostajemy błędy do pliku cron.out:

    PHP Warning:  file_put_contents(test.txt): failed to open stream: Permission denied in .../cron.php on line 3

    Chodzi o uprawnienia. Ustawiamy chmody na 777 dla ‘test.txt’ i… nadal nic. Po pewnym czasie zorientowałem się, że chodzi o katalog roboczy, który zmienia się zależnie od sposobu wywołania crona!

    Dodaj poniższy kod do pliku cron.php:

    echo '1'."\n";
    echo getcwd();
    echo '2'."\n";
    chdir('/usr/local/pelna_sciezka_do_pliku/logs/');
    echo '3'."\n";
    echo getcwd();
    echo '4'."\n";
    file_put_contents('/usr/local/pelna_sciezka_do_pliku/text.txt', 'TEST');

    Podstaw swoją ścieżkę.  Ustaw 777 na plik. Zobacz co cron teraz wrzuca do pliku cron.out. Jeśli podałeś poprawną ścieżkę to pod 2 i 4 nic nie powinno się wyświetlić.
    W razie problemów pisz komentarz. W każdym razie kluczem do rozwiązania problemu są funkcję getcwd() oraz chdir().


  5. Analiza ataku socjotechnicznego „sztuczka z loterią”

    Marzec 24, 2012 by luki

    Uwaga – wpis zawiera szczegóły fabuły książki Stiega Larssona „Dziewczyna, która igrała z ogniem”!

    W poprzednim wpisie opisałem sztuczkę z loterią, prosty atak socjotechniczny. Celem ataku było nawiązanie fizycznego kontaktu z nieuchwytną osobą. Zobaczmy, jak udało się tego dokonać.

    Założenia są następujące: mamy jakiś namiar na gościa. Może to być adres e-mail, skrytka pocztowa, adres zamieszkania, cokolwiek na co możemy „coś” wysłać z nadzieją, że zostanie odczytane przez target (cel). O targecie wiemy, że jest to mężczyzna w średnim wieku, jego zarobki są przeciętne. Na ataki w stylu „wygrałeś coś tam” w gruncie rzeczy każdy jest podatny, należy tylko zadbać, aby taki atak nie wyglądał jak jedna z miliona innych prób naciągnięcia na coś. Czyli po 1. opcja z e-mailem może nie przejść. Dziennie dostajemy masę spamu, przynajmniej 50% to wygrane w konkursach i innych loteriach. Jak skutecznie przekonać odbiorcę, że mail, który mu wysyłamy nie jest ściemą? Musiałby pochodzić z wiarygodnego dla odbiorcy źródła albo być NAPRAWDĘ dobrze przygotowany. No ale i tak istnieje wysokie ryzyko „niechwycenia” a każda nieudana próba może zaognić w targecie nieufność. Pamiętajmy, że target z jakiegoś powodu nie chce się z nami skontaktować. Być może się ukrywa albo coś w tym stylu. Także może być czujny i gotowy na pułapki. Po 2. opcja z telefonem jest już trochę bardziej wiarygodna, ale telefonu nie przewidują założenia.

    List

    Mamy więc adres, na który możemy wysłać list. Jeśli próbujemy sztuczki na loterię (są również inne opcje, ale tutaj akurat zajmujemy się tą sztuczką) musimy się do niej bardzo dobrze przygotować. Także zarówno koperta, jak i sama informacja musi wyglądać profesjonalnie i wzbudzać zaufanie. Pamiętajmy, że żyjemy w społeczeństwie zinformatyzowanym i większość ludzi prawie wszystko sprawdza w necie. W związku z tym może warto zatroszczyć się o jakąś prostą stronę www, którą poda się w liście? Jeśli target sprawdzi w sieci naszą firmę/instytucję, którą podpiszemy listy, zawsze będzie to wyglądać o niebo lepiej.

    Kontakt

    Kolejna ważna sprawa to kontakt do nas. Nie ma co liczyć, że gościu odpisze na list. Dla nas liczy się telefon – jak gościu zadzwoni będzie to oznaczać zaangażowanie – dostaniemy wtedy jedną jedyną szansę na zrealizowanie naszego celu. O przygotowaniu do tej rozmowy opowiem za chwilę. Na początek zaopatrzmy się w dodatkowy telefon i kartę SIM. Musimy mieć pewność, że nikt poza targetem do nas nie zadzwoni. W książce była opisana głupota akurat – Dag Svensson podał swój biurowy numer, który po 1. mógł odebrać ktoś oprócz niego (ktoś całkowicie nieprzygotowany na przeprowadzenie ataku) a po 2. sam nigdy by nie wiedział, kiedy dzwoni target. Czyli przy każdym odebraniu telefonu musiałby mówić ściemę „Indigo Badania Rynku” zamiast „Redakcja Millenium Dag Svensson”, co dla kogoś kto nie jest targetem może być co najmniej dziwne. Trochę jak mówienie przy każdym odebranym połączeniu „RMF FM najlepsza muzyka pod słońcem” ;) Tak więc podstawa – telefon i nowy numer, na który zadzwoni tylko i wyłącznie target.

    Nagroda

    Tutaj już kwestia inwencji twórczej. Nie ma co przesadzać z Mercedesem klasy S albo z wycieczką jachtem po oceanie. Dajemy coś realnego albo najlepiej wycelowanego w zainteresowania i pragnienia targetu, jeśli cokolwiek o nim wiemy. W przeciwnym wypadku piszemy coś prostego – tak, nowoczesny telefon jest OK. Do tego szansa na przejście do dalszego etapu i więcej nagród – brzmi nieźle.

    Rozmowa z targetem

    Zdecydowanie gwóźdź całej akcji. Tego nie można spieprzyć. To tak jakby zgubić kupon z 6 w totka (a propos loterii). Rozmowę należy zapisać sobie na kartce w różnych wariantach i każdy z osobna przeanalizować na sucho (głośno, samemu do siebie – jakbyś z kimś rozmawiali). Jeśli ktoś ma wybitne problemy z takimi sytuacjami może sobie podzwonić pod losowe numery i potrenować na żywca – to super pomysł i naprawdę dużo daje. Należy wziąć pod uwagę wiele wariantów sytuacji, ale pamiętać, że cel jest jeden – spotkać się z targetem. W ten sam sposób przygotowują się telemarketerzy – oni są w stanie przewidzieć większość naszych odpowiedzi i ku naszemu zdziwieniu – mają zazwyczaj gotową odpowiedź. Chociaż niedawno udało mi się zagiąć telemarketerkę pytaniami o szczegóły oferty (cóż oni są chyba dobrze przygotowani tylko na odpowiedzi odmowne), a moja koleżanka nawet zrobiła sobie własny sport z męczenia rozmowami telemarketerów ;) W każdym razie warto dobrze się nad tym zastanowić i poćwiczyć.

    Dodatkowe przygotowania

    Jeśli nie działasz sam albo po prostu masz kogoś zaufanego, to wszystko z powyższego „poradnika” możecie przygotowywać wspólnie. Chociaż ja polecam bardziej metodę „ja robię, ty testujesz”, bo nie zawsze jest tak, że obie osoby mają wizję działania, a z kolei druga osoba zawsze może w miarę obiektywnie stwierdzić, czy coś ma sens. Dodatkowo może przećwiczyć rozmowę z drugą osobą.

    Życzę powodzenia. W komentarzach możecie się podzielić swoimi udanymi atakami socjotechnicznymi w ramach „sztuczki z loterią”!


  6. WordPress: zmiana adresu URL bloga a bezpośrednie odnośniki

    Marzec 20, 2012 by luki

    Zmiana adresu URL bloga to dosyć gruntowna zmiana ustawień WordPress-a i nie zawsze wszystko może ładnie działać po zastosowaniu. Kiedy taka zmiana jest konieczna?

    Przykładowo mamy hosting dla domeny „moja-domena.pl” i na tym hostingu chcemy zainstalować WordPress-a korzystając z dostępnego w ramach hostingu automatycznego instalatora CMS-ów. Problem w tym, że chcemy, aby WP obsługiwał nie domenę „moja-domena.pl” a np. „tutaj-blog.com” (instalujemy go w katalogu, na który jest skierowana ta domena). Domyślnie autoinstalator zainstaluje nam WordPress-a pod domeną „moja-domena.pl” i też ta domena pojawi się we wszystkich ustawieniach i pod wszystkimi linkami na naszym blogu.

    WordPress / Kokpit / Ustawienia / Ogólne

    Generalnie tutaj mamy odpowiednie ustawienia, pod którymi należy wprowadzić właściwą domenę. Po zastosowaniu większość funkcji WP będzie normalnie działać.

    WordPress / Kokpit / Ustawienia / Bezpośrednie odnośniki

    Problem jedynie leży w bezpośrednich odnośnikach, ponieważ w pliku .htaccess nadal będzie brana pod uwagę wcześniejsza domena (a dokładniej ścieżka bezpośrednia do katalogu). Rodzi to duży problem, ponieważ nie dostaniemy się w żadne miejsce na blogu, do którego wskazywały estetyczne linki w formie innej niż domyślna (domyślna to ta dziwna ze znakami zapytania i innymi niezrozumiałymi treściami). Jeśli nic nie mówi Ci „.htaccess” to poczytaj np. o module mod_rewrite do serwera Apache).
    Rozwiązania problemu są co najmniej dwa:

    • ustawić domyślne wyświetlanie (zatwierdzić), sprawdzić czy działa – jeśli tak, to ustawiamy bezpośrednie odnośniki, takie jak chcemy i zapisujemy. Plik .htaccess powinien zostać zaktualizowany
    • ręcznie wyedytować plik .htaccess i ustawić właściwą ścieżkę do naszego bloga (zazwyczaj wystarczy usunąć nazwę katalogu w dwóch miejscach) – wersja dla osób, które widziały już plik .htaccess co najmniej raz w życiu

    Rozwiązania starałem się opisać w miarę ogólnie, aby dało się je elastycznie wykorzystać w każdym przypadku. W razie problemów zapraszam Cię do napisania komentarza!


  7. Absolutne czyszczenie dysku twardego

    Marzec 15, 2012 by luki

    Sprzedajesz komputer z dyskiem twardym, który przez kilka lat służył Ci jako nośnik na wszelkie dane?  Przez kilka lat zgromadziłeś na nim niezłą ilość informacji. Ktoś o niekoniecznie dobrych zamiarach mógłby z nich zrobić różny użytek.

    Problem skutecznego kasowania danych ma oczywiście strategiczne znaczenie dla firm i instytucji, ale nierzadko również osoby prywatne dysponują danymi, które nie powinny trafić w niepowołane ręce.

    W momencie przekazania komuś komputera/dysku twardego warto pomyśleć o porządnym wyczyszczeniu go z naszych danych. Na dobrą sprawę formatowanie dysku powinno wystarczyć, ale jeśli komuś bardzo zależy na odzyskaniu naszych danych, to „format c:” nie będzie dla niego dużą przeszkodą. Istnieją profesjonalne firmy zajmujące się odzyskiwaniem danych. Z informacji tych firm wynika, że właściwie 100% skuteczność gwarantują jedynie metody polegające na fizycznym zutylizowaniu dysku (np. chemicznie – do postaci cieczy). W tym miejscu weźmy pod uwagę fakt, że przeciętny Kowalski, który chce sprzedać dysk twardy, niekoniecznie chce inwestować kwotę dorównującą cenie dysku twardego na skuteczne czyszczenie…

    Co pozostaje? W tym miejscu z pomocą przychodzi aplikacji diagnozująca dyski twarde MHDD. Aplikację można bez trudu znaleźć w sieci. W tym momencie najświeższa wersja to 4.6.

    Krok po kroku

    1. Pobieramy obraz .iso aplikacji MHDD
    2. Nagrywamy obraz na CD
    3. Wykonujemy BOOT z płyty
    4. Wybieramy dysk, który chcemy czyścić
    5. Wpisujemy ERASE (enter, enter)
    6. Po zakończeniu wykonujemy ERASE /DISABLEBIOS

    Punkt 6 to opcja dla paranoików. ERASE zapełnia dysk zerami. W tym momencie znacznie zmniejszyliśmy szanse na odzyskanie danych z dysku.


  8. Trochę socjotechniki na przykładzie literatury popularnej

    Marzec 11, 2012 by luki

    Pojęcie socjotechniki kojarzy mi się przede wszystkim z głośnymi poczynaniami Kevina Mitnicka. Czytałem książkę, której był współautorem – „Sztuka podstępu„. Jednak dzisiaj nie będę pisał o tej książce, jakkolwiek zachęcam do przeczytania, bo daje całkiem nowe spojrzenie na czasami, jakby się wydawało, oczywiste kwestie.

    Na pewien prosty przykład ataku socjotechnicznego natknąłem się w książce autorstwa Stiega LarssonaDziewczyna, która igrała z ogniem„. Sytuacja przedstawia sposób skontaktowania się z osobą, która bardzo tego nie chce. Poniżej pozwoliłem sobie przepisać podaną sytuację prosto z książki (mam nadzieję, że nie ujrzę za kilka dni pisma z prokuratury albo z jakiejś organizacji zbiorowego zarządzania prawami autorskimi…), żeby lepiej pokazać o co chodzi. Postaci: D – Dag Svensson, M - Mikael Blomkvist, B – Bjorck.

    D: (…) Poświęciłem trzy tygodnie, żeby wytropić tego cholernego Bjorcka ze służb specjalnych. Tak jakby uprowadził go jakiś obcy wywiad. Po prostu zapadł się pod ziemię.
    (…)
    M: Próbowałeś sztuczki z loterią?
    D: Czego?
    M: Zmyśl jakąś nazwę i napisz list informujący, że facet wygrał komórkę z GPS-em czy coś tam innego. Wydrukuj, żeby wyglądało ładnie i porządnie, i wyślij na jego adres – w tym przypadku na skrytkę pocztową. Tak więc, wygrał już telefon. Poza tym jest jedną z dwudziestu osób, które mogą przejść do kolejnego etapu i wygrać sto tysięcy koron. Musi tylko wziąć udział w badaniu rynkowym kilku produktów.
    (…)
    D: Oszalałeś. To legalne?
    M: Trudno mi uwierzyć, że sprezentowanie telefonu jest nielegalne.

    300 stron później… UWAGA poniżej znajduje się spoiler fabuły! Ostrzegałem :)

    (…) Mikael rozmawiał z (…) gdy nagle usłyszałem dzwonek telefonu gdzieś w redakcji. (…) Zaraz jednak uświadomił sobie, że to telefon na biurku Daga.
    (…)
    M: Indigo Badania Rynku, Mikael przy telefonie. W czym mogę pomóc?
    B: Eee… dzień dobry, nazywam się Gunnar Bjorck. Przyszedł do mnie list z informacją, że wygrałem komórkę.
    M: Gratuluję (…) Jednak aby go otrzymać, musi pan wypełnić ankietę. (…) Część badania polega na oglądaniu i identyfikacji logo różnych firm. (…) Musimy wysłać do pana jednego z naszych pracowników.

    Gotowe! Akcja z książki, ale… myślisz, że nie mogłaby zaistnieć w realnym świecie? Spróbuję się nad tym zastanowić w następnym wpisie.


  9. github: SSH Key Vulnerability

    Marzec 7, 2012 by luki

    Na githubie była luka pozwalająca atakującemu umieścić w serwisie dowolny klucz SSH, dzięki czemu uzyskałby pełny nieuprawniony dostęp do przechowywanych repozytoriów. Na szczęście luka została naprawiona i wdrożono kilka dodatkowych funkcji poprawiających bezpieczeństwo na przyszłość:

    - wymuszenie na użytkownikach zweryfikowania swoich bieżących kluczy w serwisie (pomimo że nie ma żadnych udokumentowanych ataków warto to zrobić)

    - zmiana klucza będzie wymagać podania hasła

    - przy zmianie klucza otrzymasz powiadomienie mailem

    - wszystkie zmiany na koncie są widoczne w logach w panelu użytkownika (więc nawet jeśli mail nie dojdzie, to można zobaczyć co się dzieje)

    Jak sprawdzić fingerprint swojego klucza SSH?

    Odpal gitbash i wejdź do katalogu z kluczami:

    cd ~/.ssh/ (wersja domyślna)

    Na stronie githuba wyświetla nam się aktualny klucz, więc porównujemy go z fingerprintem tego, który mamy na dysku:

    ssh-keygen -lf id_rsa.pub

    Oczywiście interesuje nas klucz publiczny. To tyle – jeśli wszystko się zgadza klikamy w githubie „approve” inaczej wgrywamy nowe klucze i powiadamiamy support.


  10. Jak sprawdzić, czy ktoś się logował na Facebooku?

    Luty 24, 2012 by luki

    Wysłałeś komuś wiadomość i zastanawiasz się, czy ten ktoś już ją przeczytał? Generalnie nie możesz za wiele zrobić, poza obserwowaniem aktywności tej osoby w portalu Facebook. Chociaż okazuje się, że może się przydać niecodzienne zastosowanie zaczepki.

    Zaczepka na Facebooku zdradza czy ktoś się logował

    Zaczepka na Facebooku zdradza czy ktoś się logował

     

    Zaczepka na Facebooku to chyba jeden z mniej przydatnych elementów portalu. Tak właściwie ciężko powiedzieć, do czego może się przydać w praktyce. Tak więc w tej chwili uważam się za pierwszego odkrywcę zastosowania zaczepki ;)

    Zaczepką sprawdzisz, czy ktoś się logował do serwisu

    Sprawdzaną osobę należy zaczepić w momencie, od którego chcemy wiedzieć, czy się logowała. Czyli na przykład wysyłamy prywatną wiadomość i chcielibyśmy sprawdzać, czy dana osoba już ją odebrała (zakładamy, że skoro się logowała, to odczytała wiadomość). Bezpośrednio po wysłaniu wiadomości należy tę osobę zaczepić. Od tej pory gdy ponownie spróbujesz tę osobę zaczepić na Facebooku, to dostaniesz komunikat jak na obrazku. Oznacza to, że dana osoba jeszcze się nie logowała, więc prawdopodobnie nie odczytała naszej wiadomości. W przeciwnym wypadku komunikat będzie inny: „XXXX nie odebrał jeszcze Twojej zaczepki.” (bez informacji o powodzie).

    Życzę udanego szpiegowania znajomych ;)