2009-04-17 20 views
20

Używamy jsp, serwletów, fasoli z bazą danych mysql. Nie chcemy ograniczać znaków wprowadzanych przez użytkowników w polach formularza. Jak więc oczyścić dane wejściowe i jak upewnić się, że dane wyjściowe nie zostaną zmienione w przypadku szkodliwych działań. Czy istnieje sposób wysyłania danych wyjściowych, czy mogę sprawdzić, czy został wysłany dodatkowy kod. Przypuśćmy, że istnieje pole wyszukiwania - użytkownik podaje coś w rodzaju <script>alert("I am here")</script>. Czy na pewno wiedziałem, że to jest znacznik html. Jeśli użytkownik doda dodatkowy parametr do pola linku, to jest jak przed i po sprawdzeniu, czy mógłbym zrobić dla dokumentu, aby zdać sobie sprawę, że istnieje dodatkowe pole połączenia.Jak najlepiej oczyścić dane wejściowe z aplikacji webowej Java

+0

Proszę rozważyć zmianę nazwy swoich pytań na pytania typu "Jak najlepiej oczyścić dane wejściowe w Javie" - Twój tytuł pytania nie pomoże tym, którzy szukają podobnych odpowiedzi w przyszłości ... – razlebe

+10

Whoa, kiedy przejdziesz do retag pytania, to wykonuje javascript w pytaniu! Bad stackoverflow, bad! –

+0

@robhruska: Nice find! – Adnan

Odpowiedz

5

Powinieneś zawsze wykonywać podstawowe wychwytywanie HTML danych pobranych ze źródeł takich jak dane wprowadzane przez użytkownika lub bazy danych, które mogą zawierać nieprawidłowe znaki. Tag JSP <c:out> wykonuje to na przykład. W ten sposób, jeśli użytkownik wpisze "<script> ..." w polu i ponownie go wydrukujesz, zostanie wydrukowany do HTML jako "&lt;script&gt; ...".

10

Naprawdę powinieneś pozwolić użytkownikom na wpisanie jak najmniej kodu HTML i/lub javascript. Dobrym rozwiązaniem do sprawdzania poprawności i odkażania tych rzeczy jest użycie gotowej biblioteki, takiej jak OWASP AntiSamy.

Zobacz także OWASP Enterprise Security API, aby zapoznać się z kolekcją metod zabezpieczeń, których programista potrzebuje do stworzenia bezpiecznej aplikacji internetowej.

5

Podaj jsoup, aby Ci pomóc. Cokolwiek robisz, nie próbuj hakować tego za pomocą regex lub czegoś, bo wtedy będziesz miał 2 problemy. :-)

Z jsoup, wszystko czego potrzebujesz to krótki fragment kodu:

String safe = Jsoup.clean(unsafe, Whitelist.basic()); 

Możesz dodać tagi i atrybuty Whitelist dość łatwo, choć okazało się, że nie obsługuje tagów nazw.

Powiązane problemy