2010-09-25 20 views

Odpowiedz

13

Jednym z najczęstszych błędów jest wstrzykiwanie HTML, umożliwiając stronom trzecim wstrzyknięcie kodu JavaScript do kontekstu zabezpieczeń. Pozwala to atakującemu kontrolować, co użytkownik robi w Twojej witrynie, całkowicie łamiąc zabezpieczenia konta.

Podczas gdy niektóre powolne postępy próbują skłonić autorów sieci do zapamiętania łańcuchów kodujących HTML, które wyprowadzają na strony WWW po stronie serwera (np. htmlspecialchars w PHP), nowa generacja aplikacji internetowych używa tego samego niemy napisu -concatenation hacki do tworzenia treści na stronie klienta przy użyciu JavaScript:

somediv.innerHTML= '<p>Hello, '+name+'</p>'; 

często przy użyciu jQuery:

$('table').append('<tr title="'+row.title+'"><td>'+row.description+'</td></tr>'); 

to jest tak samo wrażliwe jak wstrzykiwanie HTML po stronie serwera i autorzy naprawdę trzeba zatrzymać buildin g treść w ten sposób. Ci może zawartość tekstu HTML zakodować po stronie klienta, ale ponieważ JS nie posiada wbudowany koder HTML trzeba by to zrobić samemu:

function encodeHTML(s) { 
    return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;'); 
} 

somediv.innerHTML= '<p>Hello, '+encodeHTML(name)+'</p>'; 

Jednak to zwykle znacznie lepiej korzystać z dostępnych metod DOM i właściwości, które eliminują potrzebę ucieczce:

var p= document.createElement('p'); 
p.appendChild(document.createTextNode('Hello, '+name); 

i korzystania z jQuery attr(), text() i tworzenie skrótów:

$('table').append(
    $('<tr>', {title: row.title}).append(
     $('<td>', {text: row.description}) 
    ) 
); 
11

JavaScript działa po stronie klienta, więc największe ryzyko jest dla klienta. Przykładem ryzyka jest to, że ich pliki cookie mogą zostać skradzione, aby inny użytkownik mógł je podrobić. Typową metodą ataku jest inject Javascript na stronie poprzez przesłanie formularza. Aby temu zapobiec, upewnij się, że zawsze poprawnie unikasz wyjścia HTML.

Twoje bezpieczeństwo po stronie serwera powinno być nie zależne od bezpieczeństwa Javascript. Należy założyć, że atakujący może i zmieni HTML/CSS/Javascript na swoich stronach, aby spróbować wyświetlić informacje, które normalnie nie są widoczne, i wyśle ​​dane na twój serwer, których nie powinno być możliwe wysyłanie za pośrednictwem normalnego interfejsu . Aby temu zapobiec, należy zawsze sprawdzać wszystkie dane wejściowe użytkownika - traktować je jako całkowicie niezaufane dane. Nie należy opierać się na założeniach dotyczących treści wysyłanych przez użytkowników - zawsze należy wyraźnie sprawdzać, czy założenia są prawdziwe.

-5

Nie ma ryzyka. Tylko możliwe błędy programisty. Jednym błędem, jaki mogę sobie wyobrazić, jest zapomnieć o parametrach kodowania adresu URL wysłanych na serwer i otrzymuję błędne wartości. Ale prawdziwym zagrożeniem bezpieczeństwa jest kod po stronie serwera, a nie javascript.

+1

Podczas dokładności należy wziąć pod uwagę, że używanie JavaScriptu może oznaczać, że nie używa on kodu po stronie serwera, tzn. Przesuwa walidację i logikę danych * do * JavaScript, co oczywiście byłoby śmieszne i niesamowicie niebezpieczne.Warto zauważyć, dla początkujących. –

+2

@No, ale jak twierdzi, że rzeczywiste zagrożenie bezpieczeństwa jest w kodzie serwera, który w twoim przypadku jest bezużyteczny i dlatego jest niepewny. Myślę, że to jest poprawne, z dokładnym kodem po stronie serwera, js nie powinien być zagrożeniem bezpieczeństwa. –

+0

Oskar: Dobra robota, powtórzyłeś dokładnie to, co powiedziałem. –

-3

Johann-Peter Hartmann niedawno przeprowadził doskonałą rozmowę na temat bezpieczeństwa Javascript. To rzeczywiście gorący temat, zwłaszcza że aplikacje na jedną stronę stają się coraz bardziej popularne. Sprawdź jego slajdy pod adresem slideshare. Slajdy są w języku niemieckim - o ile mi wiadomo, nie ma jeszcze tłumaczenia na język angielski.