Od czasu do czasu pojawiają się oferty pracy dla osoby, która ma zajmować się bezpieczeństwem tworzonej aplikacji (webowej), między innymi projektowaniem architektury bezpieczeństwa tej aplikacji. Na podstawie takiego ogłoszenia można typować w jakim języku napisana jest dana aplikacja (tak, zwykle w FooBar). I tu pojawia mi się wątpliwość, czy rzeczywiście przy tego typu stanowisku ta "bardzo dobra znajomość" jest rzeczywiście niezbędna.
Bardzo dobra znajomość języka FooBar i bezpieczeństwo
Po pierwsze bezpieczeństwo jest w znacznym stopniu uniwersalne, niezależnie od tego, w jakim języku aplikacja jest tworzona. Jeśli popatrzeć na listę OWASP Top10 2010, to praktycznie nie ma tam żadnej pozycji specyficznej dla FooBar. Trochę to inaczej wyglądało w OWASP Top10 2007, gdzie na liście znalazło się Malicious File Execution, ale to już trochę inna bajka.
Druga sprawa - bezpieczeństwo aplikacji (i jej architektury) tylko w części zależy od bezpieczeństwa kodu napisanego w języku FooBar i specyficznych dla tego właśnie języka rozwiązań czy wzorców projektowych. A co choćby z HTML, JavaScript, Flash, mechanizmami bezpieczeństwa przeglądarki (choćby tymi podstawowymi), kryptografią?
Przykład - jak doskonała znajomość FooBar pomoże w rozwiązaniu prostego problemu: w jaki sposób serwować content pochodzący od niezaufanego użytkownika? Niech będzie to prosty, klasyczny przykład z forum lub blogiem, gdzie tym niezaufanym contentem są posty innych użytkowników. Pojęcia takie jak XSS, CSRF, same-origin policy na 99,9% pozostaną poza ową doskonałą znajomością FooBar.
Podsumowując - wydaje mi się, że poszukiwanie osoby, która ma być odpowiedzialna za bezpieczeństwo aplikacji (w tym jej architekturę bezpieczeństwa) kładąc głównie nacisk na "bardzo dobrą znajomość" języka, w którym ta aplikacja powstaje (w zasadzie - jednego z co najmniej kilku języków wykorzystywanych w projekcie), zawęża problem. Nie twierdzę, że pewien poziom znajomości języka nie jest wymagany/przydatny, ale niekoniecznie jest to kluczowy wyznacznik kompetencji w tym przypadku.
Przy okazji - widziałem kilka aplikacji, których architektura (ogólnie architektura, a nie architektura bezpieczeństwa) była wynikiem radosnej twórczości architekta doskonale znającego dany język. Często był to nieuzasadniony przerost formy nad treścią (ktoś pamięta jeszcze KISS), z którego wynikało wiele problemów, związanych nie tylko z bezpieczeństwem. Po prostu architektura była zdecydowanie zbyt wymyślna w stosunku do zastosowania, w którym dana aplikacja miała być wykorzystywana. Obrazowo: samochód terenowy i prom kosmiczny mają nieco różne wymagania i obłożenie tego pierwszego osłoną termiczną oraz zwielokrotnienie części systemów (niezawodność, korekcja błędów) niekoniecznie mają w tym przypadku sens. W tym zastosowaniu może lepszy jest projekt prosty jak budowa cepa, w którym nie ma się co popsuć, i który w razie czego można naprawić przy pomocy młotka.