        # Remove X-Powered-By, which is an information leak
        fastcgi_hide_header X-Powered-By;
	ignore_invalid_headers on;

        location ~ /robots.txt { allow all; }
        location ~ /sitemap*xml { allow all; }

        # Disallow scripts
        location ~* \.(pl|cgi|py|sh|lua)$ { return 404; }

	# Skip .git, .htpasswd etc and all dirs starting with .
	location ~ (^|/)\. { return 404; }

	#hide all dirs with synology diskstation stuff
	location ~ /DS_Store/ { return 404; }

	# Help guard against SQL injection
	location ~* .(\;|'|\"|%22).*(request|insert|union|declare|drop)$ { return 404; }

	#Disallow access to sensitive files
	location ~ /(\.|wp-config.php|readme.html|license.txt|nginx.conf|wp-config-sample.php|readme.txt|dbconfig.php) {
		deny all;
	}

        location ~ ^/([^/])+\.(orig$|conf$|git$) { return 404; }
        location ~ /db.(conf|php|inc)|config.(xml|php|inc|ini)/ { return 404; }

	# Disallow common hacks
	location ~* .(display_errors|set_time_limit|allow_url_include.*disable_functions.*open_basedir|set_magic_quotes_runtime|webconfig.txt.php|file_put_contentssever_root|wlwmanifest) {
		deny all;
	}

	location ~* .(env|globals|encode|localhost|loopback|xmlrpc|revslider) {
		deny all;
	}

	# Forbidden file extensions.
	# Guards against unintended exposure of development/configuration files.
	# stolen from modsecurity-crs

	location ~ ^/([^/])+\.(asa$|asax$|ascx$|axd$|backup$|bak$|bat$|cdx$|cer$|cfg$|cmd$|com$|config$|conf$|cs$|csproj$|csr$|dat$|db$/.dbf$|dll$|dos$|htr$|htw$|ida$|idc|idq$|inc$|ini$|key|licx$|lnk$|log$|mdb$|old$|pass$|pdb$|pol$|printer$|pwd$|resources$|resx$|sql$|sys$|vb$|vbs$|vbproj$|vsdisco$|webinfo$|xsd$|xsx$) {
		 return 404;	
	}

	# Hide /acme-challenge subdirectory and return 404 on all requests.
	# It is somewhat more secure than letting Nginx return 403.
	# Ending slash is important!
	location = /.well-known/acme-challenge/ {
		return 404;
	}
	
	# Wordpress, remove any php handler
	location ~ ^/wp-content/uploads/([^/])+\.php { return 404; }
	location ~ ^/wp\-includes(/.*\.php(|[\/].*)|(|\/))$ { return 404; }
	location ~ ^/wp-content(/.*\.txt(|[\/].*)|(|\/))$ { return 404; }
	location ~ ^/wp-admin/(?:install|includes) { return 404; }
	location ~ ^/(?:readme|license)\. { return 404; }
	location ~ ^/wp-admin/(load\-styles|load\-scripts)\.php.*load\[\]\=([^&,]*,){20,} { return 404; }
	location ~ ^(/wp-json/wp/v[0-9]+/users) { return 404; }
	
	#
	# MAGENTO 1
	#
	# Denied locations require a "^~" to prevent regexes (such as the PHP handler below) from matching
        # http://nginx.org/en/docs/http/ngx_http_core_module.html#location
        location /shell/   	             	{ deny all; }
        location /cgi-bin/      	        { deny all; }
        location /install.(php|txt)     	{ deny all; }
        location /license.(php|txt)     	{ deny all; }
        location ^~ /app/                       { return 404; }
        location ^~ /includes/                  { return 404; }
        location ^~ /media/downloadable/        { return 404; }
        location ^~ /pkginfo/                   { return 404; }
        location ^~ /report/config.xml          { return 404; }
        location ^~ /var/                       { return 404; }
        location ^~ /lib/                       { return 404; }
        location ^~ /dev/                       { return 404; }
        location ^~ /RELEASE_NOTES.txt          { return 404; }
        location ^~ /downloader/pearlib         { return 404; }
        location ^~ /downloader/template        { return 404; }
        location ^~ /downloader/Maged           { return 404; }
        location ~* ^/errors/.+\.xml            { return 404; }

	location ~* /rss/order/new		{ return 403; }
        location ~* /rss/catalog/notifystock	{ return 403; }
        location ~* /rss/catalog/review		{ return 403; }	

	# Disallow PHP scripts in /media/ etc
        # Also render static 404 pages for missing media
	location ~ ^/(tmp|lib|media|shell|skin)/ {
            location ~ \.php$ {
                return 404;
            }
            try_files $uri $uri/ =404;
        }

        # Don't skip .thumbs, this is a default directory where Magento places thumbnails
        # Nginx cannot "not" match something, instead the target is matched with an empty block
        # http://stackoverflow.com/a/16304073
        location ~ /\.thumbs { }

        #location ~ /var/export {
        #        satisfy all;
        #        allow 1.2.3.4;
        #        deny all;
        #        auth_basic "Restricted";
        #        auth_basic_user_file .htpasswd;
        #        autoindex off;
        #    }


	#taken from logfiles
	location ~* /(magento_version|util\/login.aspx|/install.php) { return 404; }


	#be carefull with ifs!!

        #only allow the standard methods.
        if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 404; }

        # Note the .+ at the start: We want to allow url's like
        # order=create_date, which would otherwise match.
        #if ($arg_order ~* .+(select|create|insert|update|drop|delete|concat|alter|load)) { return 404; }

        # CVE-2015-3428 / AW_Blog vulnerability
        # Note the .+ at the start: We want to allow url's like
        # order=create_date, which would otherwise match.
        #if ($arg_order ~* .+(select|create|insert|update|drop|delete|concat|alter|load)) { return 404; }

