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.

Skasowane dane to nie zawsze tragedia - ściągnij program i odzyskaj dane

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

Skasowane dane to nie zawsze tragedia - ściągnij program i odzyskaj dane