| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- const sanitizeHtml = require('sanitize-html')
- const sanitize = html => sanitizeHtml(html, {
- allowedTags: [
- // HTML
- 'a', 'abbr', 'acronym', 'address', /*'applet',*/ 'area', 'article', 'aside', /*'audio'*/, 'b', 'base', 'basefont', 'bdi',
- 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup',
- 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'em', /*'embed',*/ 'fieldset',
- 'figcaption', 'figure', 'font', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head',
- 'header', 'hr', 'html', 'i', /*'iframe',*/ 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'link', 'main',
- 'map', 'mark', 'meta', 'meter', 'nav', 'noframes', 'noscript', /*'object',*/ 'ol', 'optgroup', 'option', 'output',
- 'p', /*'param',*/ 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', /*'script',*/ 'section', 'select',
- 'small', 'source', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'svg', 'table', 'tbody', 'td', 'template',
- 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'tt', 'u', 'ul', 'var', /*'video',*/ 'wbr',
- // SVG
- 'a', 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'animate', 'animateColor', 'animateMotion', 'animateTransform', 'circle',
- 'clipPath', 'color-profile', 'cursor', 'defs', 'desc', 'discard', 'ellipse', 'feBlend', 'feColorMatrix',
- 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight',
- 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode',
- 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence', 'filter', 'font',
- 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignObject', 'g', 'glyph',
- 'glyphRef', 'hatch', 'hatchpath', 'hkern', 'image', 'line', 'linearGradient', 'marker', 'mask', 'mesh', 'meshgradient',
- 'meshpatch', 'meshrow', 'metadata', 'missing-glyph', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient',
- 'rect', /*'script',*/ 'set', 'solidcolor', 'stop', 'style', 'svg', 'switch', 'symbol', 'text', 'textPath', 'title', 'tref',
- 'tspan', 'unknown', 'use', 'view', 'vkern'
- ],
- allowedAttributes: {
- '*': [
- // HTML
- 'accept', 'accept-charset', 'accesskey', 'action', 'align', 'alt', 'async', 'autocomplete', 'autofocus', 'autoplay',
- 'bgcolor', 'border', 'charset', 'checked', 'cite', 'class', 'color', 'cols', 'colspan', 'content', 'contenteditable',
- 'controls', 'coords', 'data', 'data-*', 'datetime', 'default', 'defer', 'dir', 'dirname', 'disabled', 'download',
- 'draggable', 'dropzone', 'enctype', 'for', 'form', 'formaction', 'headers', 'height', 'hidden', 'high', 'href',
- 'hreflang', /*'http-equiv'*/, 'id', 'ismap', 'kind', 'label', 'lang', 'list', 'loop', 'low', 'max', 'maxlength', 'media',
- 'method', 'min', 'multiple', 'muted', 'name', 'novalidate', /*'onabort',*/ /*'onafterprint',*/ /*'onbeforeprint',*/
- /*'onbeforeunload',*/ /*'onblur',*/ /*'oncanplay',*/ /*'oncanplaythrough',*/ /*'onchange',*/ /*'onclick',*/
- /*'oncontextmenu',*/ /*'oncopy',*/ /*'oncuechange',*/ /*'oncut',*/ /*'ondblclick',*/ /*'ondrag',*/ /*'ondragend',*/
- /*'ondragenter',*/ /*'ondragleave',*/ /*'ondragover',*/ /*'ondragstart',*/ /*'ondrop',*/ /*'ondurationchange',*/
- /*'onemptied',*/ /*'onended',*/ /*'onerror',*/ /*'onfocus',*/ /*'onhashchange',*/ /*'oninput',*/ /*'oninvalid',*/
- /*'onkeydown',*/ /*'onkeypress',*/ /*'onkeyup',*/ /*'onload',*/ /*'onloadeddata',*/ /*'onloadedmetadata',*/
- /*'onloadstart',*/ /*'onmousedown',*/ /*'onmousemove',*/ /*'onmouseout',*/ /*'onmouseover',*/ /*'onmouseup',*/
- /*'onmousewheel',*/ /*'onoffline',*/ /*'ononline',*/ /*'onpagehide',*/ /*'onpageshow',*/ /*'onpaste',*/ /*'onpause',*/
- /*'onplay',*/ /*'onplaying',*/ /*'onpopstate',*/ /*'onprogress',*/ /*'onratechange',*/ /*'onreset',*/ /*'onresize',*/
- /*'onscroll',*/ /*'onsearch',*/ /*'onseeked',*/ /*'onseeking',*/ /*'onselect',*/ /*'onstalled',*/ /*'onstorage',*/
- /*'onsubmit',*/ /*'onsuspend',*/ /*'ontimeupdate',*/ /*'ontoggle',*/ /*'onunload',*/ /*'onvolumechange',*/
- /*'onwaiting',*/ /*'onwheel',*/ 'open', 'optimum', 'pattern', 'placeholder', 'poster', 'preload', 'readonly', 'rel',
- 'required', 'reversed', 'rows', 'rowspan', 'sandbox', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'spellcheck',
- 'src', 'srcdoc', 'srclang', 'srcset', 'start', 'step', 'style', 'tabindex', 'target', 'title', 'translate', 'type',
- 'usemap', 'value', 'width', 'wrap',
- // SVG
- 'accent-height', 'accumulate', 'additive', 'alignment-baseline', 'allowReorder', 'alphabetic', 'amplitude',
- 'arabic-form', 'ascent', 'attributeName', 'attributeType', 'autoReverse', 'azimuth', 'baseFrequency', 'baseline-shift',
- 'baseProfile', 'bbox', 'begin', 'bias', 'by', 'calcMode', 'cap-height', 'class', 'clip', 'clipPathUnits', 'clip-path',
- 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering',
- 'contentScriptType', 'contentStyleType', 'cursor', 'cx', 'cy', 'd', 'decelerate', 'descent', 'diffuseConstant',
- 'direction', 'display', 'divisor', 'dominant-baseline', 'dur', 'dx', 'dy', 'edgeMode', 'elevation', 'enable-background',
- 'end', 'exponent', 'externalResourcesRequired', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterRes', 'filterUnits',
- 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style',
- 'font-variant', 'font-weight', 'format', 'from', 'fr', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyph-orientation-horizontal',
- 'glyph-orientation-vertical', 'glyphRef', 'gradientTransform', 'gradientUnits', 'hanging', 'height', 'href', 'hreflang',
- 'horiz-adv-x', 'horiz-origin-x', 'id', 'ideographic', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3',
- 'k4', 'kernelMatrix', 'kernelUnitLength', 'kerning', 'keyPoints', 'keySplines', 'keyTimes', 'lang', 'lengthAdjust',
- 'letter-spacing', 'lighting-color', 'limitingConeAngle', 'local', 'marker-end', 'marker-mid', 'marker-start',
- 'markerHeight', 'markerUnits', 'markerWidth', 'mask', 'maskContentUnits', 'maskUnits', 'mathematical', 'max', 'media',
- 'method', 'min', 'mode', 'name', 'numOctaves', 'offset', 'opacity', 'operator', 'order', 'orient', 'orientation', 'origin',
- 'overflow', 'overline-position', 'overline-thickness', 'panose-1', 'paint-order', 'path', 'pathLength',
- 'patternContentUnits', 'patternTransform', 'patternUnits', 'ping', 'pointer-events', 'points', 'pointsAtX', 'pointsAtY',
- 'pointsAtZ', 'preserveAlpha', 'preserveAspectRatio', 'primitiveUnits', 'r', 'radius', 'referrerPolicy', 'refX', 'refY',
- 'rel', 'rendering-intent', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'result',
- 'rotate', 'rx', 'ry', 'scale', 'seed', 'shape-rendering', 'slope', 'spacing', 'specularConstant', 'specularExponent',
- 'speed', 'spreadMethod', 'startOffset', 'stdDeviation', 'stemh', 'stemv', 'stitchTiles', 'stop-color', 'stop-opacity',
- 'strikethrough-position', 'strikethrough-thickness', 'string', 'stroke', 'stroke-dasharray', 'stroke-dashoffset',
- 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'surfaceScale',
- 'systemLanguage', 'tabindex', 'tableValues', 'target', 'targetX', 'targetY', 'text-anchor', 'text-decoration',
- 'text-rendering', 'textLength', 'to', 'transform', 'type', 'u1', 'u2', 'underline-position', 'underline-thickness',
- 'unicode', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic',
- 'v-mathematical', 'values', 'vector-effect', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'viewBox',
- 'viewTarget', 'visibility', 'width', 'widths', 'word-spacing', 'writing-mode', 'x', 'x-height', 'x1', 'x2',
- 'xChannelSelector', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title',
- 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y', 'y1', 'y2', 'yChannelSelector', 'z', 'zoomAndPan'
- ]
- },
- selfClosing: [ 'img', 'br', 'hr', 'area', 'base', 'basefont', 'input', 'link', 'meta' ],
- allowedSchemes: [ 'http', 'https', 'ftp', 'mailto', 'data' ],
- allowedSchemesByTag: {},
- allowedSchemesAppliedToAttributes: [ 'href', 'src', 'cite' ],
- allowProtocolRelative: true,
- allowedIframeHostnames: []
- })
- module.exports = sanitize
|