Jakie są zagrożenia związane z używaniem Javascript i jak ich unikać?Bezpieczeństwo JavaScriptu?
Odpowiedz
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, '&').replace(/</g, '<').replace(/"/g, '"');
}
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})
)
);
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.
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.
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. –
@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. –
Oskar: Dobra robota, powtórzyłeś dokładnie to, co powiedziałem. –
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.
- 1. obiektu Bezpieczeństwo w Parse używając API JavaScriptu - Wiązanie użytkowników do obiektów, które są zapisywane
- 2. static_cast bezpieczeństwo
- 3. Bezpieczeństwo PouchDB
- 4. Bezpieczeństwo Cakephp
- 5. backbone.js Bezpieczeństwo
- 6. Hadoop Bezpieczeństwo
- 7. Sprawdzanie numeru telefonu Javascriptu
- 8. Mechanizm ważności operatorów JavaScriptu
- 9. Dziedziczenie JavaScriptu i prototypów
- 10. Prosta tablica szachowa JavaScriptu
- 11. Framework CSS bez JavaScriptu
- 12. Automatyczne zgłaszanie błędów JavaScriptu
- 13. Wyślij formularz bez JavaScriptu
- 14. Obsługa JavaScriptu w IE8
- 15. Silniki 2D dla Javascriptu
- 16. Kolejka funkcji JavaScriptu
- 17. Silnik układu graficznego JavaScriptu
- 18. Bezpieczeństwo niskiego zużycia energii i bezpieczeństwo danych Bluetooth
- 19. Bezpieczeństwo wątku JTextArea.append
- 20. Bezpieczeństwo wątków NSMutableDictionary
- 21. Wiosna 3 Bezpieczeństwo j_spring_security_check
- 22. Wiosna Singleton Bezpieczeństwo wątków
- 23. Wyłączenie Firefox Bezpieczeństwo Ostrzeżenie
- 24. WPF Bezpieczeństwo gwintowania danych?
- 25. Bezpieczeństwo żądań AJAX
- 26. Bezpieczeństwo wyrażeń regularnych
- 27. Bezpieczeństwo gwintów pojedynczej zmiennej
- 28. Wiosna bezpieczeństwo bezpaństwowcem konfiguracja
- 29. Parse.com bezpieczeństwo API dotyczy
- 30. Bezpieczeństwo wiosenne: programowane logowanie
przy użyciu javascript do czego? –
do budowania stron internetowych :) – Adam