włamania

Jak bezpiecznie przechowywać hasła w PHP

Przechowywanie haseł użytkowników określa w jaki sposób dbamy o ich bezpieczeństwo. Powszechna praktyka to używanie funkcji skrótu, które tworzą skrót hasła wprowadzonego przez użytkownika, który w teorii jest nieodwracalny(nie można ze skrótu uzyskać hasła). W praktyce jednak istnieją tak zwane tęczowe tablice(ang. rainbow tables), które w dość szybki sposób z wprowadzonego hasha(rezultat funkcji skrótu) odszukują w bazie hasło. Nasuwa się więc pytanie jak w poprawny sposób zabezpieczyć hasła użytkowników.
Czego nie należy robić by bezpiecznie przechowywać hasła w PHP

Nigdy nie określaj limitu znaków w haśle
Nie określaj znaków, które pojawiają się w haśle. Jeśli ktoś chce mieć $%#$ w haśle pozwól mu na to
Nigdy nie zapisuj haseł, które nie są zaszyfrowane/zahashowane
Nie zapisuj haseł używając funkcji MD5() oraz SHA1() gdyż w dzisiejszym świecie nie są bezpieczne z uwagi na moc obliczeniową komputerów, klastrów itp.
Nie wysyłaj haseł do użytkowników e-mailem(np podczas rejestracji)
W przypadku wykrycia ataku wymuś zmianę hasła dla wszystkich użytkowników przed ponownym zalogowaniem się do systemu

[…]

Autor |Listopad 28th, 2013|PHP|0 komentarzy

Jak zapobiec SQL Injection w PHP

Czym jest SQL Injection?
Z języka angielskiego jest to wstrzyknięcie kodu SQL do programu/skryptu/aplikacji. Program, skrypt, strona, które nie są odporne na ataki SQL Injection stwarzają ogromne ryzko dla użytkownika oraz dla samego systemu. Poprzez SQL Injection atakujący może uzyskać dostęp do naszej bazy danych, modyfikować ją, a nawet usunąć.
Jak wygląda atak SQL injection?
Prześledzmy poniższy kod PHP
$name = $_GET['name'];
mysql_query("SELECT * FROM `uzytkownicy` WHERE `imie` = $name");
parametr $name pobierany jest bezpośrednio z adresu URL, programista zakłada, że użytkownik zawsze wprowadzi imię. Jest to błędne podejście! Co w przypadku gdy ktoś wprowadzi poniższy ciąg znaków?
'Robert'; DELETE * FROM uzytkownicy
Wtedy zapytanie MySQL będzie wyglądało tak:
SELECT * FROM `uzytkownicy` WHERE `imie` = 'Robert'; DELETE * FROM uzytkownicy
Czyli po wykonaniu zapytania SELECT zostaną usunięte wszystkie rekordy z tabeli uzytkownicy!
[…]

Autor |Listopad 28th, 2013|PHP, Tworzenie stron internetowych|0 komentarzy