Java Hibernate @SafeHtml не позволяет ссылки на URL

Мне нужно иметь XSS-фильтр в моем текстовом поле, но мне нужно разрешить определенные html-теги для форматирования текста (жирным шрифтом, курсивом и т.д.), и мне также нужно разрешить ссылки на URL-адреса, например:

<p style='text-align: left;'><a href='google.com'>then with links!</a></p>

Итак, в моем классе сущности я добавил белый список:

@SafeHtml(whitelistType = WhiteListType.RELAXED,
        additionalTagsWithAttributes = { 
                @SafeHtml.Tag(name = "a", attributes = { "href" })
})
private String body;

Но это все равно дает мне следующую ошибку:

may have unsafe html content

Ответ 1

У вас есть две проблемы: атрибут style не поддерживается тегом p, а вторая проблема заключается в том, что атрибуту href не хватает протокола, который требуется всем WhiteListType s. См. Список ниже для протоколов, поддерживаемых тегом и атрибутом для Relaxed WhiteListType

Расслабление

  • тег "a", атрибут "href", протоколы { "ftp", "http" , "https" , "mailto" }
  • tag "blockquote", атрибут "cite", протоколы { "http" , "https" }
  • тег "cite", атрибут "cite", протоколы { "http" , "https" }
  • тег "img", атрибут "src", протоколы { "http" , "https" }
  • тег "q", атрибут "cite", протоколы { "http" , "https" }

Итак, в вашем случае текст

<p style='text-align: left;'><a href='google.com'>then with links!</a></p>

следует изменить на

<p style='text-align: left;'><a href='http://google.com'>then with links!</a></p> и нет, нет простого способа добавить пользовательские протоколы:)

И код Java должен быть изменен на

@SafeHtml(whitelistType = WhiteListType.RELAXED,
    additionalTagsWithAttributes = { 
            @SafeHtml.Tag(name = "p", attributes = { "style" })
})
private String body;