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