27
header() to nie zabezpieczenie
Dzisiaj pod lupę postanowiłem zaciągnąć bardzo często używaną funkcję header(). Właściwie nie tyle samą funkcję, co jej złe wykorzystanie. Oto jak wygląda kod, z którym zetknąłem się już kilka razy:
<? if( !isset( $_SESSION['session']["authCode"] ) ) header("Location: login.php"); echo "WTF is wrong with my awesome code?!"; ?> |
A poniżej słów kilka dlaczego jest on zły.
19
HTML5, a zabezpieczenia obrazków przed kopiowaniem
Wszystko co wyświetlane jest po stronie klienta jest w praktyce niemożliwe do zabezpieczenia przed kopiowaniem. Jedynym sposobem jest utrudnienie kopiowania, tak, aby dla przeciętnego Kowalskiego było ono zbyt trudne do osiągnięcia, a dla robotów przeczesujących Sieć – nieopłacalne (ze względu na czasochłonność wydobycia odpowiednich danych).
Poniżej prezentuję garstkę lekkich przemyśleń jak można taki efekt osiągnąć (działa tylko dla małych obrazków, wymiary 256×256 zajmują jeszcze znośny czas generowania).
W skrócie, co chcemy osiągnąć: zablokowania możliwości skopiowania metodą zapisz jako/PrintScreen/podania bezpośredniego linka do obrazka.
11
ANDROID_ID vs iOS UDID 1:0
Metody identyfikacji danego urządzenia zawsze wywoływały pewne kontrowersje wśród samozwańczych (i tych niesamozwańczych) obrońców prywatności w Internecie. Rzućmy okiem na dwa produkty – jeden od Apple, drugi od Google.
19
Zabugowane błędy
Dzisiaj trochę o PHP – z naciskiem na argumenty dlaczego error_reporting() jest dobry i powinno się z niego korzystać. Niestety, bardzo rzadko spotykam się z kodami, w których figuruje banalna linijka: error_reporting(0);
A szkoda – błędy wypluwane przez interpreter powinien widzieć tylko administrator (serwer produkcyjny?), a komunikację z użytkownikiem powinno zapewniać napisane GUI.
27
ZeuS – kilka słów o nim
Banki zaczynają ostrzegać o niebezpieczeństwie. Do polskiej sieci zawitała wersja ZeuSa, która potrafi omijać dwuskładnikowe uwierzytelnienie. Pojawia się coraz więcej informacji o tym malware. Rzućmy okiem na pare szczegółów opisujących jego działanie.
27
Historia zapytań MySQL
Załóżmy, że mamy pełny dostęp do maszyny pewnego użytkownika (logowanie przez SSH na konto roota). Załóżmy również, że jesteśmy wyjątkowo chciwi i chcemy poznać hasło właściciela przechowywane w bazie MySQL. Sprawę niech skomplikuje fakt, że wszystko trzymane jest w postaci zahashowanej algorytmem SHA-1. Zero szans na łamanie hasła metodami brute-force/tablicami tęczowymi. Jedyną iskierkę nadziei daje fakt, że kiedyś root wpisywał to hasło w SQL shell-u posługując się zapytaniem:
INSERT INTO tajne (my_password) VALUES (sha1('tajne_haselko'))
A to już wiele zmienia.