Autor: Paweł Rajewski
Poświęciłeś wiele czasu i pracy, aby napisać swój super-skrypt. To naturalne, że wolałbyś nie dzielić się tajemnicami swojego warsztatu z przypadkowymi osobami.
A może skrypt zawiera informacje, które nie powinny być w prosty sposób dostępne dla każdego kto podejrzy kod strony? Lub po prostu obawiasz się, że ktoś mógłby uszkodzić skrypt wprowadzając w nim zmiany lub poprawki bez stosownej wiedzy? Jeśli twój skrypt przeznaczony jest wyłącznie dla przeglądarki Internet Explorer, możesz skorzystać z wbudowanego w Explorera dekodowania skryptów.
Internet Explorer potrafi odczytać i uruchomić skrypt, który pozornie na skrypt nie wygląda. Uruchom na przykład taki kod:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=iso-8859-2"> <TITLE>Test</TITLE> </HEAD> <BODY> Ten skrypt ma wywołać okienko alertu <SCRIPT type="text/JScript.Encode" LANGUAGE="JScript.Encode"> #@~^GQAAAA==@#@&lsDD`BGybCłleBbi@#@&KgUAAA==^#~@ </SCRIPT> </BODY> </HTML>
Mimo, że zapis wygląda bardzo dziwnie, skrypt funkcjonuje poprawnie – Internet Explorer „odszyfrował” treść i wykonał stosowne polecenie.
Spróbuj teraz zmienić coś w „zaszyfrowanej” treści i uruchomić stronę ponownie. Przeglądarka odkryje, że skrypt został uszkodzony i nie wykona go. W ten sposób skrypt został zabezpieczony przed zmianami. (Jeśli masz włączoną opcję „Wyświetl powiadomienie o każdym błędzie skryptu” zobaczysz komunikat „Nieprawidłowy znak”).
W jaki sposób zakodować treść skryptu?
Do kodowania skryptów trzeba użyć osobnego programu rozprowadzanego bezpłatnie przez Microsoft – Script Encoder. Program można pobrać z serwisu Microsoftu. Korzystanie z programu jest bardzo proste. Script Encoder uruchamia się z linii poleceń (okienko trybu MS DOS) podając jego nazwę (screnc), nazwę pliku do zakodowania i nazwę pliku wynikowego – zakodowanego. Przykładowo:
screnc test.js test1.js
…oznacza, że należy zakodować plik test.js, a wynik zapisać w pliku test1.js. (Oczywiście sam program screnc.exe powinien znajdować się w katalogu bieżącym, systemowym lub w którymś z katalogów, na który wskazuje zmienna PATH – inaczej nie zostanie odnaleziony).
Jako pliki do zakodowania można podawać zarówno pliki *.js, *.vbs, zawierające samą treść skryptów (bez znaczników HTML), jak i kompletne strony *.htm lub *.html zawierające skrypty. W tym drugim przypadku zakodowana zostanie wyłącznie treść skryptów, a reszta strony pozostanie nienaruszona. Przykład:
screnc test.html test1.html
– zakodowane zostaną wszystkie skrypty zawarte na stronie test.html, a wynikiem będzie strona test1.html.
Zauważ, że znacznik SCRIPT obejmujący zakodowany skrypt zostaje zmieniony. O ile „normalne” skrypty JScript opisywane są zwykle w taki sposób:
<SCRIPT TYPE="text/Jscript" LANGUAGE="JScript"> ... </SCRIPT>
…to skrypty zakodowane opisywane są następująco:
<SCRIPT TYPE="text/JScript.Encode" LANGUAGE="JScript.Encode"> ... </SCRIPT>
Znacznik SCRIPT zmieniany jest automatycznie w przypadku skryptów wpisanych w treść strony, musisz go jednak zmienić ręcznie jeśli zakodowałeś skrypt znajdujący się w pliku zewnętrznym. Pozostawienie znacznika SCRIPT w zwykłej postaci spowoduje nie uruchomienie zakodowanego skryptu.
Skrypty zakodowane przy pomocy Script Encoder-a wyglądają niezrozumiale i są zabezpieczone przed zmianami, ale zostaną odczytane wyłącznie przez przeglądarkę Internet Explorer 5 lub nowszą. Starsze Explorery i przeglądarki innych firm powinny taki skrypt pominąć (nieznany język „JScript.Encode”), ale może się zdarzyć, że spróbują go „wykonać” co zakończy się komunikatem błędu. Kodowania Script Encoder-em nie należy więc stosować w serwisach, które mogą być uruchomione przeglądarkami innymi niż Microsoftu. W takim przypadku można opracować własne rozwiązanie utrudniające odczytanie treści skryptu w rodzaju tego, które przedstawiłem w artykule o utrudnianiu kopiowania tekstów (cz. 2).
Aby sprawdzić czy na pewno mamy do czynienia z przeglądarką potrafiącą odkodować skrypty, można umieścić na pierwszej (wstępnej) stronie serwisu zakodowany skrypt przekierowujący na właściwy adres serwisu (window.location.href=’strona.html’). W przypadku, gdyby skrypt nie został rozkodowany i nie zadziałał, przeglądarka wyświetli stronę ze stosowną informacją. Jest to też niezła metoda na wykrycie nowszych wersji Internet Explorera (od 5.0 w górę). Zamiast odczytywać nazwę, typ, numer wersji przeglądarki, sprawdzamy jedynie czy prosty skrypt zostanie poprawnie odkodowany.
Na koniec parę słów o bezpieczeństwie. Microsoft wyraźnie stwierdza, że kodowanie Script Encoder-em nie jest metodą na ukrycie poufnych informacji. To raczej „unieczytelnienie” zabezpieczające skrypt przed szybkim podejrzeniem treści i przed zmianami. Treść zakodowanego skryptu można odczytać przy pomocy odpowiednich programów dekodujących (rzecz jasna nie rozprowadzanych przez Microsoft), nie należy więc „szyfrować” tym sposobem informacji, które z różnych względów powinny pozostać tajne. Niemniej jako pierwsza linia obrony, i zabezpieczenie przed naruszeniem integralności kodu, Script Encoder sprawdza się znakomicie. To proste, tanie i skuteczne rozwiązanie warte upowszechnienia wśród użytkowników Internet Explorera.
Paweł Rajewski
(3