Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
nahsra__antisamy_CVE-2017-14735_1-5-6 | Kitploit
Инструменты/GitHubGitHub/shoucheng3/nahsra__antisamy_cve-2017-14735_1-5-6
Статический анализАнализ уязвимостейАнализ КодаВеб-безопасностьНеправильная КонфигурацияБезопасность API
GitHubshoucheng3/nahsra__antisamy_cve-2017-14735_1-5-6

nahsra__antisamy_CVE-2017-14735_1-5-6

Репозиторий

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
9 месяцев назадЕщё не проверено

AntiSamy

Библиотека для быстрой, настраиваемой очистки HTML-кода из ненадёжных источников. Поддерживает Java 8+.

Другими словами: это API, которое помогает убедиться, что клиенты не отправляют вредоносный код в HTML, который они предоставляют для своих профилей, комментариев и т. п. и который сохраняется на сервере. Термин «вредоносный код» применительно к веб-приложениям обычно означает «JavaScript». По большей части каскадные таблицы стилей считаются вредоносными только тогда, когда они вызывают JavaScript. Однако существует множество ситуаций, когда «обычный» HTML и CSS могут использоваться во вредоносных целях.

ВАЖНО! - Изменения API, нарушающие совместимость, в версии 1.7.0

На протяжении разработки серии 1.6.x мы выявили и пометили как устаревшие ряд функций и API. Все эти устаревшие элементы были удалены в выпуске 1.7.0. Все изменения отслеживались в тикете: https://github.com/nahsra/antisamy/issues/195. Каждое из изменений описано ниже:

CssHandler имел 2 конструктора, которые отбрасывали параметр LinkedList<URI> embeddedStyleSheets. Оба конструктора теперь создают пустой внутренний LinkedList<URI>, и для получения ссылки на него, если необходимо, можно использовать метод getImportedStylesheetsURIList(). Эта функция используется редко, и, по сути, прямое обращение к этим конструкторам также редко, поэтому данное изменение вряд ли затронет большинство пользователей AntiSamy. При использовании обычно в качестве значения этого параметра передаётся пустой список, и этот список больше никогда не используется.

  • Сигнатура CssHandler(Policy, LinkedList<URI>, List<String>, ResourceBundle) была удалена

    • Вместо неё добавлена: CssHandler(Policy, List<String>, ResourceBundle)
  • Сигнатура CssHandler(Policy, LinkedList<URI>, List<String>, String, ResourceBundle) была удалена

    • Вместо неё добавлена: CssHandler(Policy, List<String>, ResourceBundle, String). ПРИМЕЧАНИЕ: Порядок последних 2 параметров этого метода был изменён на противоположный.
  • Поддержка XHTML была удалена. Теперь AntiSamy поддерживает только HTML. Поскольку мы считаем, что это была редко используемая функция, мы не ожидаем, что это затронет многих пользователей AntiSamy.

  • Проверка XML-схемы теперь обязательна для файлов политик AntiSamy и не может быть отключена. Вы должны сделать свой файл политики соответствующим схеме, чтобы использовать его с AntiSamy.

  • Директива политики noopenerAndNoreferrerAnchors теперь включена по умолчанию. Если она отключена, AntiSamy выдаёт назойливое предупреждение, призывающее включить её.

Дисклеймеры о формате вывода

На протяжении жизненного цикла обновлений AntiSamy менялась зависимость парсера HTML, что приводило к некоторым различиям в выводе в зависимости от варианта использования. Учитывайте это, если вы использовали определённые версии и получаете другие результаты после обновления.

Это также может относиться к сериализатору вывода, который преобразует внутреннее HTML-представление в итоговый текстовый вывод инструмента.

Прекращение поддержки внешних таблиц стилей

Команда AntiSamy решила, что поддержка возможности разрешать встроенные удалённые CSS опасна, поэтому мы прекращаем поддержку этой функции, и она будет удалена в одном из будущих выпусков. Ожидается, что пользователей этой функции очень мало, если они вообще есть.

Мы добавили предупреждение в журнал (WARN), если эта функция вызывается. Если вы её используете, отключите/удалите эту функцию, переключившись на основной конструктор CssScanner, который не включает эту функцию.

Как использовать

1. Импорт зависимости

Сначала добавьте зависимость из Maven:

root@kitploit:~
<dependency>
   <groupId>org.owasp.antisamy</groupId>
   <artifactId>antisamy</artifactId>
   <version>LATEST_VERSION</version>
</dependency>

2. Выбор базового файла политики

Вероятно, что вариант использования AntiSamy на вашем сайте хотя бы примерно сопоставим с одним из предопределённых файлов политик. Каждый из них представляет собой «типичный» сценарий разрешения пользователям предоставлять HTML (и, возможно, CSS) форматирование. Давайте рассмотрим различные файлы политик:

  1. antisamy-slashdot.xml

Slashdot — это технический новостной сайт, который позволяет пользователям анонимно отвечать на новостные сообщения с очень ограниченной HTML-разметкой. Slashdot — не только один из самых крутых сайтов, но и один из тех, что подвергался множеству различных успешных атак. Правила Slashdot довольно строгие: пользователи могут отправлять только следующие HTML-теги и никакого CSS: <b>, <u>, <i>, <a>, <blockquote>.

Соответственно, мы создали файл политики, который обеспечивает довольно похожую функциональность. Разрешены все теги форматирования текста, которые напрямую воздействуют на шрифт, цвет или выделение.

  1. antisamy-ebay.xml

eBay — самый популярный онлайн-аукцион во вселенной, насколько нам известно. Это публичный сайт, поэтому любой может размещать объявления с богатым HTML-содержимым. Неудивительно, что учитывая привлекательность eBay как цели, он подвергался нескольким сложным XSS-атакам. Объявления могут содержать гораздо более богатый контент, чем, скажем, на Slashdot, — поэтому поверхность атаки значительно больше.

  1. antisamy-myspace.xml

MySpace был, на момент создания этого проекта, самым популярным сайтом социальной сети. Пользователям разрешалось отправлять практически любой HTML и CSS, какой они хотели, — если он не содержал JavaScript. MySpace использовал чёрный список слов для проверки HTML пользователей, поэтому он и подвергся печально известному червю Samy. Червь Samy, который использовал фрагментационные атаки в сочетании со словом, которое должно было быть в чёрном списке (eval), — послужил вдохновением для этого проекта.

  1. antisamy-anythinggoes.xml

Мы не знаем возможного варианта использования этого файла политики. Если вы хотите разрешить все допустимые элементы HTML и CSS (но без JavaScript или явных фишинговых атак на основе CSS), вы можете использовать этот файл политики. Даже MySpace не был настолько безумен. Однако он служит хорошим справочником, поскольку содержит базовые правила для каждого элемента, поэтому вы можете использовать его как базу знаний при настройке других файлов политик.

Логирование

AntiSamy теперь включает библиотеку slf4j-simple для логирования, но пользователи AntiSamy могут импортировать и использовать альтернативную совместимую с slf4j библиотеку логирования, если предпочитают. При желании они также могут исключить slf4j-simple.

ПРЕДУПРЕЖДЕНИЕ: Использование AntiSamy slf4j-simple без файла конфигурации записывает сообщения в буферизованном режиме в стандартный вывод. В результате некоторые или все эти сообщения журнала могут быть потеряны, если будет выброшено Exception, например PolicyException. Это, вероятно, можно исправить, настроив slf4j-simple на запись в стандартный поток ошибок или используя альтернативный регистратор slf4j, который делает это.

3. Настройка файла политики

Возможно, вы захотите развернуть AntiSamy в конфигурации по умолчанию, но не менее вероятно, что сайт захочет иметь строгие, определяемые бизнес-правила для того, что пользователям разрешено. В обсуждении, определяющем настройку, также следует учитывать поверхность атаки — она растёт пропорционально файлу политики.

Примеры политик можно адаптировать и тестировать на основе требований для каждого тега. Поддерживаемые действия с тегами, которые можно указать:

  • filter: удалять теги, но сохранять содержимое.
  • validate: сохранять содержимое, если оно проходит правила.
  • remove: удалять тег и содержимое.
  • truncate: удалять атрибуты тега и все дочерние теги, кроме его текстового содержимого, если оно есть.
  • encode: похоже на filter, но кодирует тег для HTML, чтобы сохранить его как необработанный текст, а его дочерние элементы перемещаются на один уровень вверх в иерархии.

4. Вызов API AntiSamy

Использовать AntiSamy легко. Вот пример вызова AntiSamy с файлом политики:

root@kitploit:~
import org.owasp.validator.html.*;

Policy policy = Policy.getInstance(POLICY_FILE_LOCATION);

AntiSamy as = new AntiSamy();
CleanResults cr = as.scan(dirtyInput, policy);

MyUserDAO.storeUserProfile(cr.getCleanHTML()); // некоторая пользовательская функция

Есть несколько способов создать объект Policy. Метод getInstance() может принимать любой из следующих аргументов:

  • String имя файла
  • объект File
  • InputStream
  • На файлы политик также можно ссылаться по имени файла, передавая второй аргумент методу AntiSamy#scan(), как показано в следующих примерах:
root@kitploit:~
AntiSamy as = new AntiSamy();
CleanResults cr = as.scan(dirtyInput, policyFilePath);

Наконец, на файлы политик можно ссылаться напрямую через объекты File во втором параметре:

root@kitploit:~
AntiSamy as = new AntiSamy();
CleanResults cr = as.scan(dirtyInput, new File(policyFilePath));

5. Анализ CleanResults

Объект CleanResults предоставляет много полезного.

  • getCleanHTML() — чистый, безопасный HTML-вывод
  • getCleanXMLDocumentFragment() — чистый, безопасный XMLDocumentFragment, который отражается в getCleanHTML()
  • getErrorMessages() — список строковых сообщений об ошибках — если возвращается 0, это не значит, что атак не было!
  • getNumberOfErrors() — количество сообщений об ошибках — Опять же, 0 не означает, что ввод был безопасным!
  • getScanTime() — возвращает время сканирования в секундах

Важное примечание: Было много путаницы вокруг метода getErrorMessages(). Метод getErrorMessages() (как и getNumberOfErrors()) не даёт утвердительного ответа на вопрос «является ли этот ввод безопасным?» при возврате пустого списка. Вы всегда должны использовать очищенный ввод, и нет никакого способа гарантировать, что во введённых данных не было атак.

Процесс сериализации и десериализации, который критически важен для эффективности санитайзера, намеренно является потерянным и отфильтровывает атаки через ряд векторов атак. К сожалению, одним из компромиссов этой стратегии является то, что AntiSamy не всегда может задним числом узнать, что атака была замечена. Таким образом, API getErrorMessages() и getNumberOfErrors() существуют для того, чтобы помочь пользователям понять, соответствует ли их благонамеренный ввод требованиям системы, а не помочь разработчику обнаружить, была ли атака.

Другая документация

Дополнительная документация доступна на вики-странице этого проекта GitHub: https://github.com/nahsra/antisamy/wiki и на странице проекта OWASP AntiSamy: https://owasp.org/www-project-antisamy/

Участие в разработке AntiSamy

Нашли проблему?

Если вы обнаружили ошибку, создайте issue в репозитории AntiSamy: https://github.com/nahsra/antisamy/issues

Нашли уязвимость?

Если вы обнаружили уязвимость в AntiSamy, сначала поищите в списке issues (см. выше), не сообщалось ли о ней уже. Если нет, пожалуйста, свяжитесь напрямую с Дэйвом Уичерсом (dave.wichers at owasp.org). Пожалуйста, не сообщайте об уязвимостях через GitHub issues, так как мы хотим обеспечить безопасность наших пользователей, пока реализуется и разворачивается патч. Если вы хотите, чтобы вас упомянули за обнаружение уязвимости, пожалуйста, следуйте этому процессу.

Более подробная информация доступна в файле: SECURITY.md.

Как собрать

Вы можете легко собрать и протестировать из исходников:

root@kitploit:~
$ git clone https://github.com/nahsra/antisamy
$ cd antisamy
$ mvn package

Лицензия

Выпущено под лицензией BSD-3-Clause как указано здесь: LICENSE.

Скачать инструмент