-
Notifications
You must be signed in to change notification settings - Fork 23
Description
BBob/packages/bbob-plugin-helper/src/helpers.js
Lines 28 to 39 in 3575982
| /** | |
| * Replaces " to &qquot; | |
| * @param {String} value | |
| */ | |
| const escapeHTML = (value) => value | |
| .replace(/&/g, '&') | |
| .replace(/</g, '<') | |
| .replace(/>/g, '>') | |
| .replace(/"/g, '"') | |
| .replace(/'/g, ''') | |
| // eslint-disable-next-line no-script-url | |
| .replace(/(javascript|data|vbscript):/gi, '$1%3A'); |
The name escapeHTML suggests, that the method may be used to sanitize text-content and get rid of probably malicious nested HTML in BBCode, like [i]<script>javascript:alert("XSS!"</script>[/i]. Unfortunately, the method has an extra turn, to support escaping of probably unsafe href attributes: It also escapes problematic protocols assuming, we are in a URL-context.
Thus, naively reused in custom API the above will escape the text content to:
<script>javascript%3Aalert... (etc.)The suggestion for clarity is to name the method escapeHTMLAttribute or, as this is considered breaking, at least mention this usage in the JSdoc.
Otherwise, I think the best option for escaping (and I tend to switch to it) is to rely on DOM processing as suggested in #148 (comment).