Czy to w 100% bezpieczne, aby wykonać następujące czynności?:

var untrusted_input_from_3rd_party = '<script>alert("xss")<\/script>';
document.getElementsByTagName('body')[0].appendChild(document.createTextNode(untrusted_input_from_3rd_party));

Biorąc pod uwagę, że strona trzecia może wprowadzić wszystko (HTML, CSS itp.), Czy mogę być pewien, że nie zrobię żadnych szkód, jeśli przekazuję go przez createTextNode, a następnie dodaj go do domu?

5
Polar 10 październik 2011, 12:45

3 odpowiedzi

Najlepsza odpowiedź

Jest to delikatny sposób na zapobieganie XSS. Manipulacja DOM przez createTextNode jest szeroko stosowany do bezpiecznego osadzenia tekstu osób trzecich.

Mówi się, że istnieją problemy poza XSS. Nie robi nic, aby powstrzymać próby inżynierii społecznej, jeśli niezaufany wejście jest czymś w rodzaju:

Alert: Wykryliśmy złośliwe oprogramowanie na komputerze. Skopiuj i wklej http://evil.org/ do paska URL przeglądarki, aby rozwiązać problem.

Najlepszym sposobem na zapobieganie inżynierii społecznej (poza tym, że treść osób trzecich) ma wyjaśnić, że treść pochodzi z osoby trzeciej.

5
Mike Samuel 10 październik 2011, 08:52

Przetestował go teraz. Wydaje się być poprawny. Jeśli coś pójdzie nie tak - powinno być błędem przeglądarki, a nie twój.
Jak zwykle serwer powinien dokonać poprawnego widoku HTML wszystkich wejść użytkownika, a następnie daj go przywrócić użytkownikowi.

Ale do obniżenia ładowania serwera (a jeśli jest to akceptowalne), możesz go na pewno użyć.

1
Sergey 10 październik 2011, 08:52

Nie widzę tego, że jest wykonywane w żadnych standardowych nowoczesnych przeglądarkach, ponieważ jest on renderowany jako węzeł tekstowy. Dobry czytaj: http://www.educatedgueswork.org/2011/08/guest_post_adam_barth_on_three.html .

1
naveen 10 październik 2011, 08:54