Created
March 10, 2020 19:17
-
-
Save davecurrierseo/3c8cec6f74379ea3b90b074621aba26a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Apache Server Configs v2.15.0 | MIT License | |
# https://github.com/h5bp/server-configs-apache | |
# (!) Using `.htaccess` files slows down Apache, therefore, if you have | |
# access to the main server configuration file (which is usually called | |
# `httpd.conf`), you should add this logic there. | |
# | |
# https://httpd.apache.org/docs/current/howto/htaccess.html | |
# ###################################################################### | |
# # CROSS-ORIGIN # | |
# ###################################################################### | |
# ---------------------------------------------------------------------- | |
# | Cross-origin requests | | |
# ---------------------------------------------------------------------- | |
# Allow cross-origin requests. | |
# | |
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS | |
# https://enable-cors.org/ | |
# https://www.w3.org/TR/cors/ | |
# <IfModule mod_headers.c> | |
# Header set Access-Control-Allow-Origin "*" | |
# </IfModule> | |
# ---------------------------------------------------------------------- | |
# | Cross-origin images | | |
# ---------------------------------------------------------------------- | |
# Send the CORS header for images when browsers request it. | |
# | |
# https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image | |
# https://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html | |
<IfModule mod_setenvif.c> | |
<IfModule mod_headers.c> | |
<FilesMatch "\.(bmp|cur|gif|ico|jpe?g|png|svgz?|webp)$"> | |
SetEnvIf Origin ":" IS_CORS | |
Header set Access-Control-Allow-Origin "*" env=IS_CORS | |
</FilesMatch> | |
</IfModule> | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | Cross-origin web fonts | | |
# ---------------------------------------------------------------------- | |
# Allow cross-origin access to web fonts. | |
<IfModule mod_headers.c> | |
<FilesMatch "\.(eot|otf|tt[cf]|woff2?)$"> | |
Header set Access-Control-Allow-Origin "*" | |
</FilesMatch> | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | Cross-origin resource timing | | |
# ---------------------------------------------------------------------- | |
# Allow cross-origin access to the timing information for all resources. | |
# | |
# If a resource isn't served with a `Timing-Allow-Origin` header that | |
# would allow its timing information to be shared with the document, | |
# some of the attributes of the `PerformanceResourceTiming` object will | |
# be set to zero. | |
# | |
# https://www.w3.org/TR/resource-timing/ | |
# http://www.stevesouders.com/blog/2014/08/21/resource-timing-practical-tips/ | |
# <IfModule mod_headers.c> | |
# Header set Timing-Allow-Origin: "*" | |
# </IfModule> | |
# ###################################################################### | |
# # ERRORS # | |
# ###################################################################### | |
# ---------------------------------------------------------------------- | |
# | Custom error messages/pages | | |
# ---------------------------------------------------------------------- | |
# Customize what Apache returns to the client in case of an error. | |
# https://httpd.apache.org/docs/current/mod/core.html#errordocument | |
ErrorDocument 404 default | |
ErrorDocument 403 default | |
# ---------------------------------------------------------------------- | |
# | Error prevention | | |
# ---------------------------------------------------------------------- | |
# Disable the pattern matching based on filenames. | |
# | |
# This setting prevents Apache from returning a 404 error as the result | |
# of a rewrite when the directory with the same name does not exist. | |
# | |
# https://httpd.apache.org/docs/current/content-negotiation.html#multiviews | |
Options -MultiViews | |
# ###################################################################### | |
# # INTERNET EXPLORER # | |
# ###################################################################### | |
# ---------------------------------------------------------------------- | |
# | Document modes | | |
# ---------------------------------------------------------------------- | |
# Force Internet Explorer 8/9/10 to render pages in the highest mode | |
# available in the various cases when it may not. | |
# | |
# https://hsivonen.fi/doctype/#ie8 | |
# | |
# (!) Starting with Internet Explorer 11, document modes are deprecated. | |
# If your business still relies on older web apps and services that were | |
# designed for older versions of Internet Explorer, you might want to | |
# consider enabling `Enterprise Mode` throughout your company. | |
# | |
# https://msdn.microsoft.com/en-us/library/ie/bg182625.aspx#docmode | |
# https://blogs.msdn.microsoft.com/ie/2014/04/02/stay-up-to-date-with-enterprise-mode-for-internet-explorer-11/ | |
<IfModule mod_headers.c> | |
Header set X-UA-Compatible "IE=edge" | |
# `mod_headers` cannot match based on the content-type, however, | |
# the `X-UA-Compatible` response header should be send only for | |
# HTML documents and not for the other resources. | |
<FilesMatch "\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ic[os]|jpe?g|m?js|json(ld)?|m4[av]|manifest|map|markdown|md|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$"> | |
Header unset X-UA-Compatible | |
</FilesMatch> | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | Iframes cookies | | |
# ---------------------------------------------------------------------- | |
# Allow cookies to be set from iframes in Internet Explorer. | |
# | |
# https://msdn.microsoft.com/en-us/library/ms537343.aspx | |
# https://www.w3.org/TR/2000/CR-P3P-20001215/ | |
# <IfModule mod_headers.c> | |
# Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"" | |
# </IfModule> | |
# ###################################################################### | |
# # MEDIA TYPES AND CHARACTER ENCODINGS # | |
# ###################################################################### | |
# ---------------------------------------------------------------------- | |
# | Media types | | |
# ---------------------------------------------------------------------- | |
# Serve resources with the proper media types (f.k.a. MIME types). | |
# | |
# https://www.iana.org/assignments/media-types/media-types.xhtml | |
# https://httpd.apache.org/docs/current/mod/mod_mime.html#addtype | |
<IfModule mod_mime.c> | |
# Data interchange | |
AddType application/atom+xml atom | |
AddType application/json json map topojson | |
AddType application/ld+json jsonld | |
AddType application/rss+xml rss | |
AddType application/vnd.geo+json geojson | |
AddType application/xml rdf xml | |
# JavaScript | |
# Normalize to standard type. | |
# https://tools.ietf.org/html/rfc4329#section-7.2 | |
AddType application/javascript js mjs | |
# Manifest files | |
AddType application/manifest+json webmanifest | |
AddType application/x-web-app-manifest+json webapp | |
AddType text/cache-manifest appcache | |
# Media files | |
AddType audio/mp4 f4a f4b m4a | |
AddType audio/ogg oga ogg opus | |
AddType image/bmp bmp | |
AddType image/svg+xml svg svgz | |
AddType image/webp webp | |
AddType video/mp4 f4v f4p m4v mp4 | |
AddType video/ogg ogv | |
AddType video/webm webm | |
AddType video/x-flv flv | |
# Serving `.ico` image files with a different media type | |
# prevents Internet Explorer from displaying them as images: | |
# https://github.com/h5bp/html5-boilerplate/commit/37b5fec090d00f38de64b591bcddcb205aadf8ee | |
AddType image/x-icon cur ico | |
# Web fonts | |
AddType font/woff woff | |
AddType font/woff2 woff2 | |
AddType application/vnd.ms-fontobject eot | |
AddType font/ttf ttf | |
AddType font/collection ttc | |
AddType font/otf otf | |
# Other | |
AddType application/octet-stream safariextz | |
AddType application/x-bb-appworld bbaw | |
AddType application/x-chrome-extension crx | |
AddType application/x-opera-extension oex | |
AddType application/x-xpinstall xpi | |
AddType text/calendar ics | |
AddType text/markdown markdown md | |
AddType text/vcard vcard vcf | |
AddType text/vnd.rim.location.xloc xloc | |
AddType text/vtt vtt | |
AddType text/x-component htc | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | Character encodings | | |
# ---------------------------------------------------------------------- | |
# Serve all resources labeled as `text/html` or `text/plain` | |
# with the media type `charset` parameter set to `UTF-8`. | |
# | |
# https://httpd.apache.org/docs/current/mod/core.html#adddefaultcharset | |
AddDefaultCharset utf-8 | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Serve the following file types with the media type `charset` | |
# parameter set to `UTF-8`. | |
# | |
# https://httpd.apache.org/docs/current/mod/mod_mime.html#addcharset | |
<IfModule mod_mime.c> | |
AddCharset utf-8 .atom \ | |
.bbaw \ | |
.css \ | |
.geojson \ | |
.ics \ | |
.js \ | |
.json \ | |
.jsonld \ | |
.manifest \ | |
.markdown \ | |
.md \ | |
.mjs \ | |
.rdf \ | |
.rss \ | |
.topojson \ | |
.vtt \ | |
.webapp \ | |
.webmanifest \ | |
.xloc \ | |
.xml | |
</IfModule> | |
# ###################################################################### | |
# # REWRITES # | |
# ###################################################################### | |
# ---------------------------------------------------------------------- | |
# | Rewrite engine | | |
# ---------------------------------------------------------------------- | |
# (1) Turn on the rewrite engine (this is necessary in order for | |
# the `RewriteRule` directives to work). | |
# | |
# https://httpd.apache.org/docs/current/mod/mod_rewrite.html#RewriteEngine | |
# | |
# (2) Enable the `FollowSymLinks` option if it isn't already. | |
# | |
# https://httpd.apache.org/docs/current/mod/core.html#options | |
# | |
# (3) If your web host doesn't allow the `FollowSymlinks` option, | |
# you need to comment it out or remove it, and then uncomment | |
# the `Options +SymLinksIfOwnerMatch` line (4), but be aware | |
# of the performance impact. | |
# | |
# https://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks | |
# | |
# (4) Some cloud hosting services will require you set `RewriteBase`. | |
# | |
# https://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-modrewrite-not-working-on-my-site | |
# https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase | |
# | |
# (5) Depending on how your server is set up, you may also need to | |
# use the `RewriteOptions` directive to enable some options for | |
# the rewrite engine. | |
# | |
# https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions | |
# | |
# (6) Set %{ENV:PROTO} variable, to allow rewrites to redirect with the | |
# appropriate schema automatically (http or https). | |
<IfModule mod_rewrite.c> | |
# (1) | |
RewriteEngine On | |
# (2) | |
Options +FollowSymlinks | |
# (3) | |
# Options +SymLinksIfOwnerMatch | |
# (4) | |
RewriteBase / | |
# (5) | |
# RewriteOptions <options> | |
# (6) | |
RewriteCond %{HTTPS} =on | |
RewriteRule ^ - [env=proto:https] | |
RewriteCond %{HTTPS} !=on | |
RewriteRule ^ - [env=proto:http] | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | Forcing `https://` | | |
# ---------------------------------------------------------------------- | |
# Redirect from the `http://` to the `https://` version of the URL. | |
# https://wiki.apache.org/httpd/RewriteHTTPToHTTPS | |
# <IfModule mod_rewrite.c> | |
# RewriteEngine On | |
# RewriteCond %{HTTPS} !=on | |
# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] | |
# </IfModule> | |
# ---------------------------------------------------------------------- | |
# | Suppressing / Forcing the `www.` at the beginning of URLs | | |
# ---------------------------------------------------------------------- | |
# The same content should never be available under two different | |
# URLs, especially not with and without `www.` at the beginning. | |
# This can cause SEO problems (duplicate content), and therefore, | |
# you should choose one of the alternatives and redirect the other | |
# one. | |
# | |
# By default `Option 1` (no `www.`) is activated. | |
# https://web.archive.org/web/20161122074017/http://no-www.org/faq.php?q=class_b | |
# | |
# If you would prefer to use `Option 2`, just comment out all the | |
# lines from `Option 1` and uncomment the ones from `Option 2`. | |
# | |
# (!) NEVER USE BOTH RULES AT THE SAME TIME! | |
# (1) The two rules assume by default that both HTTP and HTTPS | |
# environnements are available for redirection. | |
# If your SSL certificate could not handle one of the domains | |
# used during redirection, you should turn the condition on. | |
# | |
# https://github.com/h5bp/server-configs-apache/issues/52 | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Option 1: rewrite www.example.com → example.com | |
<IfModule mod_rewrite.c> | |
RewriteEngine On | |
# (1) | |
# RewriteCond %{HTTPS} !=on | |
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] | |
RewriteRule ^ %{ENV:PROTO}://%1%{REQUEST_URI} [R=301,L] | |
</IfModule> | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Option 2: rewrite example.com → www.example.com | |
# | |
# Be aware that the following might not be a good idea if you use "real" | |
# subdomains for certain parts of your website. | |
# <IfModule mod_rewrite.c> | |
# RewriteEngine On | |
# # (1) | |
# # RewriteCond %{HTTPS} !=on | |
# RewriteCond %{HTTP_HOST} !^www\. [NC] | |
# RewriteCond %{SERVER_ADDR} !=127.0.0.1 | |
# RewriteCond %{SERVER_ADDR} !=::1 | |
# RewriteRule ^ %{ENV:PROTO}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] | |
# </IfModule> | |
# ###################################################################### | |
# # SECURITY # | |
# ###################################################################### | |
# ---------------------------------------------------------------------- | |
# | Blocks malicious bots | | |
# ---------------------------------------------------------------------- | |
<IfModule mod_rewrite.c> | |
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:[email protected] [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR] | |
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR] | |
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^WWW-Mechanize [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Toata\ dragostea\ mea\ pentru\ diavola [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5.0\ SF [OR] | |
RewriteCond %{HTTP_USER_AGENT} ^Zeus | |
RewriteRule ^.* - [F,L] | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | Block scanner bots and malacious input | | |
# ---------------------------------------------------------------------- | |
<IfModule mod_rewrite.c> | |
RewriteCond %{HTTP_USER_AGENT} ^w3af.sourceforge.net [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} dirbuster [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} nikto [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} sqlmap [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} fimap [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} nessus [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} whatweb [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} Openvas [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} jbrofuzz [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} libwhisker [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} webshag [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} (havij|Netsparker|libwww-perl|python|nikto|curl|scan|java|winhttp|clshttp|loader) [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} (%0A|%0D|%27|%3C|%3E|%00) [NC,OR] | |
RewriteCond %{HTTP_USER_AGENT} (;|<|>|'|"|\)|\(|%0A|%0D|%22|%27|%28|%3C|%3E|%00).*(libwww-perl|python|nikto|curl|scan|java|winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR] | |
RewriteCond %{HTTP:Acunetix-Product} ^WVS | |
RewriteCond %{REQUEST_URI} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR] | |
RewriteCond %{REQUEST_URI} (<|%3C)([^e]*e)+mbed.*(>|%3E) [NC,OR] | |
RewriteCond %{REQUEST_URI} (<|%3C)([^o]*o)+bject.*(>|%3E) [NC,OR] | |
RewriteCond %{REQUEST_URI} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR] | |
RewriteCond %{REQUEST_URI} base64_(en|de)code[^(]*\([^)]*\) [NC,OR] | |
RewriteCond %{REQUEST_URI} (%0A|%0D|\\r|\\n) [NC,OR] | |
RewriteCond %{REQUEST_URI} union([^a]*a)+ll([^s]*s)+elect [NC] | |
RewriteRule ^(.*)$ http://127.0.0.1 [R=301,L] | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | Clickjacking | | |
# ---------------------------------------------------------------------- | |
# Protect website against clickjacking. | |
# | |
# The example below sends the `X-Frame-Options` response header with | |
# the value `DENY`, informing browsers not to display the content of | |
# the web page in any frame. | |
# | |
# This might not be the best setting for everyone. You should read | |
# about the other two possible values the `X-Frame-Options` header | |
# field can have: `SAMEORIGIN` and `ALLOW-FROM`. | |
# https://tools.ietf.org/html/rfc7034#section-2.1. | |
# | |
# Keep in mind that while you could send the `X-Frame-Options` header | |
# for all of your website’s pages, this has the potential downside that | |
# it forbids even non-malicious framing of your content (e.g.: when | |
# users visit your website using a Google Image Search results page). | |
# | |
# Nonetheless, you should ensure that you send the `X-Frame-Options` | |
# header for all pages that allow a user to make a state changing | |
# operation (e.g: pages that contain one-click purchase links, checkout | |
# or bank-transfer confirmation pages, pages that make permanent | |
# configuration changes, etc.). | |
# | |
# Sending the `X-Frame-Options` header can also protect your website | |
# against more than just clickjacking attacks: | |
# https://cure53.de/xfo-clickjacking.pdf. | |
# | |
# https://tools.ietf.org/html/rfc7034 | |
# https://blogs.msdn.microsoft.com/ieinternals/2010/03/30/combating-clickjacking-with-x-frame-options/ | |
# https://www.owasp.org/index.php/Clickjacking | |
<IfModule mod_headers.c> | |
Header set X-Frame-Options "DENY" | |
# `mod_headers` cannot match based on the content-type, however, | |
# the `X-Frame-Options` response header should be send only for | |
# HTML documents and not for the other resources. | |
<FilesMatch "\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ic[os]|jpe?g|m?js|json(ld)?|m4[av]|manifest|map|markdown|md|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$"> | |
Header unset X-Frame-Options | |
</FilesMatch> | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | File access | | |
# ---------------------------------------------------------------------- | |
# Block access to directories without a default document. | |
# | |
# You should leave the following uncommented, as you shouldn't allow | |
# anyone to surf through every directory on your server (which may | |
# includes rather private places such as the CMS's directories). | |
<IfModule mod_autoindex.c> | |
Options -Indexes | |
</IfModule> | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Block access to all hidden files and directories with the exception of | |
# the visible content from within the `/.well-known/` hidden directory. | |
# | |
# These types of files usually contain user preferences or the preserved | |
# state of an utility, and can include rather private places like, for | |
# example, the `.git` or `.svn` directories. | |
# | |
# The `/.well-known/` directory represents the standard (RFC 5785) path | |
# prefix for "well-known locations" (e.g.: `/.well-known/manifest.json`, | |
# `/.well-known/keybase.txt`), and therefore, access to its visible | |
# content should not be blocked. | |
# | |
# https://www.mnot.net/blog/2010/04/07/well-known | |
# https://tools.ietf.org/html/rfc5785 | |
<IfModule mod_rewrite.c> | |
RewriteEngine On | |
RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/([^./]+./?)+$" [NC] | |
RewriteCond %{SCRIPT_FILENAME} -d [OR] | |
RewriteCond %{SCRIPT_FILENAME} -f | |
RewriteRule "(^|/)\." - [F] | |
</IfModule> | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Block access to files that can expose sensitive information. | |
# | |
# By default, block access to backup and source files that may be | |
# left by some text editors and can pose a security risk when anyone | |
# has access to them. | |
# | |
# https://feross.org/cmsploit/ | |
# | |
# (!) Update the `<FilesMatch>` regular expression from below to | |
# include any files that might end up on your production server and | |
# can expose sensitive information about your website. These files may | |
# include: configuration files, files that contain metadata about the | |
# project (e.g.: project dependencies), build scripts, etc.. | |
<FilesMatch "(^#.*#|\.(bak|conf|dist|fla|in[ci]|log|orig|psd|sh|sql|sw[op])|~)$"> | |
# Apache < 2.3 | |
<IfModule !mod_authz_core.c> | |
Order allow,deny | |
Deny from all | |
Satisfy All | |
</IfModule> | |
# Apache ≥ 2.3 | |
<IfModule mod_authz_core.c> | |
Require all denied | |
</IfModule> | |
</FilesMatch> | |
# ---------------------------------------------------------------------- | |
# | HTTP Strict Transport Security (HSTS) | | |
# ---------------------------------------------------------------------- | |
# Force client-side SSL redirection. | |
# | |
# If a user types `example.com` in their browser, even if the server | |
# redirects them to the secure version of the website, that still leaves | |
# a window of opportunity (the initial HTTP connection) for an attacker | |
# to downgrade or redirect the request. | |
# | |
# The following header ensures that browser will ONLY connect to your | |
# server via HTTPS, regardless of what the users type in the browser's | |
# address bar. | |
# | |
# (!) Remove the `includeSubDomains` optional directive if the website's | |
# subdomains are not using HTTPS. | |
# | |
# https://www.html5rocks.com/en/tutorials/security/transport-layer-security/ | |
# https://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14#section-6.1 | |
# https://blogs.msdn.microsoft.com/ieinternals/2014/08/18/strict-transport-security/ | |
<IfModule mod_headers.c> | |
Header always set Strict-Transport-Security "max-age=16070400; includeSubDomains" | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | Reducing MIME type security risks | | |
# ---------------------------------------------------------------------- | |
# Prevent some browsers from MIME-sniffing the response. | |
# | |
# This reduces exposure to drive-by download attacks and cross-origin | |
# data leaks, and should be left uncommented, especially if the server | |
# is serving user-uploaded content or content that could potentially be | |
# treated as executable by the browser. | |
# | |
# https://www.slideshare.net/hasegawayosuke/owasp-hasegawa | |
# https://blogs.msdn.microsoft.com/ie/2008/07/02/ie8-security-part-v-comprehensive-protection/ | |
# https://msdn.microsoft.com/en-us/library/ie/gg622941.aspx | |
# https://mimesniff.spec.whatwg.org/ | |
<IfModule mod_headers.c> | |
Header set X-Content-Type-Options "nosniff" | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | Reflected Cross-Site Scripting (XSS) attacks | | |
# ---------------------------------------------------------------------- | |
# (1) Try to re-enable the cross-site scripting (XSS) filter built | |
# into most web browsers. | |
# | |
# The filter is usually enabled by default, but in some cases it | |
# may be disabled by the user. However, in Internet Explorer for | |
# example, it can be re-enabled just by sending the | |
# `X-XSS-Protection` header with the value of `1`. | |
# | |
# (2) Prevent web browsers from rendering the web page if a potential | |
# reflected (a.k.a non-persistent) XSS attack is detected by the | |
# filter. | |
# | |
# By default, if the filter is enabled and browsers detect a | |
# reflected XSS attack, they will attempt to block the attack | |
# by making the smallest possible modifications to the returned | |
# web page. | |
# | |
# Unfortunately, in some browsers (e.g.: Internet Explorer), | |
# this default behavior may allow the XSS filter to be exploited, | |
# thereby, it's better to inform browsers to prevent the rendering | |
# of the page altogether, instead of attempting to modify it. | |
# | |
# https://hackademix.net/2009/11/21/ies-xss-filter-creates-xss-vulnerabilities | |
# | |
# (!) Do not rely on the XSS filter to prevent XSS attacks! Ensure that | |
# you are taking all possible measures to prevent XSS attacks, the | |
# most obvious being: validating and sanitizing your website's inputs. | |
# | |
# https://blogs.msdn.microsoft.com/ie/2008/07/02/ie8-security-part-iv-the-xss-filter/ | |
# https://blogs.msdn.microsoft.com/ieinternals/2011/01/31/controlling-the-xss-filter/ | |
# https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29 | |
<IfModule mod_headers.c> | |
# (1) (2) | |
Header set X-XSS-Protection "1; mode=block" | |
# `mod_headers` cannot match based on the content-type, however, | |
# the `X-XSS-Protection` response header should be send only for | |
# HTML documents and not for the other resources. | |
<FilesMatch "\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ic[os]|jpe?g|m?js|json(ld)?|m4[av]|manifest|map|markdown|md|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$"> | |
Header unset X-XSS-Protection | |
</FilesMatch> | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | Server-side technology information | | |
# ---------------------------------------------------------------------- | |
# Remove the `X-Powered-By` response header that: | |
# | |
# * is set by some frameworks and server-side languages | |
# (e.g.: ASP.NET, PHP), and its value contains information | |
# about them (e.g.: their name, version number) | |
# | |
# * doesn't provide any value to users, contributes to header | |
# bloat, and in some cases, the information it provides can | |
# expose vulnerabilities | |
# | |
# (!) If you can, you should disable the `X-Powered-By` header from the | |
# language / framework level (e.g.: for PHP, you can do that by setting | |
# `expose_php = off` in `php.ini`) | |
# | |
# https://php.net/manual/en/ini.core.php#ini.expose-php | |
<IfModule mod_headers.c> | |
Header unset X-Powered-By | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | Server software information | | |
# ---------------------------------------------------------------------- | |
# Prevent Apache from adding a trailing footer line containing | |
# information about the server to the server-generated documents | |
# (e.g.: error messages, directory listings, etc.) | |
# | |
# https://httpd.apache.org/docs/current/mod/core.html#serversignature | |
ServerSignature Off | |
# ###################################################################### | |
# # WEB PERFORMANCE # | |
# ###################################################################### | |
# ---------------------------------------------------------------------- | |
# | Compression | | |
# ---------------------------------------------------------------------- | |
<IfModule mod_deflate.c> | |
# Force compression for mangled `Accept-Encoding` request headers | |
# https://developer.yahoo.com/blogs/ydn/pushing-beyond-gzipping-25601.html | |
<IfModule mod_setenvif.c> | |
<IfModule mod_headers.c> | |
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding | |
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding | |
</IfModule> | |
</IfModule> | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Compress all output labeled with one of the following media types. | |
# | |
# (!) For Apache versions below version 2.3.7 you don't need to | |
# enable `mod_filter` and can remove the `<IfModule mod_filter.c>` | |
# and `</IfModule>` lines as `AddOutputFilterByType` is still in | |
# the core directives. | |
# | |
# https://httpd.apache.org/docs/current/mod/mod_filter.html#addoutputfilterbytype | |
<IfModule mod_filter.c> | |
AddOutputFilterByType DEFLATE "application/atom+xml" \ | |
"application/javascript" \ | |
"application/json" \ | |
"application/ld+json" \ | |
"application/manifest+json" \ | |
"application/rdf+xml" \ | |
"application/rss+xml" \ | |
"application/schema+json" \ | |
"application/vnd.geo+json" \ | |
"application/vnd.ms-fontobject" \ | |
"application/x-font-ttf" \ | |
"application/x-javascript" \ | |
"application/x-web-app-manifest+json" \ | |
"application/xhtml+xml" \ | |
"application/xml" \ | |
"font/collection" \ | |
"font/eot" \ | |
"font/opentype" \ | |
"font/otf" \ | |
"font/ttf" \ | |
"image/bmp" \ | |
"image/svg+xml" \ | |
"image/vnd.microsoft.icon" \ | |
"image/x-icon" \ | |
"text/cache-manifest" \ | |
"text/calendar" \ | |
"text/css" \ | |
"text/html" \ | |
"text/javascript" \ | |
"text/plain" \ | |
"text/markdown" \ | |
"text/vcard" \ | |
"text/vnd.rim.location.xloc" \ | |
"text/vtt" \ | |
"text/x-component" \ | |
"text/x-cross-domain-policy" \ | |
"text/xml" | |
</IfModule> | |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
# Map the following filename extensions to the specified | |
# encoding type in order to make Apache serve the file types | |
# with the appropriate `Content-Encoding` response header | |
# (do note that this will NOT make Apache compress them!). | |
# | |
# If these files types would be served without an appropriate | |
# `Content-Enable` response header, client applications (e.g.: | |
# browsers) wouldn't know that they first need to uncompress | |
# the response, and thus, wouldn't be able to understand the | |
# content. | |
# | |
# https://httpd.apache.org/docs/current/mod/mod_mime.html#addencoding | |
<IfModule mod_mime.c> | |
AddEncoding gzip svgz | |
</IfModule> | |
</IfModule> | |
# ---------------------------------------------------------------------- | |
# | ETags | | |
# ---------------------------------------------------------------------- | |
# Remove `ETags` as resources are sent with far-future expires headers. | |
# | |
# https://developer.yahoo.com/performance/rules.html#etags | |
# https://tools.ietf.org/html/rfc7232#section-2.3 | |
# `FileETag None` doesn't work in all cases. | |
<IfModule mod_headers.c> | |
Header unset ETag | |
</IfModule> | |
FileETag None |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment