Интерполяция строковых переменных Java [duplicate]

Большинство ответов, приведенных здесь, имеют огромный недостаток: если строка, которую вы пытаетесь преобразовать, не доверяет, вы получите уязвимость Cross-Site Scripting (XSS) . Для функции в принятом ответе рассмотрим следующее:

htmlDecode("");

Строка здесь содержит неэкранированный HTML-тег, поэтому вместо декодирования ничего функция htmlDecode будет на самом деле запустить код JavaScript, указанный внутри строки.

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

function htmlDecode(input)
{
  var doc = new DOMParser().parseFromString(input, "text/html");
  return doc.documentElement.textContent;
}

// This returns ""
htmlDecode("<img src='myimage.jpg'>");

// This returns ""
htmlDecode("");

Эта функция не гарантирует, что какой-либо код JavaScript не будет работать как побочный эффект. Любые теги HTML будут проигнорированы, будет возвращен только текстовый контент.

Замечание о совместимости : для анализа HTML с DOMParser требуется, по крайней мере, Chrome 30, Firefox 12, Opera 17, Internet Explorer 10, Safari 7.1 или Microsoft Edge. Таким образом, все браузеры без поддержки проходят мимо EOL, и по состоянию на 2017 год единственными, которые по-прежнему могут встречаться в дикой природе, являются более старые версии Internet Explorer и Safari (как правило, они все еще недостаточно многочисленны, чтобы беспокоиться).

141
задан kodliber 26 February 2018 в 22:15
поделиться