Wyvern zamiast HTML i JavaScriptu: bezpieczne programowanie aplikacji webowych według NSA

Strona główna Aktualności

O autorze

Każdy, kto miał okazję zajmować się tworzeniem witryn i aplikacji webowych, przyzna, że nie jest to wdzięczne zajęcie. Programistyczny miszmasz, wątpliwej jakości frameworki, niekompatybilność przeglądarek (szczególnie mobilnych) – to wszystko sprawia, że webdeweloperzy z zazdrością mogą spoglądać na kolegów piszących w spójnych i dopracowanych natywnych środowiskach Microsoftu czy Apple. A gdyby tak zacząć od nowa i przynieść WWW pożądaną spójność? To właśnie chce zrobić amerykańska Agencja Bezpieczeństwa Narodowego (NSA) ze swoim projektem – językiem Wyvern.

Nazwa nowego projektu, zapożyczona od heraldycznej bestii – dwunogiego, skrzydlatego smoka – nie jest całkiem przypadkowa. W angielskiej i francuskiej heraldyce wywern symbolizuje ochronę, bezpieczeństwo i panowanie nad wieloma krajami. Jako język programowania, Wyvern ma pomóc deweloperom w pisaniu aplikacji i witryn bez konieczności korzystania z mieszanki JavaScriptu, HTML, CSS, PHP, XML, SQL, rozsianych po dziesiątkach i setkach plików kodu źródłowego i konfiguracji.

Jak tłumaczy jeden z głównych autorów języka, Jonathan Aldrich, współczesne aplikacje webowe są budowane z nieskoordynowanej mieszaniny artefaktów stworzonych w różnych językach, formatach plików i technologiach. Aplikacja może np. korzystać z JavaScriptu po stronie klienta, HTML dla opisania struktury, CSS dla prezentacji, XML dla ajaksowej komunikacji, a do tego mieszanki Javy, plików konfiguracyjnych i oprogramowania bazodanowego po stronie serwera. Ta różnorodność zwiększa koszt nauki niezbędnych technik programistycznych, utrudniając zarazem całościowe zabezpieczenie oprogramowania.

Zadania NSA nie ograniczają się tylko do szpiegowania internautów (czy nawet do polowania na terrorystów w świecie World of Warcraft) – obowiązkiem agencji jest dbanie o cyfrowe bezpieczeństwo Stanów Zjednoczonych. Stąd właśnie idea Wyverna: tak jak skarb strzeżony przez mityczną bestię uważany jest za bezpieczny, tak też oprogramowanie napisane w Wyvernie będzie znacznie bezpieczniejsze niż to, co uzyskać można dziś, z wykorzystaniem wspomnianej wyżej mieszanki.

Wyvern ma automatycznie ustalać, z jakiego podjęzyka ma korzystać na podstawie typu danych, który aktualnie jest przez programistę używany. Mogą być to zarówno proste ciągi alfanumeryczne czy liczby zmiennoprzecinkowe, jak i bardziej złożone struktury danych, takie jak strony WWW czy kwerendy do baz danych. Twórcy języka porównują jego możliwości ze zdolnym negocjatorem – dyplomatą, który płynnie przechodzi między różnymi językami, rozmawiając z członkami wielonarodowego zespołu, tak by umożliwić ich współpracę.

W ten sposób Wyvern ma np. wyeliminować wszystkie zagrożenia związane z atakami typu SQL Injection, gdzie wykorzystuje się zdeformowany ciąg znaków do wywołania pożądanej przez napastnika operacji na bazie danych, wykorzystując to, że w często w programie może dochodzić do łączenia łańcuchów znaków, z których budowane jest następnie polecenie w języku SQL. W ten sposób, wykorzystując formularz logowania sklepu internetowego można np. zmusić aplikację do wyświetlenia listy użytkowników sklepu internetowego. Programowanie w Wyvernie ma całkowicie wyeliminować takie „ręczne” operacje na łańcuchach, eliminując samą możliwość ataku tego typu.

Co szczególnie ciekawe, obok standardowo osadzonych w Wyvernie podjęzyków, będzie można korzystać z nowych, po ich uprzednim zdefiniowaniu, bez martwienia się o to, jak zostaną wykorzystane. W ten sposób język ten będzie mógł być wykorzystywany do bardzo różnego typu aplikacji – nic nie stoi na przeszkodzie, by np. pisana w nim aplikacja z modułami statystycznymi korzystała z możliwości specjalistycznego języka R, a aplikacja z modułem sztucznej inteligencji – miała dostęp do LISP-a czy Prologu.

Wyvern jest rozwijany na wolnej licencji GPLv2 i obecnie jest wciąż projektem rozwojowym, eksperymentalnym. Wersji stabilnej języka powinniśmy spodziewać się jeszcze w tym roku. Do jego uruchomienia należy mieć zainstalowaną w systemie Javę 8, do kompilacji zaleca się zaś stosowanie środowiska programistycznego, takiego jak np. Eclipse Kepler czy IntelliJ 13+. Zainteresowani formalną specyfikacją języka i przykładowymi programami powinni odwiedzić stronę Jonathana Aldricha. Kod źródłowy znajdziecie tymczasem na GitHubie.

© dobreprogramy