security::csp::render (public)
security::csp::render
Defined in packages/acs-tcl/tcl/security-procs.tcl
This is the CSP generator. Collect the specified directives and build from these directives the full CSP specification for the current page.
- Author:
- Gustaf Neumann
- See Also:
- Partial Call Graph (max 5 caller/called nodes):
- Testcases:
- No testcase defined.
Source code: # # Fetch the nonce token # set nonce [::security::csp::nonce] # # Add 'self' rules # security::csp::require default-src 'none' security::csp::require script-src 'self' #security::csp::require script-src 'strict-dynamic' security::csp::require style-src 'self' security::csp::require img-src 'self' security::csp::require font-src 'self' security::csp::require base-uri 'self' security::csp::require connect-src 'self' # # Some browser (safari, chrome) need "font-src data:", maybe # for plugins or different font settings. Seems safe enough. # security::csp::require font-src data: # # Always add the nonce token to script-src. Note that nonce # definition comes via CSP 2, which - at the current time - is # not supported by all browsers interpreting CSPs. We could # add a "unsafe-inline" here, since the spec defines that when # 'unsafe-inline' and a 'nonce-source' is used, the # 'unsafe-inline'" will have no effect # (https://w3c.github.io/webappsec-csp/ § 6.6.2.2.). However, # some security checkers just look for 'unsafe-inline' and # downgrade the rating without honoring the 'nonce-src'. # # Another problem is mixed content. When we set the nonce-src # and 'unsafe-inline', and a browser honoring nonces ignores # the 'unsafe-inline', but some JavaScript framework requires # it (e.g. ckeditor4), we have a problem. Therefore, an # application can force "'unsafe-inline'" which means that we # do not set the nonce-src in such cases. # if {![info exists ::__csp__directive_forced(script-src)] || "'unsafe-inline'" ni $::__csp__directive_forced(script-src) } { security::csp::require script-src 'nonce-$nonce' } # We need for the time being 'unsafe-inline' for style-src, # otherwise not even the style attribute (e.g. <p # style="...">) would be allowed. # security::csp::require style-src 'unsafe-inline' # # Use newer "report-to" will be preferred and "report-uri" # deprecated. As of May 2020: no support for "report-to" for # FF (75, or forthcoming 66 and 77) or Safari. # https://caniuse.com/#search=report-to # security::csp::require report-uri /SYSTEM/csp-collector.tcl #ns_set [ns_conn outputheaders] Report-To "{'url':'/SYSTEM/csp-collector.tcl','group':'csp-endpoint','max-age':10886400}" #security::csp::require report-to csp-endpoint # # We do not need object-src # security::csp::require object-src 'none' security::csp::require form-action 'self' security::csp::require frame-ancestors 'self' #security::csp::require require-trusted-types-for 'script' set policy "" # base-uri foreach directive { base-uri child-src connect-src default-src font-src form-action frame-ancestors frame-src img-src media-src object-src plugin-types report-uri require-trusted-types-for sandbox script-src style-src trusted-types } { set var ::__csp__directive($directive) if {[info exists $var]} { append policy "$directive [join [set $var] { }];" } } return $policyGeneric XQL file: packages/acs-tcl/tcl/security-procs.xql
PostgreSQL XQL file: packages/acs-tcl/tcl/security-procs-postgresql.xql
Oracle XQL file: packages/acs-tcl/tcl/security-procs-oracle.xql