I have updated the Jhoose security module to support any Episerver 11 site, the only dependency is .Net Framework 4.7.1.
Installation
Install the package directly from the Optimizley Nuget repository. This will install the admin interface along with the middleware to add the CSP header to the response.
Github: https://github.com/andrewmarkham/contentsecuritypolicy
dotnet add package Jhoose.Security.Admin --version 1.2.2.148 Install-Package Jhoose.Security.Admin -Version 1.2.2.148
Configuration
The installation process will add the following nodes to the web.config file within your solution.
<configSections> <sectionGroup name="JhooseSecurity" type="Jhoose.Security.Configuration.JhooseSecurityOptionsConfigurationSectionGroup, Jhoose.Security"> <section name="Headers" type="Jhoose.Security.Configuration.HeadersSection, Jhoose.Security" /> <section name="Options" type="Jhoose.Security.Configuration.OptionsSection, Jhoose.Security" /> </sectionGroup> </configSections>
Register the module with the .Net pipeline
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <add name="JhooseSecurityModule" type="Jhoose.Security.HttpModules.JhooseSecurityModule, Jhoose.Security" /> </modules> </system.webServer>
Configuration options for the module
<JhooseSecurity> <Options httpsRedirect="true"> <Exclusions> <add path="/episerver" /> </Exclusions> </Options> <Headers> <StrictTransportSecurityHeader enabled="true" maxAge="31536000" /> <XFrameOptionsHeader enabled="true" mode="Deny|SameOrigin|AllowFrom" domain=""/> <XContentTypeOptionsHeader enabled="true" /> <XPermittedCrossDomainPoliciesHeader enabled="true" mode="None|MasterOnly|ByContentType|All"/> <ReferrerPolicyHeader enabled="true" mode="NoReferrer|NoReferrerWhenDownGrade|Origin|OriginWhenCrossOrigin|SameOrigin|StrictOrigin|StrictOriginWhenCrossOrigin|UnsafeUrl"/> <CrossOriginEmbedderPolicyHeader enabled="true" mode ="UnSafeNone|RequireCorp"/> <CrossOriginOpenerPolicyHeader enabled="true" mode="UnSafeNone|SameOriginAllowPopups|SameOrigin"/> <CrossOriginResourcePolicyHeader enabled="true" mode="SameSite|SameOrigin|CrossOrigin" /> </Headers> </JhooseSecurity>
Exclusions: Any request which starts with a path specified in this property will not include the CSP header.
httpsRedirect: This attribute controls whether all requests should be upgraded to HTTPS.
Nonce HTML helper
It is possible to get a nonce added to your inline <script>
and <style>
tags.
@using Jhoose.Security.Core.HtmlHelpers; <script @Html.AddNonce() src="/assets/js/jquery.min.js"></script>
Response Headers
The response headers can be controlled within the web.config
Server Header and X-Powered-By Header
These aren’t removed, the reason being
- When hosting within Optimizley DXP, the CDN will obfuscate the server value anyway.
- The header cannot be removed programmatically.
IIS 10
<!-- web.config --> <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <security> <requestFiltering removeServerHeader="true" /> </security> <httpProtocol> <customHeaders> <clear /> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer> </configuration>