0
0
mirror of https://github.com/twbs/bootstrap.git synced 2024-12-02 14:24:19 +01:00
Bootstrap/js/tests/unit/util/sanitizer.spec.js

81 lines
2.2 KiB
JavaScript
Raw Normal View History

import { DefaultAllowlist, sanitizeHtml } from '../../../src/util/sanitizer'
2019-03-13 15:23:50 +01:00
describe('Sanitizer', () => {
describe('sanitizeHtml', () => {
it('should return the same on empty string', () => {
const empty = ''
const result = sanitizeHtml(empty, DefaultAllowlist, null)
2019-03-13 15:23:50 +01:00
expect(result).toEqual(empty)
})
it('should sanitize template by removing tags with XSS', () => {
const template = [
'<div>',
' <a href="javascript:alert(7)">Click me</a>',
' <span>Some content</span>',
'</div>'
].join('')
const result = sanitizeHtml(template, DefaultAllowlist, null)
2019-03-13 15:23:50 +01:00
expect(result).not.toContain('href="javascript:alert(7)')
2019-03-13 15:23:50 +01:00
})
it('should allow aria attributes and safe attributes', () => {
const template = [
'<div aria-pressed="true">',
' <span class="test">Some content</span>',
'</div>'
].join('')
const result = sanitizeHtml(template, DefaultAllowlist, null)
2019-03-13 15:23:50 +01:00
expect(result).toContain('aria-pressed')
expect(result).toContain('class="test"')
2019-03-13 15:23:50 +01:00
})
it('should remove tags not in allowlist', () => {
2019-03-13 15:23:50 +01:00
const template = [
'<div>',
' <script>alert(7)</script>',
'</div>'
].join('')
const result = sanitizeHtml(template, DefaultAllowlist, null)
2019-03-13 15:23:50 +01:00
expect(result).not.toContain('<script>')
2019-03-13 15:23:50 +01:00
})
it('should not use native api to sanitize if a custom function passed', () => {
const template = [
'<div>',
' <span>Some content</span>',
'</div>'
].join('')
function mySanitize(htmlUnsafe) {
return htmlUnsafe
}
spyOn(DOMParser.prototype, 'parseFromString')
const result = sanitizeHtml(template, DefaultAllowlist, mySanitize)
2019-03-13 15:23:50 +01:00
expect(result).toEqual(template)
expect(DOMParser.prototype.parseFromString).not.toHaveBeenCalled()
})
it('should allow multiple sanitation passes of the same template', () => {
const template = '<img src="test.jpg">'
const firstResult = sanitizeHtml(template, DefaultAllowlist, null)
const secondResult = sanitizeHtml(template, DefaultAllowlist, null)
expect(firstResult).toContain('src')
expect(secondResult).toContain('src')
})
2019-03-13 15:23:50 +01:00
})
})