oneJoomla.org //

Jak ukryć Joomla

Jacek KowalczykCzwartek, październik 23, 2008Tutoriale

Joomla! jest świetnym systemem.  Jednak zdarzają się czasem sytuacje, w których chwalenie się, że korzysta się z darmowego oprogramowania open-source jest nie na miejscu. Dodatkowo, ze względów bezpieczeństwa lepiej nie rozpowiadać o tym jakiego się używa systemu.

Nie ma się oczywiście co oszukiwać, wprawiony użytkownik nie powinien mieć problemów z rozpoznaniem z jakiego systemu korzystamy, wydaję mi się jednak, że warto się pokusić o “przykrycie”  chociaż tych najbardziej rzucających się w oczy elementów.

Zacznynamy od pytania: po czym można poznać, że strona jest oparta o CMS Joomla!? Ja mogę podać od razu co najmniej kilka odpowiedzi, które postaram się opisać poniżej. Może Wy macie jakieś pomysły? Po czym poznajecie strony na Joomla? Czy zdarzyło Wam się kiedyś maskować swoją Joomle?

Standardowe lub popularne darmowe szablony

Sprawa dość oczywista, ale warto o niej o chociaż wspomnieć. Jeżeli po załadowaniu strony oczom użytkownika ukaże się Beez, MilkyWay albo JA_PURITY, to nie będzię on miał żadnych wątpliwości na jakim systemie oparta jest strona.

Punkt ten można jednak rozszerzyć do nieco mniej oczywistego przypadku. Mianowicie, większość dostępnych szablonów do Joomla, wygląda dość podobnie: w miarę ładne, w miarę czyste, poskładane z kwadratowych modułów w dwóch lub trzech kolumnach. Taki wygląd, wskazuje na Joomla, lub chociaż jakiś CMS modułowy, a tego w założeniu chcemy uniknąć. Warto więc próbować niestandardowych rozwiązań graficznych, wyszukiwać ciekawe moduły, ciekawe templaty. Warto również wybrać sobie jakiś gotowy szablon graficzny i zakodować go sobie do Joomla. W razie problemów polecam się.

Charakterystyczne adresy URL

Jeżeli po wejściu na stronę, w pasku adresu przeglądarki widzimy coś w stylu “index.php?option=com_costam&…”, to znaczy, że nasza Joomla stoi wystawiona na postwe losu. Jeżeli chcemy ją ukryć musimy stosować jakąś formę SEF URLi (search engine friendly URLs - adresy przyjazne dla wyszukiwarek). Nawiasem mówiąc czytając ten post, można nabrać wątpliwości czy tego typu adresy są faktycznie przyjazne dla wyszukiwarek, no ale dla użytkowników są na pewno użyteczniejsze.

Dla Joomla 1.5 mamy na tym spory wybór. Ja osobiście zazwyczaj ograniczam się do core’owej funkcjonalności w tym zakresie + SEO patch. Pajmon poleca sh404sef. Nie będę się w tym miejscu rozpisywał o SEFURLach, bo nie ma to sensu. Kiedyś może popełnię osobnego posta na ten temat.

Ikony PDF/Drukuj/Powiadom znajomego

Ikony PDF/Drukuj/Powiadom znajomego wyglądają dość podejrzanie i joomlowato. Joomla oczywiście nie jest jedynym systemem posiadającym takie ikony, ale opisuję jak pozbyć się wszystkiego co może wzbudzić podejrzenia.

Ja tych ikon nie lubię, raczej nie stosuję i polecam je po prostu wyłączyć. Obecna generacja przeglądarek powinna dawać sobie radę z drukowaniem i generowaniem PDFów. Poza tym, zawsze lepiej jest dołączyć osobny plik css do wydruku.

Standardowe pliki JavaScript

W tym momencie kończymy z rzeczami oczywistymi, i przechodzimy do chowania się przed bardziej wprawionymi userami, tzn. takimi którzy zaglądają od czasu do czasu w źródło stron, albo posiadają nieco bardziej zaawansowane narzędzia typu Firebug, YSlow albo JSView.

Joomla!1.5 standardowo ładuje zawsze dwa pliki JavaScript: caption.js i mootools.js. Ja we wszystkich realizowanych projektach tych plików się pozbywam, a jeśli okażą się potrzebne dokładam je do plików JS templatki. Często okazuje się że pliki te nie są potrzebne, i samym opisywanym tu manewrem możemy zaoszczędzić 73 kb wagi strony.

Żeby nie ładować tych plików w sekcji <head>, jeszcze przed <jdoc:include type=”head” />, taki fragment kodu:

<?php
$user =& JFactory::getUser();if ($user->get('guest') == 1) {
   $headerstuff = $this->;getHeadData();
   $headerstuff['scripts'] = array();
   $this->setHeadData($headerstuff);
}
?>

Rozwiązanie to zostało zaczerpnięte z tego tematu forum Joomla. To samo rozwiązanie pojawiło się też tutaj.

Ścieżki dostępu do komponentów strony (js/css/obrazki)

Wszystkie pliki składowe naszej strony mają standardowo ścieżkę typu “http://domenamojejjoomli.pl/templates/nazwatemplatu/css/plik.css”. Jest standardowa ścieżka, a wszystko co standardowe w naszych rozważaniach jest złe.

Proponuje skopiować całą zawartość foldery “templates/nazwatemplatu” oprócz plików index.php i templateDetails.xml do głównego folderu Joomla. Następnie w pliku index.php naszego templayu zmieniamy wszystkie odniesienia do plików css, js i obrazków z takich

<link rel="stylesheet" href="templates/<?php echo $this->template ?>/css/template_css.css" type="text/css" />

na takie:

<link rel="stylesheet" href="css/template_css.css" type="text/css" />

Oczywiście warto tu wspomnieć, że jeżeli chcemy ukryć system Joomla! plik o nazwie template_css.css nie jest najlepszym pomysłem.

Kod HTML generowany przez komponenty/moduły Joomla!

Składniki jądra Joomla takie jak com_content, com_search a także większość standardowych modułów, generują kod który jest łatwo rozpoznawalny, ze względu na charakterystyczne nazwy klas i wartości atrybutów ID różnych elementów.

Jeżeli chodzi o moduły, to przede wszystkim zalecam używanie atrybutu style=”none” w pliku tamplatki, np. <jdoc:include type=”modules” name=”top” style=”none” />

Kolejną rzeczą jest stosowanie tzw. template overrides (nadpisań szablonu?). Więcej o tej technice można dowiedzieć się na oficjalnym forum lub w tym dokumencie. Ponownie nie chciałbym w tym poście zagłębiać się zbytnio w jeden konkretny temat, dlatego napisze tylko to co najważniejsze.

Zmieniając kod szablonów poszczególnych komponentów i modułów, należy przedewszystkim pousuwać klasy bardzo charakterystyczne dla Joomli t.j. “contentpaneopen”, “contentheading”, “componentheading”. Dokładną listę wszystkich klas CSS wykorzystywanych przez core Joomla można znaleźć tutaj.

Nie trzeba oczywiście zmieniać wszystkich, żeby uzyskać zadowalający efekt. Na tym etapie wszystko zależy już od konkretnego projektu, i wykorzystanych w nim dodatków i architektury.

Folder ‘administrator’

Nawet jeżeli wykonamy wszystkie powyższe kroki, i na pierwszy rzut oka (a nawet po zerknięciu w źródło), nie widać że nasza strona jest oparta o J!, to i tak każdy cwany odwiedzający może wpisać w przegladarkę “http://naszadomena.pl/administrator”. Ekran logowania do panelu administracyjnego nie pozostawia żadnych złudzeń co do użytego systemu.

Problem ten można dość łatwo rozwiązć wykorzystując jeden z dwóch znanych mi sposobów: albo instalujemy bardzo zgrabny dodatek jSecure Authentication, albo wykorzystujemy to rozwiązanie (dla bardziej zaawansowanych).

Strony z błędami

Ukrycie Joomli wymaga zastosowania ładnych stron z błędami.

Strony z błędami 404 to temat który często przewija się przez rózne fora i blogi dotyczące Joomli (chociażby tu i tu). Mamy też oficjalny artykuł w dokumentacji na ten temat.

Oto moje autorskie rozwiązanie. W systemie tworzymy artykuł,  który będzie wyświetlany na stronie z błędem. Zapamiętujemy ID artykułu. W katalogu “templates/nazwatemplata” tworzymy plik error.php o następującej treści:

<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
 
if($this->error->code = '404'){
include('http://{twoja domena}/index.php?option=com_content&amp;id={numer id twojego artykułu}');
header("HTTP/1.0 404 Not Found");
}
?>

Uważam, że jest to dobre rozwiązanie. Strona z błędem będzie wyglądała ładnie (załaduje się cały template), nie zmieni się adres w pasku przeglądarki oraz strona będzie miała prawidłowy status (404).

Restricted accessy

Według mnie pozostał tylko jeden sposób rozpoznania Joomli, po wykoaniu wszystkich powyżej opisanych czynność, mianowicie “Restricted Accessy”. Każdy (no prawie każdy) plik składowy instalacji Joomla zawiera linię:

defined( '_JEXEC' ) or die( 'Restricted access' );

Oznacza to tyle, jeżeli ten plik jest ładowany przez przeglądarkę bezpośrednio, wyświetl komunikat “Restricted Access” i zakończ działanie skryptu. Działanie tego mechanizmu możemy podejrzeć wpisując w przgądarkę np. http://adresmojejjoomli.pl/CHANGELOG.php.

Według mnie jest to dość dziwne, że treść tego komunikatu jest ustawiona na sztywno w każdym pliku. Nie można go zmienić ani w konfiguracji, ani nawet plikami językowymi.

Można to rozwiązać według mnie tylko w jeden sposób: podmienić wspomnianą linię we wszystkich plikach Joomla. Można tego dokonać np. przy użyciu PSPad, który to program ogólnie polecam. Moja propozycja kodu który można wstawić zamiast tej linii:

if (!defined( '_JEXEC' )){
header("HTTP/1.0 404 Not Found");
include('http://{twojadomena}/index.php?option=com_content&id={id}');
exit;
}

Oczywiście, wstawiamy ID artykułu błędu który wcześniej stworzyliśmy.

UWAGA - podany sposób jest bezczelnym core hackiem, który może narazić twoją stronę na niebiezpieczeństwa. Jeżeli zdecydujesz się go stosować, to na własną odpowiedzialność. Podane czynności będziesz musiał powtarzać po każdej aktualizacji systemu.

Podsumowanie

Pokazałem kilka cech ujawniających użytkownikom, że strona jest oparta na Joomla, i metody jak te cechy “przykryć”. Nie twierdze, że ta lista jest kompletna, na pewno nie jest. Mam nadzieję, że coś z podanych tu informacji Wam się przyda. Oczywiście zapraszam do wypisywania w komentarzach innych sposobów poznania stron na J!.

Tagi

, , , , , , , , , , , , , , , , , , , ,

Podobne wpisy:

Jedna odpowiedź na “Jak ukryć Joomla”

  1. Zmiany, zmiany, zmiany… | oneJoomla.org

    [...] WP-Syntax, którego potrzebę zdecydowanie poczułem pisząc ten tutorial [...]

Zostaw komentarz