Curățare corectă a intrării fără codificare falsă a entității HTML · GitHub

Document document = Jsoup. parse (param);
doc. outputSettings (). escapeMode (EscapeMode. xhtml);
Șir curățat = doc. corp (). text ();

Acest comentariu a fost minimizat.

Copiați linkul Citat răspuns

intrării

raphaelHuerzeler comentat 20 iunie 2012

Deci, pentru a curăța corect o intrare, ar trebui să faceți:

Document murdar = Jsoup.parseBodyFragment (bodyHtml);
dirty.outputSettings (). escapeMode (EscapeMode.xhtml);
Document clean = new Cleaner (whitelist) .clean (murdar);
Șirul curățat = clean.body (). Html ();

Acest comentariu a fost minimizat.

Copiați linkul Citat răspuns

martin-naumann comentat 20 iunie 2012

Acesta este cel mai curat mod, da.

Acest comentariu a fost minimizat.

Copiați linkul Citat răspuns

martin-naumann comentat 20 iunie 2012

Așteptați: nu v-am văzut folosind „html ()” în ultima linie - nu faceți asta. Utilizați „text ()” - html este pentru intrare care este absolut destinată să conțină HTML. Cred că, în majoritatea cazurilor, nu vrem să avem deloc HTML în intrare, corect?

Acest comentariu a fost minimizat.

Copiați linkul Citat răspuns

Acest comentariu a fost minimizat.

Copiați linkul Citat răspuns

martin-naumann comentat 20 iunie 2012

Dacă este aplicat corect, va trece orice test XSS pe care îl aruncați. Îndepărtează TOATE codurile HTML.
XSS este HTML care alunecă de la intrare la ieșire. Dacă acest produs de curățare este utilizat în mod corespunzător, toate codurile HTML sunt eliminate.

Acest comentariu a fost minimizat.

Copiați linkul Citat răspuns

raphaelHuerzeler comentat 20 iunie 2012

la naiba - această abordare nu funcționează - nici măcar nu a trecut primul test XSS, așa că practic trebuie să găsesc o modalitate de a permite trecerea unor caractere specifice. dacă acest lucru este pentru a obține cumva acest lucru pentru a încărca o sumă de resurse modificată sau pentru a scrie propria mea metodă de postprocesare care revine orice caractere legitime. Și asta încă nu garantează că nu va deschide un vector de atac.

Acest comentariu a fost minimizat.

Copiați linkul Citat răspuns

raphaelHuerzeler comentat 20 iunie 2012

hmm. Ei bine, diavolul poate fi în detalii - ar trebui să fie ok pentru majoritatea cazurilor în cererea mea. Există totuși mai multe cazuri în care un parametru este scris într-o variabilă javascript direct în jsp - în aceste cazuri nu aveți nevoie de html, prin manipularea șirului puteți obține codul javascript pentru a se executa în acest fel - primul meu gând a fost metode separate (una strict, unul relaxat) de la caz la caz, dar aceasta este o soluție sigură în cel mai bun caz. este ușor posibil să recuperez o variabilă care ar fi fost introdusă prin metoda relaxată într-un cadru în care ar necesita o filtrare strictă. Am câteva idei, dar mai întâi va trebui să fac câteva teste.

Acest comentariu a fost minimizat.

Copiați linkul Citat răspuns

raphaelHuerzeler comentat 20 iunie 2012

Pentru a ilustra - este posibil să se realizeze așa ceva (în cod javascript) cu soluția propusă:
var status = "; alert ('xss'); var xyz = ";

Codul original al paginii era:
var status = ";

Și cererea rău intenționată:
?stare =% 22; alertă (% 27xss% 27);% 20var% 20xyz% 20 =% 20% 22

Acest comentariu a fost minimizat.

Copiați linkul Citat răspuns

martin-naumann comentat 20 iunie 2012

Desigur, trebuie să fii conștient de contextul în care te afli.