Skip to content
Snippets Groups Projects
  • zertrin's avatar
    af5380f5
    Fix security header setting in .htaccess by adding 'onsuccess unset' · af5380f5
    zertrin authored
    
    The headers might already be set by the system administrator at the http server
    level (apache or nginx) for some or all virtualhosts.
    
    Using "always set" in the .htaccess of Nextcloud leads to the situation where
    the headers might be set twice (once in the default 'onsuccess' table and once
    in the 'always' table)! Which leads to warnings in the admin area.
    
    Adding "onsuccess unset" solves the problem, and forces the header in
    the 'onsucess' table to be unset, and the header in the 'always' table to be set.
    
    NOTE: with this change, Nextcloud overrides whatever the system administrator
    might have already set
    
    See github issues #16893 #16476 #16938 #18017 and discussion in PR #19002
    
    Signed-off-by: default avatarzertrin <zertrin@gmail.com>
    af5380f5
    History
    Fix security header setting in .htaccess by adding 'onsuccess unset'
    zertrin authored
    
    The headers might already be set by the system administrator at the http server
    level (apache or nginx) for some or all virtualhosts.
    
    Using "always set" in the .htaccess of Nextcloud leads to the situation where
    the headers might be set twice (once in the default 'onsuccess' table and once
    in the 'always' table)! Which leads to warnings in the admin area.
    
    Adding "onsuccess unset" solves the problem, and forces the header in
    the 'onsucess' table to be unset, and the header in the 'always' table to be set.
    
    NOTE: with this change, Nextcloud overrides whatever the system administrator
    might have already set
    
    See github issues #16893 #16476 #16938 #18017 and discussion in PR #19002
    
    Signed-off-by: default avatarzertrin <zertrin@gmail.com>
.htaccess 2.96 KiB
<IfModule mod_headers.c>
  <IfModule mod_setenvif.c>
    <IfModule mod_fcgid.c>
       SetEnvIfNoCase ^Authorization$ "(.+)" XAUTHORIZATION=$1
       RequestHeader set XAuthorization %{XAUTHORIZATION}e env=XAUTHORIZATION
    </IfModule>
    <IfModule mod_proxy_fcgi.c>
       SetEnvIfNoCase Authorization "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>
  </IfModule>

  <IfModule mod_env.c>
    # Add security and privacy related headers

    # Avoid doubled headers by unsetting headers in "onsuccess" table,
    # then add headers to "always" table: https://github.com/nextcloud/server/pull/19002
    Header onsuccess unset Referrer-Policy
    Header always set Referrer-Policy "no-referrer"

    Header onsuccess unset X-Content-Type-Options
    Header always set X-Content-Type-Options "nosniff"

    Header onsuccess unset X-Download-Options
    Header always set X-Download-Options "noopen"

    Header onsuccess unset X-Frame-Options
    Header always set X-Frame-Options "SAMEORIGIN"

    Header onsuccess unset X-Permitted-Cross-Domain-Policies
    Header always set X-Permitted-Cross-Domain-Policies "none"

    Header onsuccess unset X-Robots-Tag
    Header always set X-Robots-Tag "none"

    Header onsuccess unset X-XSS-Protection
    Header always set X-XSS-Protection "1; mode=block"

    SetEnv modHeadersAvailable true
  </IfModule>

  # Add cache control for static resources
  <FilesMatch "\.(css|js|svg|gif)$">
    Header set Cache-Control "max-age=15778463"
  </FilesMatch>

  # Let browsers cache WOFF files for a week
  <FilesMatch "\.woff2?$">
    Header set Cache-Control "max-age=604800"
  </FilesMatch>
</IfModule>
<IfModule mod_php7.c>
  php_value mbstring.func_overload 0
  php_value default_charset 'UTF-8'
  php_value output_buffering 0
  <IfModule mod_env.c>
    SetEnv htaccessWorking true
  </IfModule>
</IfModule>
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_USER_AGENT} DavClnt
  RewriteRule ^$ /remote.php/webdav/ [L,R=302]
  RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  RewriteRule ^\.well-known/host-meta /public.php?service=host-meta [QSA,L]
  RewriteRule ^\.well-known/host-meta\.json /public.php?service=host-meta-json [QSA,L]
  RewriteRule ^\.well-known/webfinger /public.php?service=webfinger [QSA,L]
  RewriteRule ^\.well-known/nodeinfo /public.php?service=nodeinfo [QSA,L]
  RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L]
  RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L]
  RewriteRule ^remote/(.*) remote.php [QSA,L]
  RewriteRule ^(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
  RewriteCond %{REQUEST_URI} !^/\.well-known/(acme-challenge|pki-validation)/.*
  RewriteRule ^(?:\.|autotest|occ|issue|indie|db_|console).* - [R=404,L]
</IfModule>
<IfModule mod_mime.c>
  AddType image/svg+xml svg svgz
  AddEncoding gzip svgz
</IfModule>
<IfModule mod_dir.c>
  DirectoryIndex index.php index.html
</IfModule>
AddDefaultCharset utf-8
Options -Indexes
<IfModule pagespeed_module>
  ModPagespeed Off
</IfModule>