Bugzilla::CGI::ContentSecurityPolicy - Object-oriented interface to generating CSP directives and adding them to headers.
=head1 SYNOPSIS
use Bugzilla::CGI::ContentSecurityPolicy;
my $csp = Bugzilla::CGI::ContentSecurityPolicy->new(
default_src => [ 'self' ],
style_src => [ 'self', 'unsafe-inline' ],
script_src => [ 'self', 'nonce' ],
child_src => ['none'],
report_uri => '/csp-report.cgi',
referrer => 'origin-when-cross-origin',
);
$csp->headers_names # returns a list of header names and depends on the value of $self->report_only
$csp->value # returns the string representation of the policy.
$csp->add_cgi_headers(\%hashref); # will insert entries compatible with CGI.pm's $cgi->headers() method into the provided hashref.
=head1 DESCRIPTION
This class provides an object interface to constructing Content Security Policies.
Rather than use this module, scripts should call $cgi->content_security_policy() which constructs the CSP headers
and registers them for the current request.
See L<Bugzilla::CGI> for details.
=head1 ATTRIBUTES
Generally all CSP directives are available as attributes to the constructor,
with dashes replaced by underscores. All directives that can be lists must be
passed as array references, and the quoting rules for urls and keywords like
'self' or 'none' is handled automatically.
=head2 report_only
If this is true, then the the -Report-Only version of the headers will be produced, so nothing will be blocked.
=head2 disable
If this is true, no CSP headers will be used at all.
=head2 base_uri
The base-uri directive defines the URIs that a user agent may use as the
document base URL. If this value is absent, then any URI is allowed. If this
directive is absent, the user agent will use the value in the base element.
=head2 child_src
The child-src directive defines the valid sources for web workers and nested
browsing contexts loaded using elements such as <frame> and <iframe>. This
directive is preferred over the frame-src directive, which is deprecated. For
workers, non-compliant requests are treated as fatal network errors by the user
agent.
=head2 connect_src
The connect-src directive defines valid sources for fetch, XMLHttpRequest, WebSocket, and EventSource connections.
=head2 default_src
The default-src directive defines the security policy for types of content which are not expressly called out by more specific directives. This directive covers the following directives:
=over 4
=item *
L</child_src>
=item *
L</connect_src>
=item *
L</font_src>
=item *
L</img_src>
=item *
L</media_src>
=item *
L</object_src>
=item *
L</script_src>
=item *
L</style_src>
=back
=head2 font_src
The font-src directive specifies valid sources for fonts loaded using @font-face.
=head2 img_src
The img-src directive specifies valid sources of images and favicons.
=head2 manifest_src
The manifest-src directive specifies which manifest can be applied to the resource.
=head2 media_src
The media-src directive specifies valid sources for loading media using the <audio> and <video> elements.
=head2 object_src
The object-src directive specifies valid sources for the <object>, <embed>, and <applet> elements.
=head2 referrer
The referrer directive specifies information in the B<referer> (sic) header for
links away from a page. Valid values are C<no-referrer>,
C<no-referrer-when-downgrade>, C<origin>, C<origin-when-cross-origin>, and
C<unsafe-url>.
=head2 report_uri
The report-uri directive instructs the user agent to report attempts to violate
the Content Security Policy. These violation reports consist of JSON documents
sent via an HTTP POST request to the specified URI.
=head2 sandbox
The sandbox directive applies restrictions to a page's actions including
preventing popups, preventing the execution of plugins and scripts, and
enforcing a same-origin policy.
=head2 script_src
The script-src directive specifies valid sources for JavaScript. When either the
script-src or the default-src directive is included, inline script and eval()
are disabled unless you specify 'unsafe-inline' and 'unsafe-eval', respectively.
In Chrome 49 and later, 'script-src http' will match both HTTP and HTTPS.
=head2 style_src
The style-src directive specifies valid sources for stylesheets. This includes
both externally-loaded stylesheets and inline use of the C<style> element and
HTML style attributes. Stylesheets from sources that aren't included in the
source list are not requested or loaded. When either the style-src or the
default-src directive is included, inline use of the C<style> element and HTML
style attributes are disabled unless you specify 'unsafe-inline'.
=head2 upgrade_insecure_requests
The upgrade-insecure-requests directive instructs user agents to treat all of a
site's unsecure URL's (those serverd over HTTP) as though they have been
replaced with secure URL's (those served over HTTPS). This directive is intended
for web sites with large numbers of unsecure legacy URL's that need to be
rewritten.
=head1 METHODS
=head2 headers()
This returns a list of header names. This will typically be
C<Content-Security-Policy>, C<X-Content-Security-Policy>, and C<X-WebKit-CSP>.
=head2 value()
This returns the value or right-of-colon part of the header.
=head2 add_cgi_headers($headers)
This adds C<header_value()> to C<$headers> in a format that is compatible with
L<CGI>'s headers() method.
=head2 nonce() / has_nonce()
This is unique value that can used if the 'nonce' is used as a source for