frame-src Directiveframe-src Content Security Policy (CSP) directive controls the loading of frames (for example via an <iframe> HTML tag) within a HTML document.Assume a Content-Security-Policy header is set with the following policy:
frame-src 'self' allowed-site.example.com
With the above CSP policy, frames can be loaded via the same origin (via the 'self' source list value), or via URLs on the domain: allowed-site.example.com using the same scheme as the parent document (eg https).
<iframe src="/folder/example.html"></iframe> <iframe src="https://allowed-site.example.com/frame.html"></iframe>
The above policy will block any frame from loading with a src attribute value that was not same origin or under the allowed-site.example.com domain, so the following would be blocked by CSP:
<iframe src="https://other.example.com/"></iframe>
frame and frameset tags?Yes, the CSP frame-src directive does apply to the frame and frameset tags, however these tags are deprecated.
If you do not set the frame-src CSP directive, but you do have the default-src CSP directive set, then that policy will be applied. You need to either make sure that your iframe src attribute values comply with the default-src policy, or you need to add a frame-src directive to your CSP policy.
Here are some example of what you might see in the console when images are blocked from loading by a CSP policy with a default-src policy set:
refused to load the image because it violates the following content security policy directive: "default-src 'none'". note that 'frame-src' was not explicitly set, so 'default-src' is used as a fallback.
refused to load the image 'http://localhost:8080/favicon.ico' because it violates the following content security policy directive: "default-src 'none'". note that 'frame-src' was not explicitly set, so 'default-src' is used as a fallback.
If you specify a content security policy with: frame-src 'none', this will prevents the iframe, frame, and frameset tags from loading via the src attribute. However, it is still possible to load an iframe using the srcdoc attribute with a frame-src: 'none'.
frame-src and frame-ancestors?The CSP frame-ancestors directive prevents a page from being loaded inside a frame, and the frame-src controls which urls can be placed inside an frame on the current page.
frame-srcThe CSP frame-src directive has been part of the Content Security Policy Specification since the first version of it (CSP Level 1).
The frame-src directive was deprecated in CSP Version 2 in favor of child-src, but was then undeprecated in CSP Level 3 (the latest version)
Internet Explorer 11 and below do not support the CSP frame-src directive. This means that IE11 will simply ignore the policy and allow frames to load from anywhere (as if a policy had not been set at all).
Want to learn the ins and outs CSP? Grab a copy of the CSP Developer Field Guide. It's a short and sweet guide to help developers get up to speed quickly.
Grab a CopyAdvisory Week is a weekly roundup of all the security advisories published by the major software vendors.