Правильно чистий ввід без підробленого кодування HTML-сутності · GitHub
| Документ документа = Jsoup. синтаксичний розбір (param); |
| док. outputSettings (). escapeMode (EscapeMode. xhtml); |
| Рядок очищений = doc. тіло (). текст (); |
Цей коментар зведено до мінімуму.
Копіювати посилання Цитувати відповідь

Рафаель Гюрцелер прокоментував 20 червня 2012 р
Отже, щоб правильно очистити вхідні дані, потрібно:
Документ брудний = Jsoup.parseBodyFragment (bodyHtml);
dirty.outputSettings (). escapeMode (EscapeMode.xhtml);
Документ чистий = новий очищувач (білий список) .clean (брудний);
Рядок очищений = clean.body (). Html ();
Цей коментар зведено до мінімуму.
Копіювати посилання Цитувати відповідь
Мартін-Науман прокоментував 20 червня 2012 р
Це найчистіший спосіб, так.
Цей коментар зведено до мінімуму.
Копіювати посилання Цитувати відповідь
Мартін-Науман прокоментував 20 червня 2012 р
Зачекайте: я не бачив, щоб ви використовували "html ()" в останньому рядку - не робіть цього. Використовуйте "text ()" - html для введення, яке абсолютно призначене для вмісту HTML. Я думаю, у більшості випадків ми взагалі не хочемо мати HTML у вхідних даних, правильно?
Цей коментар зведено до мінімуму.
Копіювати посилання Цитувати відповідь
Цей коментар зведено до мінімуму.
Копіювати посилання Цитувати відповідь
Мартін-Науман прокоментував 20 червня 2012 р
Якщо його правильно застосувати, він пройде будь-який XSS-тест, який ви на нього зробите. Він видаляє ВСІ HTML.
XSS - це HTML, який ковзає від вхідного до вихідного. Якщо цей засіб для чищення використовується належним чином, усі HTML-файли видаляються.
Цей коментар зведено до мінімуму.
Копіювати посилання Цитувати відповідь
Рафаель Гюрцелер прокоментував 20 червня 2012 р
блін - цей підхід не працює - він навіть не пройшов перший тест XSS, тому в основному мені потрібно знайти спосіб пропустити певні символи. якщо це якось змусити цю річ завантажити модифікований пакет ресурсів або написати свій власний метод обробки, який повертає будь-які законні символи. І це все ще не гарантує, що це не відкриє вектор атаки.
Цей коментар зведено до мінімуму.
Копіювати посилання Цитувати відповідь
Рафаель Гюрцелер прокоментував 20 червня 2012 р
хм ну, диявол може бути в деталях - це має бути нормально для більшості випадків у моїй заявці. Однак є кілька випадків, коли параметр записується у змінну javascript безпосередньо в jsp - у цих випадках вам не потрібен html, маніпулюючи рядком, ви можете отримати код javascript для виконання таким чином - моя перша думка була окремими методами (один суворий, розслаблений) у кожному конкретному випадку, але це, в кращому випадку, невдале рішення. Це цілком можливо, що я отримую змінну, яка була б введена за допомогою розслабленого методу в налаштуваннях, де вона вимагала б жорсткої фільтрації. У мене є кілька ідей, але спочатку доведеться зробити кілька тестів.
Цей коментар зведено до мінімуму.
Копіювати посилання Цитувати відповідь
Рафаель Гюрцелер прокоментував 20 червня 2012 р
Для ілюстрації - можна досягти чогось такого (у коді javascript) із запропонованим рішенням:
var status = "; alert ('xss'); var xyz = ";
Оригінальний код сторінки:
статус статусу = ";
І зловмисний запит:
?статус =% 22; попередження (% 27xss% 27);% 20var% 20xyz% 20 =% 20% 22
Цей коментар зведено до мінімуму.
Копіювати посилання Цитувати відповідь
Мартін-Науман прокоментував 20 червня 2012 р
Звичайно, ви повинні знати, в якому контексті ви перебуваєте.