Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Athlan, dodany: 28.05.2011 14:40, tagi: sql, php, internet

Dziś bardzo krótko, bez zbędnych dywagacji, czyli tylko i wyłącznie o tablicy $_SERVER. Dbając o bezpieczeństwo aplikacji webowych zwraca się uwagę na wiele czynników, jakimi są SQL injections, przechwytywanie nieprawidłowych parametrów, uogólniające zapytania przepuszczające maskę % w LIKE zapytaniu do baz, XSS‘y w $_POST, $_GET.

I finalnie… wiele osób zapomina (a jeszcze więcej nie jest tego świadom) o możliwości wstrzyknięcia szkodliwych danych w $_SERVER['HTTP_X_FORWARDED_FOR'];. Konsekwencje są oczywiście katastrofalne.

O ile sama walidacja jest rzeczą wtórną, diabeł tkwi w trzech szczegółach:

  1. Rzecz trywialna, ale pamiętajmy, że w naturalnym procesie użytkowania przeglądarki, w nagłówku może zostać zwrócony nie tylko jeden adres IP, a kilka oddzielonych przecinkiem, w tym localhost‘y (standard nagłówka X-Forwarded-For).
  2. Wstrzyknięcie Javascriptów jest możliwe, ale notabene najmniej szkodliwe, bo do spreparowania nagłówka potrzebny jest bardziej zaawansowany proces (dajmy na to Data Tamping, który przedstawię poniżej), np. niż wklejenie syfu w linku/obrazku i przesłanie go komuś przez komunikator, żeby wykraść jego ciasteczka sesyjne document.cookie i przesłać je sobie na serwer w dowolny sposób, zatem atakowi nie ulegną osoby trzecie.
  3. Niepoprawność danych, które można zmanipulować, jest chyba rzeczą oczywistą: nieprzepuszczenie takich danych przez filtry może skutkować złymi wartościami zwracanymi np. przez ip2long() i zapis w zupełności nieprzydatnych nam później danych do bazy.
  4. ale największe nieprzyjemności możemy mieć przez spreparowanie lewych zapytań do baz danych, o ile nie używamy sprawdzonych ORM lub czegokolwiek, co pomaga nam filtrować wartości do niej przekazywane i używane w warunkach zapytań (data binding).

Przykład tampingu danych, żeby spreparować niepożądane efekty.

Mamy bardzo prosty, niebezpieczny kod funkcji, która pobiera pierwszy adres na liście adresów oddzielonych przecinkami z $_SERVER['HTTP_X_FORWARDED_FOR'] o ile istnieje, natomiast w przeciwnym wypadku $_SERVER['REMOTE_ADDR']:

< ?php
 
function getUserIp()
{
  if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
    return trim(current(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])));
 
  return $_SERVER['REMOTE_ADDR'];
}
 
$sUserIP = getUserIp();
 
echo 'Hi "' . $sUserIP . '"!'; // first bug while display.
var_dump(ip2long($sUserIP)); // second bug while transforming data.
 
?>

Pora na przykład manipulacji takich danych.

  • Będziemy używać Tamper Data dla Firefox’a.Dość popularny wśród developerów addon do Firefox’a, pozwala zmodyfikować dane $_POST, $_GET, $_COOKIE, nagłówki, “w locie żądania” etc.
  • Po instalacji w menu Narzędzia pojawi się pozycja Dane Tamper, która uruchamia okienko do podsłuchiwania żądań. Po kliknięciu Rozpocznij podsłuchujemy wszystkie wychodzące żądania z naszej przeglądarki. Każde żądanie nie zostanie przepuszczone, dopóki go nie zmanipulujemy klikając Tamper, lub przepuścimy dalej klikając Wyślij.
  • Jeżeli zdecydujemy się Tamper’ować żądanie, naszym oczom ukaże się okno z parametrami. Klikamy prawym przyciskiem myszy na listę parametrów, wybieramy Dodaj i wpisujemy nasz przykładowy, brzydki dla aplikacji nagłówek: X_FORWARDED_FOR=<script>alert('Test.')</script>

Naszym oczom ukazują się co najmniej dwa błędy. Pierwszy to błąd prezentacji danych, który wykorzystuje <script>. O ile nie musimy się tym przejmować, bo naturalnie takie żądania nie są tak łatwo wysyłane, użytkownik nie może paść ofiarą ataku przez kliknięcie w link, który np. ukradnie mu ciasteczka. Dane nagłówkowe nie są w stanie być zmodyfikowane poprzez kliknięcie w link, podobnie jak z danymi $_POST (oczywiście mówimy o przypadkach trywialnych, bez javascript’owych wymuszanych submitów targetowanych do np. ramek).

Znacznie poważniejszym błędem jest konsekwencja wadliwego formatu danych, które nasza funkcja bagatelizuje. Po pierwsze mamy fałszywe dane zwracane przez ip2long(), po drugie kto powiedział, że właśnie z tej funkcji korzystamy, a nie zapisujemy danych plain’em i nie bindujemy pofiltrowanych danych lub instrukcji warunkowych zapytania przez np. sprawdzony ORM.

Rozwiązanie problemu.

Edit: Jak słusznie zauważył Zyx, zapomniałem o tym wspomnieć, że skoro mogą znaleźć się tam dowolne dane przesłane od użytkownika, nie należy tego pola traktować jako wyznacznik, że jest to numer jego IP, jest ono bezużyteczne i powoduje potencjalną lukę. Poza zabezpieczeniami to podstawowy argument, żeby o polu zapomnieć i używać $_SERVER['REMOTE_ADDR'].

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Vokiel, dodany: 28.05.2011 12:31, tagi: php

phpcon-logo Ostatnimi czasy uczestniczyłem głównie w spotkaniach o JavaScript (Falsy Values, zaawansowany js), Front-Endowych (Front-Trends), konferencjach dotyczących bezpieczeństwa (ConFidence). Dla równowagi front-endu z back-endem wypadałoby wybrać się wreszcie na coś związanego z PHP. Na przeciw moim potrzebom wyszli organizatorzy PHPCon.

PHPCon Poland

PHPCon Poland to ogólnopolskie spotkanie konferencyjne programistów i entuzjastów języka PHP, organizowane siłami wolontariuszy internetowych z całego kraju pod egidą zarządu stowarzyszenia Polska Grupa Użytkowników Linuxa (PLUG). Jej celem jest integracja środowisk osób związanych z PHP oraz środowiska biznesowego zainteresowanego praktycznym wykorzystaniem tego języka w projektach komercyjnych.

PHPCon PL to świetna okazja, by nawiązać nowe kontakty, wymienić doświadczenia i pomysły na przyszłość. Impreza ta jest skierowana zarówno dla profesjonalistów, jak i osób, które dopiero od jakiegoś czasu zajmują się PHP. Dzięki zróżnicowanej agendzie, konferencja daje możliwość ugruntowania lub poszerzenia swojej wiedzy w wybranych tematach.

PHPCon PL ma tak jak co roku charakter niekomercyjnego spotkania sympatyków PLUG. Dla osób, które z różnych przyczyn potrzebują faktury, odbywa się – już zupełnie komercyjnie – spotkanie o tej samej nazwie, w tym samym miejscu i czasie, ale organizowane i fakturowane przez firmę obsługującą klientów biznesowych.

PHPCon Poland 2011

Przygotowania do PHPCon ruszyły pełną parą. To już druga edycja konferencji PHPCon PL. Na blogu Mateusza Kamińskiego oraz u Przemka „eRiza” Pawliczuka oraz u Tomka „ZyXa” Jędrzejewskiego możecie poczytać jak było w roku 2010.

Co nam przyniesie tegoroczna edycja? Przede wszystkim warto wspomnieć o gościu specjalnym, którym w tym roku jest Lorna ‘LornaJane’ Mitchell. LornaJane jest znaną konsultantką PHP, webdeveloperką, publikatorką i prelegentką z Leeds w UK.

Czas i miejsce

PHPCon 2011 odbędzie się w dniach 21 – 23 października w miejscowości Mąchocice Kapitulne (rejon Gór Świętokrzyskich). Miejscem wystąpień będzie położony niedaleko Kielc Hotel Przedwiośnie ***. Zapisy uczestników zostaną otwarte po 15 lipca.

Call For Papers

Do 15 lipca zbierane są propozycje wystąpień. W związku z tym, organizatorzy zachęcają wszystkich, którzy mają ciekawy temat do zaprezentowania, do zgłoszenia swojej propozycji. Najciekawsze są oczywiście tematy nietuzinkowe, trudne do znalezienia w podręcznikach czy internecie. Są już pierwsze zgłoszenia z zagranicy, zatem można się spodziewać, że w tym roku poziom merytoryczny będzie na pewno wyższy, niż w roku ubiegłym. CFP można nadsyłać korzystając z formularza propozycji prelekcji na stronie http://www.phpcon.pl/2011/pl/aglista

Do tych co wybierają się na PHP Con 2011 – do zobaczenia w październiku!

Autor wpisu: singles, dodany: 27.05.2011 17:16, tagi: php

Wielu z Was pewnie wie, że w październiku odbędzie się kolejna edycja konferencji PHPCon. Zostałem poproszony przez organizatorów o rozpropagowanie krótkiego apelu na temat konferencji, oraz faktu, iż poszukiwani są prelegenci z Polski. Co też niniejszym – w formie oryginalnej – czynię:

Przygotowania do kolejnej edycji konferencji PHPCon Poland ruszyły pełną parą. Czas i miejsce spotkania, a także inne szczegóły doytczące konferencji, opublikowane są na stronie http://www.phpcon.pl.

Gościem Specjalnym tegorocznego zlotu będzie Lorna Mitchell, znana w świecie PHP jako LornaJane – konsultantka PHP, deweloper, publikator oraz prelegent z Leeds w Anglii. Bierze udział w wielu projektach, m.in. joind.in czy PHPWomen.org, występuje na konferencjach PHP w różnych miejscach świata.

W związku z przygotowaniami zachęcamy wszystkich, którzy mają ciekawy temat do zaprezentowania, do zgłoszenia swojej propozycji. Najciekawsze są oczywiście tematy nietuzinkowe, trudne do znalezienia w podręcznikach czy internecie. Mamy już pierwsze zgłoszenia z zagranicy i możemy powiedzieć, że w tym roku poziom merytoryczny będzie na pewno wyższy, niż w roku ubiegłym.

PHPCon PL 2011 odbędzie się w dniach 21-23 października br. ponownie w Górach Świętokrzyskich, jednak znacznie bliżej Kielc, w hotelu Przedwiośnie*** w Mąchocicach Kapitulnych. Propozycje wystąpień można nadsyłać do 15 lipca br. Wystarczy zalogować się i wypełnić formularz propozycji prelekcji na stronie http://www.phpcon.pl/2011/pl/aglista.

Autor wpisu: sokzzuka, dodany: 27.05.2011 14:08, tagi: php

Dzisiaj w pracy przyszło mi zaimplementować następującą funkcjonalność:

po każdej zmianie w treści strony (artykule etc) powinien być automatycznie czyszczony cache

Jako, że używam Doctrine 2, to po krótkim researchu znalazłem funkcjonalność, która idealnie pasowała mi do rozwiązania tego problemu – event listeners. Czym jest event listener ? Jest to odpowiednio skonstruowana klasa, która przypięta do menagera encji Doctrine, potrafi reagować na zdarzenia w jakich on uczestniczy, jak np. update, insert, flush etc. Dzięki temu mogłem zaimplementować swój mechanizm czyszczenia cache, behold:


class CacheCleanerListener {
    private $cache;
    public function __construct($cache){
        $this->cache = $cache;
   }

   public function onFlush(\Doctrine\ORM\Event\OnFlushEventArgs $eventArgs){

       $this->cache->clean();

   }
}

Podpinamy:


$entityManager = EntityManager::create($options, $configDoctrine);
$eventManager = $entityManager->getEventManager();

$listener = new CacheCleanerListener($cache);
$eventManager->addEventListener(array('onFlush'), $listener);

Voila ! Działa. Z cennych uwag i spostrzeżeń:

  • by nasłuchiwać eventu flush jest tylko jedna metoda – onFlush, dla reszty piszemy preUpdate, postUpdate etc.
  • by przypiąć event do managera istnieje jeszcze jedna metoda addEventSubscriber($subscriber), działa w przeciwną stronę do addEventListener – pobiera listę obsługiwanych przez klasę eventów zamiast mieć ją podaną (dziwne ?!)

Spragnionych wiedzy na ten temat odsyłam do obszernej dokumentacji ;)

Autor wpisu: batman, dodany: 27.05.2011 08:00, tagi: php

Bardzo często przy okazji luźnych rozmów o programowaniu zastanawiam się kim tak na prawdę jest programista. Chciałoby się powiedzieć, że to wolny zawód, wymagający kreatywności, ukierunkowany na ludzi o otwartych umysłach. Pogląd ten kłóci się jednak z twardymi faktami, które wyraźnie stanowią, że programista to umysł ścisły, pracujący w oparciu o od dawien dawna utarte schematy.

Zacznijmy od początku. Spotykamy się z osobą, zlecającą nam wykonanie aplikacji internetowej. Zakładam, że grafiką, UX, SEO i pozostałymi magicznymi skrótami zajmą się odpowiednie osoby. Nam pozostaje zaprojektowanie, wykonanie i wdrożenie aplikacji. Zabieramy się zatem ochoczo do pracy, projektując kolejne arcydzieło. Szybko jednak dochodzimy do wniosku, że już to kiedyś robiliśmy i od kreatywnego projektowania, przechodzimy do kreatywnego kopiowania.

Fazę projektowania (kopiowania) mamy za sobą. Pora przejść do kodowania. Tniemy (jeśli jeszcze nie mamy pociętego) layout, tworzymy szablony, przygotowujemy placeholdery na dynamiczną treść i cieszymy się razem ze zleceniodawcą, że aplikacja powoli zaczyna wyglądać. Z kreatywnego podejścia nic już nie zostało.

Na koniec wygładzamy drobiazgi, nanosimy poprawki zgłoszone przez zamawiającą osobę i wdrażamy gotową aplikację na przygotowany wcześniej serwer. Podpinamy domenę, statystyki, przeprowadzamy ostatni test drive i z pompą (mniejszą lub większą) ogłaszamy światu wydanie kolejnego… No właśnie czego? Dzieła, czy raczej egzemplarza? Przecież na każdym kroku korzystaliśmy z gotowych narzędzi automatyzujących najnudniejsze czynności oraz podpowiadające nam to, o czym zawsze zapominamy. Czy to jeszcze jest sztuka, czy najzwyklejsze rzemiosło?

Autor wpisu: Tomasz Kowalczyk, dodany: 27.05.2011 04:19, tagi: php

Język PHP zawiera w sobie dużo różnych "sztuczek", przez co nasze życie może stać się o wiele łatwiejsze, ale istnieje możliwość, że zostanie przez nas znienawidzony do końca życia. W dzisiejszym wpisie chciałbym pokazać i wyjaśnić jedną z bardzo niejasnych i bardzo brzegowych kwestii, jaką jest zachowanie zasięgu zmiennych podczas przechodzenia do innych plików [np. [...]

Autor wpisu: Tomasz Kowalczyk, dodany: 26.05.2011 21:02, tagi: php

Konferencja PHPCon to chyba najbardziej rozpoznawalna impreza dotycząca samego języka PHP oraz technologii skupionych wokół niego. Poprzednia edycja, która odbyła się w 2010 roku zebrała bardzo pozytywne opinie uczestników, także na pewno jest warta polecenia. Jeśli jesteście zainteresowani poszerzeniem horyzontów programistycznych oraz poszerzeniem wiedzy dotyczącej tworzenia aplikacji internetowych z PHP - zapraszam do wzięcia udziału [...]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.