Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: matipl, dodany: 11.11.2015 09:30, tagi: php, zend_framework

Who use Zend Framework? W 2012 roku pisałem o podobnej dziurze w Zend Framework. Niestety historia się powtarza i wszelkie wersje Zend Framework włącznie do 2.4.2 oraz 1.12.13 są podatne na atak XXE (XML eXternal Entity Injection), jeśli na przykład wykorzystujecie ZF jako serwer XML-RPC.

Dokładny opis problemu opisał Dawid Goluński już w sierpniu. Problem jednak w tym, że obecnie z dwóch dużych frameworków dla PHP (Zend Framework i Symfony) nie korzystają tylko twórcy dedykowanych aplikacji. I jeśli nawet nie korzystamy bezpośrednio z tych frameworków, możemy korzystać z rozwiązań, które wykorzystują pośrednio ZF lub Sf. W dzisiejszych czasach musimy mieć oczy dookoła głowy, ponieważ producent (np. Drupal, Magento) może w porę nie zauważyć problemu.

Z powodu luki XXE w ZF problemy mają chociażby osoby korzystające z Magento. 27 października 2015 (prawie 3 miesiące po załataniu w ZF!) został opublikowany patch bezpieczeństwa SUPEE-6788, który rozwiązuje m.in. problem XXE/XEE attack on Zend XML functionality using multibyte payloads.

Zastanawiacie się zapewne co może się Wam stać poprzez taką małą dziurę? Ano możecie zarazić swój serwer ransomware’m Linux.Encoder.1 (napisany w C). A ten sprytny robak, który potrafi wykorzystać wspomnianą lukę XXE w ZF, szyfruje wszelkie nasze dane (np. /home, /root, /var/lib/mysql). Następnie żąda od nas okupu za klucz odszyfrowujący.

Dlatego, jeśli nie aktualizowaliście ZF w swoich aplikacjach od kilku miesięcy, warto przysiąść i wprowadzić odpowiednie zmiany.

Artykuł Dziura w Zend Framework i Linux.Encoder.1 pochodzi z serwisu Mateusz matipl Kamiński.

Autor wpisu: batman, dodany: 06.11.2015 13:00, tagi: php

PhpStorm zacząłem używać dobrych kilka lat temu. Od samego początku bardzo mi się to IDE spodobało, a każda następna wersja wprowadzała kolejne udoskonalenia, które znacząco poprawiały komfort pracy z PHP. Ostatnia wersja, oznaczona numerem 10, dodała kilka istotnych zmian, które potwierdzają, że jest to najlepsze IDE na rynku. Zanim jednak wymienię nowości, jakie zawitały do „dziesiątki”, wymienię kilka możliwości, które mnie „kupiły”. Debugger – narzędzie dostępne w każdym porządnym IDE, pozwalające na bezproblemowe debugowanie aplikacji Klient bazy danych... [[ This is a content summary only. Visit my website for full links, other content, and more! ]]

Autor wpisu: Piotr Śliwa, dodany: 05.11.2015 23:19, tagi: php

Ostatnio można było odnieść wrażenie, że tak jak tytuł mówi, jestem leniwy (ostatni wpis na początku roku), ale nic bardziej mylnego. Już zabieram się za temat leniwej ewaluacji. Wyjdę od Scali, a później przejdę do PHP.

Leniwa ewaluacja na przykładzie Scali

Są dwa sposoby ewaluacji wyrażeń: chciwe (strict) oraz leniwe (lazy). Scala jest językiem, który domyślnie wyrażenia ewaluuje chciwie (tak jak większość języków), ale gdy tego chcemy, możemy oznaczyć aby dane wyrażenie było leniwe.

lazy val a = 1 + 2  
lazy val b = a + 3  
val c = a + b // obliczenie wartości a i b odbywa się dopiero tutaj  
              // a nie w momencie inicjalizacji zmiennej

Listy i większość innych kolekcji w scali są chciwe, jedną z leniwych struktur jest Stream - jest to leniwa wersja listy. Przykład strumienia będącego nieskończonym ciągiem liczb naturalnych:

val naturals: Stream[Int] = 0 #:: naturals.map(_ + 1)  
//res0: Stream[Int] = Stream(0, ?)

Powyższy zapis jest skróconym zapisem:

val naturals: Stream[Int] = Stream.cons(0, naturals.map(_ + 1))  

Poniżej dwa akapity wyjaśnień, bo mimo iż zapis ten jest prosty, naturalny i dosyć matematyczny, mózg może się przed nim lekko opierać.

Co to jest rekurencyjna struktura danych? Wyjaśnię to na przykładzie. Matrioszka to klasyczna rosyjska zabawka składająca się z X lalek. X - 1 lalek jest otwieranych i może zawierać w sobie kolejną (mniejszą) lalkę. Ostatnia lalka nie jest otwierana i nie można już do niej nic wsadzić. Tak więc pierwsza lalka zawiera drugą, która zawiera trzecią i tak do ostatniej, która nie zawiera już kolejnej lalki. Każda z lalek ma ten sam "interfejs", wygląda podobnie. Ostatnia lalka różni się od reszty tym, że nie zawiera kolejnej. Podobnie jest ze strukturami rekurencyjnymi. W przypadku strumieni, "lalkę" mogąca zawierać inną "lalkę" nazywamy Cons, zaś ostatnią pustą "lalkę" Empty. Cons jest węzłem, który ma wartość i referencję do pozostałej części strumienia (ogona). Empty to pusty strumień. Konstruktor Cons wygląda następująco: Cons(value, Stream) - ma referencję do przechowywanej wartości oraz dalszej części strumienia. Dalsza część strumienia może być Cons lub Empty (otwierana lub ostatnia pusta "lalka"). Przykładowy strumień złożony z 2 elementów: Stream.cons(0, Stream.cons(1, Stream.Empty)) lub składnia skrócona: 0 #:: 1. Jako referencji do całego strumienia używamy referencję do jego pierwszego elementu - tak samo jak w przypadku matrioszki, pierwsza lalka jest lalką samą w sobie, nie jest potrzebne dodatkowe opakowanie tak jak w przypadku klasycznej listy powiązanej.

Wracając do naszego ciągu liczb naturalnych (ignorujemy to że może się przekręcić po dojściu do max int). 0 to pierwszy element strumienia, naturals.map(_ + 1) to strumień będący dalszą częścią głównego strumienia (drugim argumentem konstruktora Cons). Bardzo ważne jest to, że naturals.map(_ + 1) jest ewaluowane leniwie, czyli wartość drugiego elementu zostanie wyliczona tylko gdy będziemy chcieli go odczytać. Zapis może na początku lekko kołować, ale wystarczy sobie uświadomić, że jest to rekurencyjna definicja równoznaczna z rekurencyjnym wywołaniem funkcji:

def createNaturals(from: Int): Stream[Int] = from #:: createNaturals(from+1)  
val naturals = createNaturals(0)  

Jeśli dwa poprzednie akapity nie są jasne, przeczytaj je jeszcze raz (rekurencyjnie, aż do spełnienia warunku wyjścia) ;)

Wyliczenie wartości następuje tylko gdy chcemy tą wartość odczytać:

naturals(5) //pobranie 5-tego elementu ciągu  
            //następuje ewaluacja ciągu do 5-tego 
            //elementu włącznie, 6-ty element nie jest ewaluowany
//res1: Int = 5

Ok, teraz trochę bardziej złożony przykład - definicja ciągu fibonacciego:

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

Autor wpisu: batman, dodany: 28.10.2015 17:00, tagi: php

Najnowsza wersja PHP, oznaczona numerem 7, zbliża się do nas dużymi krokami i za około miesiąc ma być dostępna stabilna wersja. Najczęściej podkreślanym atutem jest szybkość „siódemki”, która ma na głowę bić poprzednie wersje. Ciekawie się również zapowiadają nowe elementy języka. Lista nowości znajdujących się w PHP7 jest całkiem długa, dlatego też nie będę wymieniał ich wszystkich, a skupię się jedynie na tych, które dla mnie są najciekawsze. Deklaracja typów skalarnych Od dawien dawna narzekałem na brak możliwości określenia typu danych przyjmowanych oraz zwracanych przez... [[ This is a content summary only. Visit my website for full links, other content, and more! ]]

Autor wpisu: matipl, dodany: 16.10.2015 11:34, tagi: php

A jednak – właśnie ukazała się piąta wersja Release Candidate najnowszej wersji PHP, którego premiera zaplanowana jest na listopad 2015. Lista poprawionych błędów jest o wiele mniejsza niż ostatnio. To dobry znak.

Artykuł PHP 7.0.0 RC5 pochodzi z serwisu Mateusz matipl Kamiński.

Autor wpisu: Łukasz Socha, dodany: 13.10.2015 16:16, tagi: php, mvc

Czytelnikom bloga chyba nie muszę tłumaczyć co to jest i do czego służy paginacja. W tym wpisie udostępnię bibliotekę dostosowaną do szkieletu aplikacji pokazanego w cyklu MVC w praktyce z composer – tworzymy system artykułów. Żeby zrozumieć treść tego artykułu konieczne jest zapoznanie się powyższym cyklem. Kod biblioteki jest zmodyfikowaną klasą paginacji z aplikacji Open […]

Autor wpisu: Diabl0, dodany: 09.10.2015 14:46, tagi: php, sql

Pobieramy instantclient z strony Oracle (wymaga logowania). Ja korzystałem z wersji 11.2.0.4.0 (64-bit). Potrzebne nam są:

  • Instant Client Package – Basic: All files required to run OCI, OCCI, and JDBC-OCI applications
  • Instant Client Package – SDK: Additional header files and an example makefile for developing Oracle applications with Instant Client

Zawartość unzipujemy i kopiujemy do wybranej ścieżki (w moim przypadku /usr/local/instantclient)

Następnie tworzymy symlinki:

ln -s libclntsh.dylib.11.1 libclntsh.dylib
ln -s libclntsh.dylib libclntsh.so

I exportujemy ścieżkę aby pdo_oci odnalazło sobie instantclienta:

export ORACLE_HOME="instantclient,/usr/local/instantclient,11.2.0.4.0"

Teraz pozostało nam już odpalić instalację PHP, np. poprzez:

brew install php56 --with-pdo-oci

Oczywiście pozostałe opcje kompilacji (oraz wersję PHP) dobieracie pod swoje potrzeby.

 

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.