mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
This commit updates the logic related to the attribute and property binding rules for <iframe> elements. There is a set of <iframe> attributes that may affect the behavior of an iframe and this change enforces that these attributes are only applied as static attributes, making sure that they are taken into account while creating an <iframe>. If Angular detects that some of the security-sensitive attributes are applied as an attribute or property binding, it throws an error message, which contains the name of an attribute that is causing the problem and the name of a Component where an iframe is located. BREAKING CHANGE: Existing iframe usages may have security-sensitive attributes applied as an attribute or property binding in a template or via host bindings in a directive. Such usages would require an update to ensure compliance with the new stricter rules around iframe bindings. PR Close #47964
30 lines
1.2 KiB
TypeScript
30 lines
1.2 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import {IFRAME_SECURITY_SENSITIVE_ATTRS, SECURITY_SCHEMA} from '../src/schema/dom_security_schema';
|
|
|
|
|
|
describe('security-related tests', () => {
|
|
it('should have no overlap between `IFRAME_SECURITY_SENSITIVE_ATTRS` and `SECURITY_SCHEMA`',
|
|
() => {
|
|
// The `IFRAME_SECURITY_SENSITIVE_ATTRS` and `SECURITY_SCHEMA` tokens configure sanitization
|
|
// and validation rules and used to pick the right sanitizer function.
|
|
// This test verifies that there is no overlap between two sets of rules to flag
|
|
// a situation when 2 sanitizer functions may be needed at the same time (in which
|
|
// case, compiler logic should be extended to support that).
|
|
const schema = new Set();
|
|
Object.keys(SECURITY_SCHEMA()).forEach((key: string) => schema.add(key.toLowerCase()));
|
|
let hasOverlap = false;
|
|
IFRAME_SECURITY_SENSITIVE_ATTRS.forEach(attr => {
|
|
if (schema.has('*|' + attr) || schema.has('iframe|' + attr)) {
|
|
hasOverlap = true;
|
|
}
|
|
});
|
|
expect(hasOverlap).toBeFalse();
|
|
});
|
|
});
|