Igienizarea introducerii utilizatorului - codificare fericită

Nu aveți niciodată încredere în nimic din ceea ce vine de la client. - proverb antic

Acum știm cum să obținem inputul utilizatorului folosind formulare HTML și solicitări POST care declanșează funcția doPost () a claselor noastre de servlet.

Dar trebuie să fim foarte atenți atunci când afișăm acea intrare a utilizatorului, în special altor utilizatori. Nu putem permite doar conținut arbitrar, deoarece atunci utilizatorii rău intenționați ar putea face lucruri rele, cum ar fi să injecteze HTML sau JavaScript în pagina noastră, ceea ce le-ar permite să redirecționeze browserele, să fure informații sau să exploateze scripturi între site-uri pe site-ul dvs.

În schimb, trebuie dezinfecta datele pe care le primim de la utilizatorii noștri, astfel încât să conțină numai conținut sigur. Totuși, nu există un singur mod de a face acest lucru! Este mai degrabă o serie de întrebări la care trebuie să răspundeți, iar răspunsurile depind exact de modul în care doriți să acționeze site-ul dvs. și ce tipuri de conținut doriți să permiteți.

Exemplu de aplicație web

Să începem cu un exemplu de aplicație web care preia date de la un utilizator și apoi le afișează. Iată clasa noastră de servlet:

În funcția sa doGet (), acest servlet adaugă conținutul la cerere și îl redirecționează către un fișier JSP pentru redare. Funcția doPost () obține parametrul de conținut trimis, îl stochează și apoi redirecționează înapoi la o solicitare GET.

Fișierul JSP arată astfel:

Acest fișier arată doar conținutul și apoi un formular care permite utilizatorului să schimbe conținutul.

În cele din urmă, iată fișierul web.xml:

Fișierul web.xml mapează adresa URL/home la servletul nostru. Rulați acest servlet și vizitați http: // localhost: 8080/home și ar trebui să vedeți acest lucru:

codificare

Puteți introduce un anumit text pentru a vă asigura că funcționează.

Aici am tastat Hello world! și a făcut clic pe butonul Trimitere. Servletul a stocat acel conținut, iar acum pagina JSP îl afișează. Vă puteți gândi la aceasta ca la o versiune foarte simplă a unui site web care vă permite să trimiteți postări, cum ar fi Twitter sau Facebook sau orice altceva.

Introducere de utilizator necorespunzătoare

Dar ce se întâmplă dacă introduceți html?

Încercați să introduceți ceva de genul

Acest lucru se datorează faptului că JSP-ul nostru transmite conținutul direct în HTML pe această linie:

Deci, dacă conținutul este

Permiterea utilizatorilor de a introduce HTML arbitrar poate cauza probleme pe site-ul dvs. Imaginați-vă un site precum Twitter sau Facebook sau Tumblr, unde postările unui utilizator sunt afișate altor utilizatori. Dacă sunt un utilizator rău intenționat, aș putea:

  • Dezordonează formatarea site-ului tău.
  • Redirecționați browserele utilizatorului dvs. către propriul meu site.
  • Fură datele utilizatorului.
  • Exploatați scripturi pe mai multe site-uri.

Ca un alt exemplu, încercați să introduceți acest lucru ca conținut:

Acest conținut este doar o lume!

Bună lume badStuff ()!

. Amintiți-vă că și> sunt afișate ca și> în loc să fie analizate ca etichete HTML.

Curat conținut pentru a permite numai utilizarea HTML sigură.

Bandă conținut pentru a nu permite deloc HTML.

devine Hello world! .

A inlocui conținut, astfel încât utilizatorii să poată introduce etichete non-HTML pe care le convertiți în HTML. un anumit conținut [b] îndrăzneț [/ b] devine