Skip to content

Commit 8d4b04c

Browse files
authored
Use template node instead of div to reduce XSS risk and make innerHTML call Trusted Types compatible (ampproject#38629)
1 parent 045b685 commit 8d4b04c

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

extensions/amp-story/1.0/semantic-render.js

+18-3
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,22 @@ function extractTextContentWebVtt(text) {
148148
.join(' ');
149149
// Super loose HTML parsing to get HTML entity parsing and removal
150150
// of WebVTT elements.
151-
const div = <div />;
152-
div./* element is never added to DOM */ innerHTML = text;
153-
return div.textContent;
151+
// Assigning .innerHTML of a <template> node to prevent XSS risk.
152+
const wrapperTemplate = <template />;
153+
// Make innerHTML assignment Trusted Types compliant for compatible browsers
154+
if (self.trustedTypes && self.trustedTypes.createPolicy) {
155+
const policy = self.trustedTypes.createPolicy(
156+
'semantic-render#extractTextContentWebVtt',
157+
{
158+
createHTML: function (unused) {
159+
return text;
160+
},
161+
}
162+
);
163+
wrapperTemplate./* element is never added to DOM */ innerHTML =
164+
policy.createHTML('ignored');
165+
} else {
166+
wrapperTemplate./* element is never added to DOM */ innerHTML = text;
167+
}
168+
return wrapperTemplate.content.textContent;
154169
}

0 commit comments

Comments
 (0)