Ostatnio natknąłem się na bardzo fajną rzecz – możliwość wysyłania pliku CSS w nagłówku HTTP. Daje to bardzo łatwą możliwość ukrycia swoich stylów CSS przed niedoświadczonymi developerami, niepożądanymi i wścibskimi oczami.
Oczywiście tak przesłane style CSS do strony nie stanowią większego problemu do obejścia dla doświadczonego developera (Firebug), niemniej nie każdemu będzie chciało się analizować nagłówki HTTP.
Za przesyłanie odnośnika do CSS odpowiada nagłówek Link, a przykładowa składnia wygląda następująco:
1 | Link: <http://www.blog.kamilbrenk.pl/css-http.css>; REL=stylesheet |
W naturalnych warunkach należałoby to przepisać następująco (zamieszczając kod w elemencie HEAD):
1 | <link rel="stylesheet" href="http://www.blog.kamilbrenk.pl/css-http.css"> |
To samo można zrobić przy pomocy .htaccess (lub po stronie serwera w pliku konfiguracyjnym):
1 2 3 | <IfModule mod_headers.c> Header set Link "<http://www.blog.kamilbrenk.pl/css-http.css>; REL=stylesheet" </IfModule> |
Wsparcie przeglądarek
Niestety tutaj już nie jest tak kolorowo, bowiem linkowanie do stylów przez HTTP wspiera jedynie Opera i Firefox.
W związku z tym wpis ten należy potraktować jedynie jako ciekawostkę i pozostaje czekać na pełne wsparcie przez pozostałe przeglądarki (lub też kombinować – wykrywać przeglądarkę i odpowiednio z nią postępować).
Nie wgłębiałem się w specyfikację, ale to znaczy, że za pomocą takiego triku można przesyłać dowolny kawałek kodu HTML, który dzięki atrybutowi „rel” pojawi się w określonym miejscu strony? Są inne zastosowania tej metody?
Odpowiedz mi na JEDNO zasadnicze pytanie. Jaki sens ma ukrywanie CSS ? Ja do teraz nie rozumie chorej manii niektórych ludzi którzy próbują ukrywać HTML czy CSS w obawie przed skopiowaniem ich cudacznego działa.
Rozumiał bym gdyby chodziło o coś skomplikowanego w JS. Coś takiego że tęgi umysł tego nie ogarnia. Ale CSS ? :|
@Ksywa:
to zwykła ciekawostka, też nie znam zastosowania za bardzo ;)
@Tomasz:
wybacz, ale nie ogarnąłem Twojego komentarza :-)
Ciekawym rozwiązaniem może być wysyłanie dodatkowych styli dla wybranych przeglądarek (szkoda, że nie zadziała to w IE 6 lub innych problematycznych). Zmniejszyłoby to niepotrzebne wstawki w nagłówkach head.
@Ksywa: zdziwiłbyś się, jakie cuda można w CSSie zrobić. Ja bym akurat takiego kodu nie próbował ukrywać, ale ludzie mają różne pomysły. ;]
@Kamil: mam na myśli bardziej ogólne podejście – bo na pewno „stylesheet” nie jest jedyną możliwą wartością parametru „rel”, a ponadto na pewno można zamiast podanego przez Ciebie tagu „link” podać dowolny kod HTMLa. Pytam po prostu o akademicki przypadek – jaka będzie reakcja przeglądarek. ;]
@Marcin Kłeczek
Dobre rozwiązanie, nie trzeba byłoby mieszać i dodatkowo bawić się w widoku strony dla IE i innych gniotów. Niestety IE 6 i późniejsze są na tyle zrąbane, że nawet tego fjuczeru nie obsługują :)
@Tomasz
Faktycznie, „stylesheet” pewnie nie będzie jedyną możliwą opcją. Zapewne też zadziała dodanie innych wartości elementu LINK, niemniej jednak nie wiem jak zareagowałyby na to przeglądarki (rel=”shortcut icon”) – nie chce mi się testować, bo i tak nie będę używał w najbliższym czasie. ;)
Heh, od razu przypomniały mi się strony sprzed kilku lat gdy webmasterzy bronili się przed prawym przycikiem myszy, aby nikt źródła HTML nie wykradł ;)
Trzeba zrozumieć, że strona WWW to nie aplikacja zamknięta w pliku wykonywalnym (z czego i tak da się wyciągnąć źródła).
@matipl:
Zgodzę się, że ukrywanie kodu HTML/CSS/JavaScript jest nieskuteczne w każdym przypadku – nie da się skutecznie ukryć kodu, który przeglądarka musi odczytać w jawnej postaci.
Wpis został popełniony jako ciekawostka.
@Kamil Brenk: rozumiem, że to ciekawostka. Tak jak kiedyś pisało się o „blokadzie”.
Ja nie rozumiem po prostu tych osób, które tak płytko myślą że to coś pomoże.
@mati
Jasne, zgadzam się w 100%.
Nawet zaciemniając kod JavaScript i robiąc z niego jedną wielką papkę można napisać UserScript przeglądarkowy, który przejdzie po wszystkich metodach window czy stylach CSS, odczyta je i nam wyrzuci w wersji „czystej”, bez klikania „Źródło strony”.
Przyznam się – nie sprawdzałem, użyteczność zerowa – ot kolejny bajer. Bajer o tyle fajny, że można by wysyłać jedną paczkę do klienta i nadal zachować śliczne rozdzielenie CSS i HTML. A jeśli działa też dla JS – to w ogóle fantastisz.
A ja jestem „źródłowym ekshibicjonistą”, nie po to staram się robić śliczny kod, by nie można było na niego popatrzeć :D
Jeszcze trochę i tak będą wyglądać całe strony:
http://mathiasbynens.be/demo/css-without-html
:-)
Nie kuś, jeszcze dodam to do frameworka :D