Вывод html контента на JSF страницу

227
02 сентября 2018, 16:10

На сайте есть редактор статей, он генерирует HTML код в зависимости от свойств текста. Его я отправляю на сервер, и чтобы снова вывести на странице просмотра данной статьи приходится отключать замену тегов HTML спецсимволам, т.е:

<h:outputText escape='false' content=${post.content}'/>

Но в таком случае, как я понимаю появляется уязвимость к XSS атакам, поэтому прежде чем загрузить, написанный контент в бд, я должен проверить на наличие script'ов внутри статьи, делаю это следующим образом:

public String replaceScript(String html){
    if(html == null || html.length() < 7){
        return html;
    }
    final String PATTERN_STRING = "<[. | \\n]*?script[. | \\n]*?>";
    final String replace1 = "&lt;"; // <
    final String replace2 = "&gt;"; // >
    Pattern pattern = Pattern.compile(PATTERN_STRING);
    Matcher matcher = pattern.matcher(html.trim());
    StringBuilder builder = new StringBuilder(html);
    while(matcher.find()){
        int start = matcher.start(), end = matcher.end();
        builder.replace(start , start, replace1);
        builder.replace(end + replace1.length(), end + replace1.length(), replace2 );
    }
    return builder.toString();
}

Всё ли я правильно сделал, или угроза XSS все равно остаётся?

Answer 1

Это только предохраняет от вставки тэгов <script>, но угроза все равно остается, поскольку некоторые значения могут содержать javascript инектированный код. Чтобы такого не происходило нужно инкодить значения переменных при выводе в JSP.

READ ALSO
Как получить подтверждение выполнения sql запроса если не было затронуто строк

Как получить подтверждение выполнения sql запроса если не было затронуто строк

возникла необходимость удалять строки в бд по условию, проблема в том что когда sql запрос выполняется успешно, но количество затрагиваемых...

160
Реализация метода Put(), getByKey для кастомного HashMap

Реализация метода Put(), getByKey для кастомного HashMap

Вопрос с собеседования:"нужно реализовать свои Put() и getByKey, для хеш-мапы" Может кто-то подсказать, как это можно сделать?

158
Выравнивание сетки товаров woocommerce

Выравнивание сетки товаров woocommerce

помогите пожалуйста выровнить сетку товаров в woocommerceВот здесь видно что не ровно отображаются товары из-за длинного названия

449