Który język programowania internetowego jest najbezpieczniejszy?
Kwestia ta jest rzeczywiście sporna i zawsze wywołuje gorące spory ze wszystkich obozów. Istnieje wiele sposobów, aby pokroić tort w tym zakresie - WhiteHat Security zajął się tym w ostatnim wydaniu swojego raportu Website Security Statistics Report, w którym przeanalizował statystyki dotyczące internetowych języków programowania i ich porównywalnych mocnych stron w zakresie bezpieczeństwa.
Firma zajmująca się bezpieczeństwem przeprowadziła oceny luk w zabezpieczeniach 30 000 stron internetowych pod swoim zarządem w celu zmierzenia wydajności bezpieczeństwa ich podstawowych języków programowania i frameworków. Poniżej przedstawiono kilka najważniejszych informacji płynących z jego ustaleń.
Po pierwsze, zastrzeżenie: jak w przypadku każdego niezależnego badania, należy wziąć pod uwagę zakres badań przed wydaniem jakichkolwiek osądów dotyczących bezpieczeństwa języka (lub jego braku). Jeśli chodzi o raport WhiteHat Security, 30 000 stron internetowych wykorzystanych w badaniu należy do klientów WhiteHat i wydaje się reprezentować stary panteon internetowych języków programowania: ASP/.NET, Perl, PHP, Java i ColdFusion.
Te wczesne pionierskie języki i frameworki bez wątpienia odegrały kluczową rolę w tworzeniu aplikacji internetowych tym, czym jest dzisiaj; To powiedziawszy, nowsze języki i frameworki, takie jak Ruby/Ruby-on-Rails, Python (Django/Flask) i Go, stały się od tego czasu popularnymi opcjami programowania internetowego.
Poniższa infografika z Codeeval przedstawia aktualny stan języków kodowania w 2015 roku. Dla wielu może się to wydawać dokładniejszym odwzorowaniem krajobrazu języków programowania.
Różnice w kategoryzacji mogą odpowiadać za niektóre rozbieżności między percepcją publiczną a badaniem WhiteHat Security. Powyższe dotyczy języków kodowania, podczas gdy raport WhiteHat Security obejmuje internetowe języki programowania. To, czy te dwa języki są wymienne, wykracza poza zakres tej dyskusji, ale w badaniu WhiteHat Security - ulubieńcy, tacy jak Python, Ruby i Go, byli zauważalnie nieobecni.
Najczęściej używane języki
W badaniu WhiteHat Security najpopularniejszymi językami były ASP, ColdFusion, .NET, Java, Perl, PHP i .NET (dokonano rozróżnienia między klasycznymi technologiami ASP i nowszymi technologiami .NET). Trzy najpopularniejsze języki programowania internetowego to:
- Platforma .NET (28,1%)
- Jawa (24,9%)
- ASP (15,9%)
Odsetek luk w zabezpieczeniach przypisywanych poszczególnym językom jest również zgodny z powyższymi rankingami. .NET odpowiadał za 31% zaobserwowanych luk w zabezpieczeniach, podczas gdy Java i ASP odpowiadały odpowiednio za 28% i 15%.
Przyjęcie języka różni się również znacznie w zależności od branży - na przykład sektor finansowy jest mocno obciążony ASP, podczas gdy branża gier jest zdominowana przez PHP. Bankowość opiera się w dużej mierze zarówno na Javie, jak i .NET, podczas gdy administracja rządowa wydaje się unikać ColdFusion i Perla podczas tworzenia aplikacji internetowych.
Języki z największą liczbą luk w zabezpieczeniach
Na podstawie ustaleń raportu, .NET zdobywa nagrodę dla języka z największą liczbą luk w zabezpieczeniach, a następnie Java i ASP:
- NETTO (31%)
- Jawa (28%)
- ASP (15%)
- PHP (2%)
WhiteHat Security przyjmuje dyplomatyczne podejście do wyjaśnienia tych liczb, zauważając, że w grę może wchodzić wiele czynników: między innymi przewaga aplikacji napisanych w .NET i Java, złożoność/rozmiar stron internetowych i aplikacji napisanych w tych językach. Co ważniejsze, nie ma dowodów sugerujących, że .NET lub Java są mniej bezpieczne niż inne języki.
Typowe luki w zabezpieczeniach
Jeśli chodzi o luki w zabezpieczeniach, skrypty między witrynami (XSS) były najbardziej powszechne w ASP, ColdFusion, Javie, Perlu i PHP. Metody ataku XSS polegają na wstrzykiwaniu skryptów po stronie klienta — zwykle napisanych w języku JavaScript — do stron internetowych przeglądanych przez użytkowników w celu obejścia kontroli dostępu. W przypadku aplikacji .NET wyciek informacji — czyli przypadkowe ujawnienie poufnych danych (np. komentarzy, informacji debugowania, komunikatów o błędach) — był najbardziej widocznym lukiem w zabezpieczeniach. ColdFusion otrzymał nagrodę za największą liczbę przypadków luk w zabezpieczeniach polegających na wstrzyknięciu kodu SQL (11%); rzeczywiście, pobieżne wyszukiwanie w Google "ColdFusion SQL Injection " daje mnóstwo wyników. Wstrzykiwanie SQL polega na złośliwym wstawianiu instrukcji SQL do aplikacji internetowej opartej na bazie danych w celu manipulowania i/lub zmieniania bazowego magazynu danych.
Jak być może już podejrzewasz, nie ma łatwego sposobu, aby odpowiedzieć na pytanie, który język jest najbezpieczniejszy. Niepopularna opcja może być uważana za bezpieczniejszą, ponieważ niewielu jest biegłych w jej używaniu (i nadużywaniu). Z drugiej strony, tajemny język może utrudniać programistom tworzenie wzmocnionych aplikacji w oparciu o sprawdzone metody. Na poziomie organizacyjnym i zespołowym istniejąca biegłość w języku zwykle oznacza, że stosowane są bezpieczniejsze metody programowania. To powiedziawszy, na przykład w przypadku .NET i Javy, popularność i powszechna adopcja są ich piętami achillesowymi.
Zamiast chwalić/dyskredytować zalety i niedociągnięcia w zakresie bezpieczeństwa każdego języka, badanie oferuje kilka cennych wskaźników w zakresie luk w zabezpieczeniach w każdym języku, wyszczególniając, jaki rodzaj ataków jest najczęstszy dla każdego z nich. Chociaż może to nie pomóc w ustaleniu, który język jest ogólnie bezpieczniejszy, z pewnością może dać firmom wiele wskazówek w zakresie środków bezpieczeństwa, które należy podjąć w przypadku wybranego stosu oprogramowania. I chociaż nie ma jednoznacznych odpowiedzi na pytanie, który język jest najbezpieczniejszy, wyniki ilustrują jednak ogólną podatność i słabą postawę bezpieczeństwa większości aplikacji internetowych. Dzięki zrozumieniu, z czym pracują, programiści mogą wprowadzić zabezpieczenia bezpośrednio do swoich ram programistycznych i uwzględnić testowanie oprogramowania oraz ocenę ryzyka bezpieczeństwa we wszystkich fazach rozwoju. W tym celu UpGuard oferuje kompleksową ocenę i monitorowanie luk w zabezpieczeniach aplikacji internetowych, serwerów, routerów i nie tylko.