Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: cojack, dodany: 31.12.2009 21:59, tagi: php

Pomyślałem o tym by napisać o szyfrowaniu haseł w php, gdyż dużo osób myśli że jak sobie utworzy sumę md5 z hasła to jest bezpieczny. Otóż nie. Jest prawdopodobieństwo wygenerowania dwóch jednakowych sum md5 dla dwóch różnych stringów (nie majtki :) ).

Dlaczego nie używać md5?

W internecie możemy przeczytać nt używania sumy md5 w certyfikatach SSL przy połączeniach w np. systemach bankowych. Wg NIST (National Institute of Standards and Technology [ang. Narodowy Instytut Standaryzacji i Technologii]), powinno się wycofać używanie jej już w 1999r. I co Wy na to? Zdziwieni zapewne? A proszę bardzo, a to dlaczego? Jest za duża możliwość wygenerowania kolizji sumy, czyli to co pisałem wyżej wygenerowania dwóch identycznych sum.

Co zamiast md5?

Jest dużo algorytmów oferujących sumę kontrolną z stringu, lecz nie wszystkie są zalecane. W kolejności od najsłabszego:

  • SHA1
  • SHA-224
  • SHA-256
  • SHA-384
  • SHA-512

Wszystko wiąże się z przyrostem miejsca w bazie danych, więc i z czasem dostępu, porównaniem stringu. Szybciej jest pobrać 32 znaki alfanumeryczne z bazy danych niż 512 i je z sobą porównać. Ale na pewno nie jest bezpieczniej.

crypt() dobra alternatywa

Pewnie nie jeden z Was zastanawiał się jak w linuxie hasła są zabezpieczane. Otóż linux i unixowe systemy wykorzystują sól do zapisywania haseł. Tylko to nie polega na tym że wydzielimy sobie string, dorzucimy sól, połączymy ponownie i zrobimy z tego sumę md5 gdyż to nie zwiększy bezpieczeństwa. W php od wersji > 4 istnieje taka funkcja jak crypt(), link-manual. Funkcja ta ma zaimplementowany algorytm taki jak linuks do zapisywania hasła.

function genSalt($len = 64) {
    $safeChars = "0123456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $n = strlen($safeChars);
	$p = ''; // na wszelki wypadek
	for ($i = 0; $i < $len; $i++) {
		$p .= $safeChars[rand(0, $n - 1)];
	} 
	return $p;
}
 
$password = $_POST['password'];
$salt = genSalt();
$pwdEncrypted = crypt($password, '$2a$07$'.$salt.'$');
echo $pwdEncrypted;

Problem z crypt()

Jest jeden mały problem z tą funkcją, po przeniesieniu strony wraz z bazą danych na inny hosting, istnieje prawdopodobieństwo iż hasła mimo że są poprawne nie będą pasować. Dlaczego? Nie mam pojęcia, przeczytałem to w jednej z książek ale autor nie wytłumaczył. Możliwe że zauważył ten problem, a mi się szukać nie chce ;] Ale who care? Jak można zawsze sobie hasło zmienić. Nie jestem do końca przekonany co do tej własności z tym że może być wygenerowany różnych suma dla teg samego stringa i soli.

A co z SHA-N?

Tak więc wg NIST do 2010r. SHA1 też ma zostać wycofane z użytku przy certyfikatach ssl. Tak więc pozostało nam parę funkcji. Nie wszystkie z tych funkcji są “jawnie” dostępne w php, w sensie że są w postaci funkcji tak jak np md5, aby móc użyć np algorytmu SHA-512 musimy wykonać taką operację:

hash('sha512','Jakiś tekst do zsumowania ;)');

W funkcji hash możemy również wywoływać inne algorytmy tworzące sumę kontrolną. link-manual

Ale to nie wszystko, zapewne ktoś z Was słyszał o tęczowych tablicach, a jak nie to zapraszam link-wikipedia. Po przeczytaniu sami dojdziecie do wniosku że używanie sum kontrolnych jest po prostu mało bezpieczne.

Słów kilka na zakończenie

Co byśmy nie zrobili, to i tak się znajdzie ktoś kto nam złamie hasło, to tylko kwestia czasu.

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

Autor wpisu: batman, dodany: 30.12.2009 13:27, tagi: php

Natknąłem się dzisiaj na bardzo ciekawy efekt pseudolosowości przez duże P. Musiałem wygenerować 500 tysięcy unikatowych, ośmiocyfrowych liczb. Niby nic trudnego, funkcja rand, tablica lub baza do przechowywania informacji oraz nieskończona pętla, która mieli tak długo, aż wygeneruje wszystkie liczby. Okazało się jednak, że coś co miało zająć 15 minut zajęło mi godzinę. A wszystko przez to, że

Autor wpisu: cojack, dodany: 30.12.2009 01:15, tagi: sql

Tym razem nie będzie nic o implementacji pewnej struktury drzewiastej w php. Natomiast zajmiemy się dziś sql. A dokładniej PostgreSQL, od dłuższego czasu nie mogłem ogarnąć modułu w postgresql, który nazywa się ltree, jak sama cząstkowa nazwy wskazuje i łatwo się domyślić że chodzi tutaj o reprezentację i strukturę drzewa. Co najlepsze, przeprowadzone benchmarki przez jego twórców wykazują na największy w śród tymczasowych ogólnie dostępnych wzorców tego typu struktury czas dostępu do danych.

Trochę historii W 2002 roku, dwóch programistów: Teodor Sigaev oraz Oleg Bartunov, wypuściło na światło dzienne moduł ltree (kiedy zaczęli, brak danych). Podeszli do tego dość ogólnego problemu z wielkim dystansem, za to teraz mamy potężne narzędzie całkowicie za darmo. Następne wydania miały na celu wyeliminowanie błędów zgłoszonych przez użytkowników oraz rozszerzyć możliwości o nowe możliwości w indeksie GIST. Więcej na temat samych wydań jak zwykle w paczce do pobrania z ich strony na dole.

Z czym to się je? Ltree jak już wyżej wspomniałem jest modułem do PosgreSQL’a mający za zadanie przechowywanie danych w sposób przedstawiający strukturę drzewiastą. Implementacja jak najbardziej wydajna. A więc zacznijmy.

W zależności od dystrybucji z jakiej korzystamy, możemy mieć lub nie dodatkową paczkę dla postgresql’a która powinna się nazywać mniej więcej tak: postgresql-contrib

Po zainstalowaniu tych dodatków mamy masę innych rzeczy, z których nie koniecznie będziemy korzystać. Ale nas interesuje ltree, ścieżka ltree.sql u mnie to:

/usr/share/postgresql/8.4/contrib/

a żeby wyszukać gdzie my to mamy:

locate ltree.sql

po wcześniejszym updatedb.

powinniśmy mieć tam plik ltree.sql, musimy ten plik wrzucić do naszej bazy danych. No to jedziemy:

psql nazwaDB < /usr/share/postgresql/8.4/contrib/ltree.sql

powinniśmy mieć wszystko ładnie wrzucone do bazy danych. Teraz zostało nam już tylko utworzenie tabeli i ogień.

Przykładowa tabela z naszym drzewem.

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

Autor wpisu: Zyx, dodany: 29.12.2009 12:35, tagi: php

PHP 5 posiada dość dużo narzędzi służących do parsowania dokumentów XML. Chociaż posiadają one różne API, zbudowane są na bazie jednej i tej samej biblioteki, dlatego bez trudu możemy przełączać się między nimi. Dla większości programistów najlepszym wyjściem będzie SimpleXML oraz bardziej rozbudowany DOM, jednak wciąż zdarzają się sytuacje, gdy nie chcemy dostać zwykłego obrazu dokumentu w pamięci, lecz przejąć kontrolę bezpośrednio nad procesem parsowania. Ten wpis poświęcony będzie temu zagadnieniu oraz rozszerzeniu XMLReader.

Autor wpisu: Damian Tylczyński, dodany: 28.12.2009 22:55, tagi: php

Są 3 główne cechy programisty: ambicja, niecierpliwość i lenistwo. Chcemy podejmować się wspaniałych wyzwań, tworzyć aplikacje szybko i się przy tym się nie napracować. Nie brzmi to zbyt dobrze szczerze powiedziawszy. Gdybym miał narażać życie innych będąc chirurgiem, po wypowiedzeniu tych słów już płonął bym na stosie. Na szczęście w inżynierii oprogramowania mamy takie cuda [...]

Autor wpisu: stormfly, dodany: 24.12.2009 18:42, tagi: php

Jednym z najbardziej lubianych zajęć programistów jest grzebanie i naprawianie kodu po innych programistach. Dzisiaj miałem tą przyjemność i oczywiście nie wiadomo było czy się śmiać czy załamać :) Odkryłem dość błahy błąd, ale konsekwencje w całym serwisie były dość...

Autor wpisu: batman, dodany: 20.12.2009 19:35, tagi: javascript

W poprzedniej części opisałem w jaki sposób wskazać aplikacji pliki, które chcemy wysłać na serwer. Dzisiaj zajmiemy się wysłaniem tych plików na serwer. Jak zobaczycie, jest to bardzo prosta rzecz, która nie wymaga zbyt dużo kodu. Najwięcej zachodu jest, jak zwykle, ze wszystkim innym – wyświetlanie ilości plików, pasek postępu, czy resetowanie danych po zakończeniu uploadu. Na początek musimy
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.