2010-07-05 13 views
16

Podczas badania recient PCI biegły stwierdził, że mieliśmy poważne zagrożenia dla bezpieczeństwa, ponieważKomentarze w języku JavaScript to zagrożenie bezpieczeństwa?

  1. można było pobrać zasoby statyczne z naszej strony takie jak obrazy CSS i JavaScript bez uprzedniej autoryzacji.
  2. Nasz javascript zawierał komentarze.

Osobiście uważam, że nie stanowi to zagrożenia dla bezpieczeństwa. Obrazy css i javascript nie zostały utworzone dynamicznie i nie zawierały danych na temat naszego zaplecza, szczegółów naszych klientów i mechanizmów.

Komentarze w javascript po prostu wyjaśniały, co zrobiły metody w pliku javascript. Którykolwiek, kto czyta JS, mógł i tak się dowiedzieć.

Jak to pokazuje "information leakage"?

Czy komentarze w javascript naprawdę stanowią zagrożenie dla bezpieczeństwa?

+0

Pierwszy punkt to ryzyko bezpieczeństwa, ale nie nazwałbym go poważnym. Uwagi na temat JavaScript z drugiej strony, ryzyko bezpieczeństwa? To mnie naprawdę rozśmieszyło. Nie jest optymalna, to na pewno, ale nie stanowi zagrożenia dla bezpieczeństwa. Śmiało i użyj http://developer.yahoo.com/yui/compressor/ Usunie komentarze i wszystkie niepotrzebne białe spacje. – AlexanderMP

+3

Ważną kwestią jest to, czy komentarze zawierają coś NIE wywnioskowane z samego kodu? Podobnie jak sposób organizacji wewnętrznych serwerów (każda uwaga na osobnym serwerze bazy danych, nazwa serwera lub coś podobnego) może stanowić zagrożenie bezpieczeństwa. Z drugiej strony, podobnie jak sam kod, jeśli pozwala wyciągnąć takie wnioski. – falstro

+0

@roe: takie jak to? =) http://thedailywtf.com/Articles/Client-side_PHP.aspx –

Odpowiedz

16

W zależności od rygorystyczności audytu, pobieranie obrazów itp. Bez uwierzytelnienia może być postrzegane jako zagrożenie bezpieczeństwa (pomyśl schematów, wykresów, wykresów ...).

Usuwanie komentarzy w javascriptu jest jak zaciemnianie kodu: czyni to nieco trudniejszym, ale nadal nie jest niemożliwe zrozumienie, co się dzieje. JavaScript powinien być postrzegany jako usprawniający - w każdym razie wszystkie twoje zabezpieczenia powinny być (duplikowane) po stronie serwera. Posiadanie kogoś, kto rozumie, co robi JS, nie powinno być uważane za ryzyko.

+0

Zgadzam się z bezpieczeństwem dynamicznie tworzonych zasobów (wykresy itp.), Ale tak nie jest w tym przypadku. Mówimy o logo obrazów tła itp. – Wes

+0

@Wes; czy i tak nie będą one potrzebne do strony uwierzytelniania? :) – falstro

+1

+1. tak! jeśli obrazy (np.) nie są publicznie dostępne dla nikogo w publicznej sieci, prawdopodobnie nie powinny być publicznie dostępne dla każdego, kto ma właściwy adres URL. to samo dotyczy wszystkich treści statycznych, takich jak dokumenty, które są przesyłane na serwer, gdzie * niektórzy, ale nie wszyscy * użytkownicy mogą pobrać go ze strony internetowej. ustalenie adresu URL nie powinno powodować zwarcia kontroli bezpieczeństwa. na podstawie twojego drugiego akapitu, to nie powinno mieć znaczenia dla plików css i js. –

4

Nie wdając się w ryzyko związane z bezpieczeństwem, zminimalizuj swój system JS w środowisku produkcyjnym, zapobiegnie to "wyciekowi informacji" i pomoże (przynajmniej w pewien sposób) zabezpieczyć informacje dotyczące twojej witryny.

w związku z zagrożeniem bezpieczeństwa, nie uważam, że komentarze JS są w ogóle ryzykiem, każda treść strony (statyczna) może zostać pobrana bez uwierzytelnienia. (o ile nie określono inaczej)

+0

Czy nie ma automatycznych formaterów kodu (osobiście jeszcze nie spotkałem się z żadnymi wykonalnymi), które mogą wymagać skróconego kodu i sprawić, że będzie on czytelny? Wydaje mi się, że minifikacja jest dobrym sposobem dla witryn o dużym natężeniu ruchu, aby zaoszczędzić przepustowość, ale nie jest istotna dla bezpieczeństwa. Należy zaprojektować aplikację z założeniem, że klientowi nie można ufać, a każdy atakujący już w pełni rozumie twój kod po stronie klienta i jakąkolwiek niezaszyfrowaną komunikację klient-serwer. –

+0

Nie znaczyłem, że nikt nie będzie w stanie odczytać kodu, jest to po prostu szybki sposób na usunięcie wszystkich komentarzy i sprawienie, że będzie on mniej czytelny na pierwszy rzut oka, nie więcej niż to i nie powinieneś oczekiwać więcej z tego procesu . – KensoDev

4

Nie, jeśli ujawniają tylko sposób działania kodu. Jakakolwiek wystarczająco zdeterminowana osoba mogłaby to stwierdzić.

To powiedziawszy, prawdopodobnie dobrym pomysłem jest zminimalizowanie kodu JavaScript; nie ze względu na bezpieczeństwo, ale dlatego, że skróci to czas pobierania, a przez to sprawi, że Twoja witryna będzie bardziej responsywna.

+0

+1. pokonać mnie do dokładnie tych samych dwóch punktów –

+0

Prawda, ale komentarze nie powinny normalnie ujawniać, jak działa kod. Po to jest ten kod. Powinni powiedzieć, dlaczego kod wykonuje to, co robi. –

+0

Zgadzam się, ale uważam, że głównym powodem zminimalizowania nie jest pasmo bezpieczeństwa, ponieważ większość serwerów WWW obsługuje teraz gzippedowaną zawartość, ale raczej zmniejsza czas analizy w przeglądarce. – Wes

3

Komentarze JavaScript mogą być. zależy od twojej logiki, ale z pewnością, ponieważ jest publicznie dostępna, dajesz większą widoczność działaniom twojego kodu.

Istnieją również inne powody, dla których warto je usunąć, takie jak rozmiar pliku i rozmiar pobieranego pliku.

Narzędzia, takie jak JSMin, mogą pomóc w usunięciu komentarzy i perfromie z prymitywnym zaciemnianiem kodu.

+0

Zgadzam się z JSMin i chcę to zbudować w naszych kompilacjach, ale to nie jest kwestia w tym przypadku. Tak, pliki są nadmiarowe i mogą być refaktoryzowane na mniejsze, bardziej wydajne metody.(nie mój kod), ale pod koniec dnia dbamy przede wszystkim o bezpieczeństwo. – Wes

15

To zależy od treści komentarza. Ponieważ nie ma możliwości, bez interwencji człowieka, przeanalizowanie treści komentarzy w celu ustalenia, czy są one ryzykowne, najskuteczniejszym sposobem kontroli jest zadeklarowanie wszystkich komentarzy w kodzie źródłowym skierowanym do klienta jako ryzykowne.

Oto przykłady potencjalnie ryzykownych komentarzy.

// doesn't really authenticate, placeholder for when we implement it. 
myServer.authenticate(user,pass); 

lub

// don't forget to include the length, 
//the server complains if it gets NaN or undefined. 
function send_stuff(stuff, length) { 
... 
} 

lub

function doSomething() { 
    querystring = "" 
    //querystring = "?TRACING_MODE=true&" 
    ... 
    //print_server_trace(); 
} 

Innym przykładem może być, jeśli obejmują historię nagłówek kodu źródłowego, ktoś może być w stanie znaleźć jakąś słabość zabezpieczeń badając rodzaje Błędy, które zostały naprawione. Przynajmniej krakers może być w stanie lepiej ukierunkować swoje ataki, jeśli wie, które wektory ataku zostały już zamknięte.

Wszystkie te przykłady są jednak i tak złymi praktykami (zarówno komentarzem, jak i kodem), a najlepszym sposobem, aby temu zapobiec, są przeglądy kodu i dobrzy programiści. Pierwszy przykład jest szczególnie zły, ale niewinne ostrzeżenia dla kolegów z drużyny, podobnie jak drugi przykład, lub skomentowany kod debugowania, jak trzeci, to rodzaje luk w zabezpieczeniach, które mogą prześlizgnąć się przez sieć.

+0

Świetne przykłady. Dziękujemy za dodanie. –

+0

Przeczytaj to jeszcze raz. Zasadniczo twoim argumentem jest to, że jeśli komentarze ujawnią cokolwiek o implementacji serwera, będą stanowiły ryzyko. Ma sens. Lub innymi słowy, jeśli komentarze zawierają informacje, których nie można uzyskać z kodu po stronie klienta. – Wes

+0

@Wes: To mniej więcej tyle, ile trzeba. Kolejną kwestią może być przeklęty komentarz WTF, oskarżający innego programistę o bycie dickem (czego nie dałem przykładu). Nie ujawnia on nic z implementacji serwera, ale nadal jest niebezpiecznym wyciekiem informacji, który może zaszkodzić reputacji firmy lub ułatwić atak socjotechniczny. –

Powiązane problemy