Weryfikacja właściciela strony

Aug 17

Niedługo być może zaimplementuje w jeden z moich nowych projektów weryfikację właściciela strony. Pomysł pozwoliłem zrobię zaczerpnąć z Google Webmaster Tool. Natomiast troszeczkę zmieniłem jeden ze sposobów, aby mniej się napracować. Zweryfikowanie właściciela witryny odbywa się po wywołaniu jednej z poniższych metod. Oto one:

  • Weryfikacja poprzez upload pliku na serwer.
  • Chwilowe dodanie meta-tagu do sekcji HEAD.

W stosunku do google, zmianie uległa u mnie weryfikacja pierwsza.

Sposób Google: Upload pliku bez zawartości (lub z dowolną) o nazwie jako hash aktywacyjny, np: <?php md5( secret-salt ) . '.html'; ?>

Mój sposób: Upload pliku ze stałą lub hashowaną nazwą o zawartości 32 znakowego hashu md5.

Zmienia się tylko zawartość pliku. Dlaczego? Niektóre strony zamiast zwracać kod 404 dla nieistniejących plików/podstron zwracają kod 200 (sukces). Wówczas trudno stwierdzić, czy jest to oczekiwany plik. Google dodatkowo sprawdza, czy strona zawsze zwraca kod 200, ale po co się babrać i wykonywać więcej requestów, jak można zrobić to trochę prościej. Jeżeli plik nie będzie fizycznie istniał na serwerze, a strona zwróci kod 200, skrypt musi oczekiwać w odpowiedzi tylko i wyłącznie hashu strony. Nazwa pliku na serwerze może być stała, ale niekoniecznie (dla większego bezpieczeństwa zalecane jest logiczne hashowanie nazwy pliku).

Przygotujmy zatem zarys klasy (od tego zawsze zaczynam):

  • public function CheckFile($sUrl, $sFilename) funkcja sprawdzająca hash w pliku na serwerze.
  • public function CheckMetatag($sUrl, $sTagName) funkcja sprawdzająca hash w metatagu.
  • public static function Hash($sUrl) funkcja budująca hash na postawie adresu URL (jako że podajemy go jako parametr obu metod sprawdzających, zmienna jest łatwo dostępna dla systemu).
  • public static function Metatag($sHash, $sTagName) generowanie kodu XHTML dla metatagu – metoda potrzebna nam przy podaniu użytkownikowi meta tagu oraz do prega w metodzie CheckMetatag();
  • protected static function _Request($sUrl) tworzenie requestu za pomocą HttpRequest i zwracanie treści metodą getResponseBody() wspomnianej klasy.

Jako że komponent jest niejako zewnętrzną biblioteką, nie mogłem go wcisnąć w komponentu frameworka. Otrzymał status biblioteki: VframeLib_WebVeryfication.

Oczekiwane API:

var_dump(VframeLib_WebVeryfication::CheckFile('http://example.com/', 'Veryfication.txt')); // bool result
var_dump(VframeLib_WebVeryfication::CheckMetatag('http://example.com/', 'Veryfication'));
// bool result

Gotowy kod:

http://athlan.pl/code/VframeLib_WebVeryfication

Uwaga. Kod jest w fazie testowej. Wszelkie Wasze komentarze będą uwzględniane przy poprawkach.

Read More

Vframe 2.3.1 relased

Jun 13

Dziś wydana została nowa wersja Vframe oznaczona numerkiem 2.3.1. Większe zmiany:

  • Możliwość tworzenia grup routingów za pomocą wyrażeń regularnych (grupowanie regułek, aby przyspieszyć działanie).
  • Automatyczne wczytywanie konfiguracji Vframe_Router_Advenced::PatternsBuild().
  • Wydzielenie głębi konfiguracyjnej dla kontrolerów (kontroler News_Admin_Vcontroller ma plik: /Configuration/Controllers/Admin/News.php).
  • Zaimplementowanie Cache_Engine (wzorzec fabryki) oraz silników: File, Memcache, APC.
  • Zaimplementowanie Image_Engine (wzorzec fabryki), silnik GD.
  • Zaimplementowanie Db_Layer (wzorzec fabryki), silniki MySQL, SQLite.
  • Zniesiona została stała V_APP oraz V_APP_REAL.
  • Dodanie nowego komponentu Vframe_Mail_Inbox (pobieranie poczty) oraz silnika Vframe_Mail_Inbox_Engine_Imap.
  • Zabezpieczenie unikalnego klucza sesji frameworka, dodanie V_APP_SESSION_HASH.
  • Zmiana struktury Exceptions oraz Interfaces – teraz klasy znajdują się w głównym pliku komponentu, nie posiadają wydzielonych plików.
  • Dodanie pluginu Vframe_Controller_Front_Plugin_Gzip.

Konieczne zmiany w aplikacji:

  • Pliki konfiguracyjne modelu Db_MySQL na Db_Layer_MySQL, analogicznie dla innych baz.

Zalecane zmiany:

  • Wszelkie define() zamienić na Vframe::_() (argumenty analogiczne) oraz załadować główny plik konfiguracyjny po frameworku (aby uzyskać funkcję statyczną _() ).
  • Usunąć V_APP_REAL.
  • Aby użyć pluginu Gzip: $oFrontController->Plugin(new Vframe_Controller_Front_Plugin_Gzip(6)); gdzie 6 to stopień kompresji, jeżeli null, wówczas domyślnie 6.

Linki:

Read More

Style życia na life-styles.pl

May 20

Od niedawna w sieci istnieje nasza strona na konkurs Diversity organizowany przez Motorolę o którym pisałem.

Witryna w dostępna pod adresem life-styles.pl prezentuje style życia z podziałem na kategorie:

  • muzyka,
  • sport,
  • religie,
  • moda,
  • jedzenie.

Wykorzystuje komponent Vframe_Language i nie wymaga bazy danych. Jest to pierwsza (prosta) aplikacja oparta na Vframe 2.x z otwartym kodem źródłowym.

Read More

Vframe 2.2

May 11

Dziś zakończyłem prace nad Vframe 2.2.0. Aktualna wersja nie jest kompatybilna wstecz do wersji 2.1.1.

Przebudowana została struktura stałych frameworka. Dotychczas używał on zwykłych, wbudowanych stałych PHP w celu ustalania kluczowych zmiennych konfiguracyjnych (np. ścieżka kontrolerów). Pojawił sie problem przy tworzeniu aplikacji, gdy ta musiała pobrać pliki konfiguracyjne oraz użyć modeli z kilku innych. Framework powinien działać płynnie, używając wbudowanych rozwiązań, nie martwiąc się o ścieżki. Jak wiemy, nie można nadpisać stałej przypisując jej inną wartość. Taki przypadek został uznany jako jeden z 7 grzechów głównych programisty PHP.

Możliwie były 2 rozwiązania:

  • Implementacja definicji “stałych” używając wbudowanego od wersji 2.0 wzorca Registry.
  • Wdrożenie nowego rozwiązania, poprzez odwołanie się do Vframe::_(); ( public static function _( string $sParam, mixed $mValue ) )

Wybrałem drugie, ze względu na to, że nazwy Registry oraz stałych mogą się przez przypadek pokryć.

Vframe 2.2.0 jeszcze nie jest dostępny do pobrania w repozytorium.

Co w wersji 2.3?

PHP w wersji 5.3 idzie w bardzo dobrym kierunku. Zapowiada się implementacja magicznej metody __callStatic() analogicznej do __call(). Problem będzie w instalacji najnowszej wersji na polskich serwerach. W wersji 5.3 odkryto błąd, który tracił na wydajności (łączenie stringów poprzez znak kropki zużywał dużo więcej pamięci niż poprzez użycie .=). Może to przekona polskie firmy hostingowe do update’u paczki PHP. Póki co, __callStatic() można sobie zadeklarować ręcznie, a do działania wykorzystać eval().

Co za tym idzie klasa Vframe_Loader zostanie przebudowana używając __callStatic();

Read More

Vframe_Form obsługa formularzy

Feb 19

Ostatnio zdenerwowałem się pisząc walidację formularza i nakładanie filtrów na pola formularzy w jednym z panelu administracyjnych. Co chwilę coś nie działało. Framework jest po to, aby unikać takich sytuacji. Aby uniknąć takich sytuacji w przyszłości postanowiłem napisać dość przydatną klasę Vframe_Form integrując ją z Vframe_Validator i Vframe_Input (pluginem POST). Zanim się napisze klasę, wypadałoby napisać mały prototyp.

Tak oto powstała klasa obsługi formularzy oraz jego elementów. Użycie jest bardzo wygodne, po zainicjowaniu $oForm->init() nasz komponent wykonuje filtracje, a następnie walidacje danych wejściowych. Ewentualne błędy można wychwycić poprzez wywołanie metody $oForm->error(‘nazwa_pola’); – zwrócony zostanie string w przypadku wystąpienia błędu, null jeżeli go nie ma. Aby sprawdzić, czy wystąpiły jakieś błędy przy walidacji – nie podajemy parametry metody error: $oForm->error(); Zostanie zwrócona liczba błędów (jeden dla każdego pola), jeżeli 0 – możemy wykonać akcję.

Image by Deiru.

Read More

Vframe 2.0 relased

Feb 14

Dziś światło dzienne ujrzał Vframe 2.0, poprzednia wersja nie jest już rozwijana.

http://framework.vgroup.pl/repository/

Zobacz/Pobierz wydanie Vframe2

Narazie dostępny kod frameworka oraz prosta aplikacja (splash), niedługo pojawi się przykład CMS oparty na Vframe 2.0. W sferze planów przygotowywany jest VframeAdminGenerator tworzący panel administracyjny na podstawie plików konfiguracyjnych panel administracyjny.

Read More