2012-04-26 5 views
5

Na przykład mam narzędzie do tworzenia formularzy Javascript powered by. Używasz odnośników do dodawania bloków html elementów (jak pola wprowadzania) i TinyMCE do edycji tekstu. Są one zapisywane za pomocą funkcji autozapisu, która wywołuje AJAX w tle w określonych zdarzeniach.Edycja i zapisywanie kodu HTML użytkownika za pomocą JavaScript - jak bezpieczne jest to?

Funkcja zapisywania wywołuje ochronę bazy danych, ale zastanawiam się, czy użytkownik może manipulować DOMem, aby dodać coś, co chce (np. Niestandardowy kod HTML lub niechciany skrypt).

Jak bezpieczne jest to, jeśli w ogóle?

Pierwszą rzeczą, która przychodzi mi do głowy, to że prawdopodobnie powinienem wyszukać i usunąć dowolny wbudowany javascript z otrzymanego kodu HTML.

Korzystanie z PHP, JQuery, Ajax.

+0

Wszystkie odpowiedzi wydają się być poprawne, ale pójdę ze społecznością Ocena awansu dla najlepszego. Dziękuje wszystkim! –

Odpowiedz

5

Nie jest wcale bezpieczny. Możesz nigdy nie ufać klientowi. Nawet początkujący może łatwo modyfikować DOM po stronie klienta (wystarczy zainstalować Firebug na przykład w Firefoksie).

Chociaż dobrze jest zaakceptować kod HTML od klienta, upewnij się, że sprawdzasz poprawność i czyścisz go poprawnie za pomocą PHP po stronie serwera.

+0

To jest całkiem dobra biblioteka, jeśli potrzebujesz odkażać HTML użytkownika: http://htmlpurifier.org/ – CD001

1

Czy zapisujesz pełny inline-html w swojej bazie danych? Jeśli tak, spróbuj przerobić wszystko i tylko zapisuj potrzebne informacje w swoim backend. Wszystkie pola powinny również być kontrolowane, jeśli zostaną odebrane w oczekiwany sposób.

Wszystkie inline-js można łatwo usunąć.

Możesz nigdy nie ufać użytkownikowi!

1

Absolutnie niebezpieczne, chyba że podejmiesz kroki, aby je oczywiście zabezpieczyć. StackOverflow pozwala na pewne tagi, filtrowane, aby użytkownicy nie mogli robić złośliwych rzeczy. Z pewnością będziesz musiał zrobić coś podobnego.

Zdecydowałbym się na odkażenie strony serwera wejściowego tak, aby każdy uzyskał odkażony sygnał wejściowy, niezależnie od tego, czy zablokował on skrypty, czy nie. Używanie czegoś takiego: http://www.phpclasses.org/package/3746-PHP-Remove-unsafe-tags-and-attributes-from-HTML-code.html lub http://grom.zeminvaders.net/html-sanitizer zaimplementowane z AJAX byłoby całkiem dobrym rozwiązaniem

+0

+1 dla oferowanego rozwiązania –

Powiązane problemy