Ответ 1
Выполните санитарную обработку html с помощью модуля sanitize-html и визуализируйте очищенную строку, используя опасно SetInnerHTML.
Вы можете создать простой компонент оболочки:
const defaultOptions = {
allowedTags: [ 'b', 'i', 'em', 'strong', 'a' ],
allowedAttributes: {
'a': [ 'href' ]
},
allowedIframeHostnames: ['www.youtube.com']
};
const sanitize = (dirty, options) => ({
__html: sanitizeHtml(
dirty,
options: { ...defaultOptions, ...options }
)
});
const SanitizeHTML = ({ html, options }) => (
<div dangerouslySetInnerHTML={sanitize(html, options)} />
);
Использование:
<SanitizeHTML html="<img src=x onerror=alert('img') />" />
Вы также можете использовать ответный-sanitized-html компонент SanitizedHTML, который является оболочкой реагирования вокруг sanitize-html
:
<SanitizedHTML
allowedAttributes={{ 'a': ['href'] }}
allowedTags={['a']}
html={ '<a href="http://bing.com/">Bing</a>' }
/>