如何防止触发 HTML 属性中的事件处理程序?
How to prevent event handlers in HTML attributes from firing?
我最近了解到,浏览器只要在元素上设置内容,就会触发 details
元素的 toggle
事件,即使它不在 DOM 中也是如此。以下执行警报:
document.createElement('p').innerHTML = "<details open ontoggle=\"alert('BAD')\">"
同样适用于图像及其 onload
事件。
将此与使用 script
标签进行比较。以下不执行任何操作:
document.createElement('p').innerHTML = "<script>alert('FINE')</script>"
已在 Chrome 和 Firefox 中测试。
有没有办法像这样抑制内联事件处理程序的执行?理想情况下可以在父元素上设置的东西
我考虑过在父级上添加一个事件处理程序,但是 toggle event 没有冒泡!
一个明显的解决方案是清理 html 源,但我正在寻找比字符串操作更优雅和防弹的东西。
答案是Content-Security-Policy。根本不允许 unsafe-inline
.
我最近了解到,浏览器只要在元素上设置内容,就会触发 details
元素的 toggle
事件,即使它不在 DOM 中也是如此。以下执行警报:
document.createElement('p').innerHTML = "<details open ontoggle=\"alert('BAD')\">"
同样适用于图像及其 onload
事件。
将此与使用 script
标签进行比较。以下不执行任何操作:
document.createElement('p').innerHTML = "<script>alert('FINE')</script>"
已在 Chrome 和 Firefox 中测试。
有没有办法像这样抑制内联事件处理程序的执行?理想情况下可以在父元素上设置的东西
我考虑过在父级上添加一个事件处理程序,但是 toggle event 没有冒泡!
一个明显的解决方案是清理 html 源,但我正在寻找比字符串操作更优雅和防弹的东西。
答案是Content-Security-Policy。根本不允许 unsafe-inline
.