Ostatnie wiadomości
Akurat tak się złożyło, że musiałem dzisiaj zalogować się na konto u jednego z większych hostingodawców, na które ostatni raz logowałem się jakieś 5-6 miesięcy temu. Logowanie jak logowanie - wpisuję login, wpisuję hasło ... nie działa?
Szybko w pamięci przeleciałem standardową listę nastu haseł, których używam. Skrzyżowałem je z różnymi wariacjami na temat loginu, połączyłem kilka haseł by wytworzyć prawdopodobnie to, które użyłem - nic. Następny przystanek, poczta!
Szybko udało mi się wyszukać mail z danymi technicznymi do konta - ftp, login, hasło ... "takie jak podane w momencie rejestracji". No nic - wracamy na stronę i wypełniamy formularz przypomnienia hasła. Klik klik, link w mailu, klikamy, ustawiamy nowe hasło, klik ... "hasło musi składać się z przynajmniej 8 znaków, dwóch dużych liter, jednej małej i jednego znaku specjalnego". Ok ... tego się nie spodziewałem.
Niby jest to dobra praktyka - zwiększa bezpieczeństwo danych etc. Do co ważniejszych informacji sam używam hasła z prawie 20 znaków (bruteforce może trochę potrwać), nie słownikowego (random) bez żadnych "ciągłości", z cyferkami etc. Niestety, bez dużych liter. W takim wypadku mam dwa wyjścia. Albo sobie hasło zapiszę gdzieś, żeby za pół roku nie kombinować, albo zmienię co trzeba i znowu je zapomnę. Ja mogę zapomnieć - Kowalski pewnie zapisze.
Zapisze na kartce, zapisze na poczcie, zapisze w notatniku on-line. Tym samym Kowalski, który używa na co dzień silnego hasła musi sobie nowe "silne" hasło gdzieś zapisać zmniejszając jego bezpieczeństwo. Ja rozumiem, że oni robią to w trosce o mnie - ale czy nie wystarczy, jeżeli pojawi się stosowny komunikat, że "hasło jest zbyt słabe by je zastosować". Szczególnie takie rozwiązanie śmieszy mnie w połączeniu ze wskaźnikiem trudności hasła poniżej, który pokazuje mi "trudne 4/5".
Pozostaje mi mieć nadzieję, że będę pamiętał o tych paru dodatkowych literkach dodanych do hasła. A jak nie, to za 5-6 miesięcy znowu przyjdzie mi wypełnić formularz przypomnienia.
Home.pl jest jednym z nielicznych, popularnych, usługodawców, którzy udostępniają usługę CRON. No, prawie - jest to ich implementacja, która polega na okresowym wywoływaniu plików PHP, Perla, Pythona lub CGI - dzięki temu możemy zaimplementować np. automatycznie rozsyłający się newsletter etc.
W swojej dokumentacji Home.pl stwierdza:
Środowisko uruchomieniowe skryptów jest identyczne ze środowiskiem, w jakim uruchamiane są skrypty na serwerach wirtualnych. W praktyce wywołanie takie niewiele różni się od zwykłego wywołania GET po protokole HTTP.
Dla mojej małej główki równa się to z czymś takim:
telnet mojadomena.pl 80
GET /cron-hourly.php HTTP/1.1
Host: mojadomena.pl
Connection: Close
Co się jednak okazuje? Panowie z Home poszli na łatwiznę i nawet o tym nie wspomnieli - otóż CRON po prostu skanuje FTP w poszukiwaniu odpowiednich plików i wywołuje je przez interpreter CLI.
Efekt? Zmienna $_SERVER['HTTP_HOST'] ma złą wartość - zamiast mojadomena.pl znajdziemy tam home.pl - i tak, dowiedziałem się o tym "the hard way" kiedy nagle dostałem maila, który zamiast z adresu info@mojadomena.pl przyszedł z info@home.pl
Update - okazuje się, że problemem nie jest zła informacja w HTTP_HOST, ale jej .. brak. A w tym wypadku Home sam dodaje swoją domenę do adresu. Poniżej przykład wysyłanych informacji (wysłane print_r($_SERVER) na mój adres (zamieniłem login serwera na "LOGIN" w celu ochrony prywatności):
To: btm@anfo.pl
Subject: Cron na home
From: info@home.pl
Array
(
[QUERY_STRING] =>
[REQUEST_METHOD] => GET
[REMOTE_HOST] => localhost
[REMOTE_ADDR] => 127.0.0.1
[DOCUMENT_ROOT] => /
[SERVER_SOFTWARE] => IdeaCron
[SERVER_PROTOCOL] => HTTP/1.0
[GATEWAY_INTERFACE] => CGI/1.1
[PATH] => /bin
[TMP] => /tmp
[TMPDIR] => /tmp
[SERVER_ID] => LOGIN@home
[SERVER_NAME] => LOGIN.home.pl
[SERVER_ADMIN] => LOGIN@home.pl
[SCRIPT_NAME] => /cron-5min.php
[SCRIPT_FILENAME] => /cron-5min.php
[REQUEST_URI] => /cron-5min.php
[PATH_INFO] => /cron-5min.php
[PATH_TRANSLATED] => /cron-5min.php
[PHP_SELF] => /cron-5min.php
[REQUEST_TIME] => 1253531102
[argv] => Array
(
)
[argc] => 0
)
Przed chwilą dzięki Redditowi trafiłem na stronkę Dive Into HTML5 opisującą nowości, jakie przynosi nam HTML5.
Strona wyglądem przypomina książkę - nic w tym dziwnego, ponieważ z tego co pisze autor po ukończeniu dzieła zostanie ono wydane w wydawnictwie O'Reilly (znanego z licznych serii książek z dziedziny IT i nie tylko).
Jak można wywnioskować, strona jest w trakcie tworzenia - na razie autor pokrótce opisał element . Pozostaje zaglądać na stronę częściej. Ja na pewno będę ;-)
Ostatnio przypadło mi w firmie robić projekt, który nie dość, że jako tło strony wykorzystuje animowany Flash, to całość strony znajduje się na przeźroczystej warstwie (spod której widać w/w Flasha), a na niej jest jeszcze menu na przeźroczystej warstwie.
Oczywiście w dobie nowoczesnych przeglądarek wykorzystujących silniki Mozilli, Webkit czy Opery nie jest to duży problem, o tyle z IE nie jest już tak różowo. Jasne - można odpowiedni efekt uzyskać używając filtrów dzięki czemu jako tło można poprawnie wyświetlić PNG, jednak ma to swoje minusy.
Najpoważniejszym z nich jest niewątpliwie problem z linkami znajdującymi się na owej warstwie - często zdarza się, że stają się one nie klikalne - powszechnym jest uważanie, że podczas nakładania filtru zmienia się z-index warstwy i fizycznie przesłania ona tekst (nie działają linki, nie da się zaznaczać tekstu etc.).
Oczywiście jest to wersja nie do zaakceptowania jako iż dużo osób, w tym klient, używa jeszcze Internet Explorer 6. Na szczęście projekt jest w miarę nie skomplikowany, więc można było zastosować inną technikę.
Zamiast jednej warstwy z tekstem i przeźroczystym tle zastosowałem dwa DIV-y - jeden zawiera tekst i ogólnie treść strony, drugi zaś przeźroczyste tło i dzięki zastosowaniu position: absolute i z-index ustawiony jest tak, by znajdował się pod DIV-em zawierającym treść strony.
Dodatkowo dodałem jeszcze kawałek kodu Java Script który ustawia wymiary obu DIV-ów na jednakowe.
document.getElementById('bgOverlay').style.height = document.getElementById('content').scrollHeight + 'px';
document.getElementById('bgOverlay').style.width = document.getElementById('content').scrollWidth + 'px';
Zobacz przykład - oczywiście głównie chodzi o użytkowników IE6, pozostałe przeglądarki poprawnie wyświetlają PNG i takie zabiegi są niepotrzebne.