-->

WordPress und Webseiten Sicherheit erhöhen ohne Plugin’s

1. Grundvoraussetzung

1.a   Das Tutorial wurde nur auf einer bestimmten Konfiguration von Software getestet. Deshalb beruht das Tutorial auf eine gewisse Grundvoraussetzung. Neuere Versionen sollten kein Problem sein. Es sollte auch Zugang zu den Dateien der WordPress Installation bestehen via sFTP usw. .

– Apache http Server 2.4
– PHP 7.3
– WordPress: 5.0
– MariaDB 10

1.b   Ein weiterer Punkt ist es alle unnötigen Plug-Ins und Theme zu löschen. Da diese selbst im deaktivierten Zustand Sicherheitslücken enthalten. Was Sie auch löschen können sind diese “All in One” Plug-Ins die Sicherheit versprechen wie Wordforce usw. Die Begründung ist sehr einfach. Umso komplexer eine Software ist und umso mehr Code diese enthält umso mehr Fehler enthält diese. Und Fehler können genutzt werden um Schadcode auf Ihre Webseite zu intrigieren. Deshalb bin ich diesen Weg gegangen der den Vorteil hat das er mehr Performance bringt und sicherer ist.

1.c   Auf der Seite von Webbkoll könnt Ihr eure Webseite überprüfen. Dort könnt Ihr einiges sehen von Sicherheitsschwachstellen und Datenschutz Lücken.

2. Serverseitig mit .htaccess

2.a   Was ist „.htaccess“ für eine Datei?
.htaccess ist eine Konfigurationsdatei zur Verwendung auf Web-Servern, auf denen die Apache-Web-Server-Software läuft. Diese .htaccess-Dateien können dazu verwendet werden, die Konfiguration der Apache-Web-Server-Software zu ändern, um zusätzliche Funktionen und Merkmale, die die Apache-Web-Server-Software zu bieten hat, zu aktivieren/deaktivieren.

Die .htaccess liegt in dein WordPress Hauptverzeichnis. Wenn die Datei nicht vorhanden ist, muss diese dort erstellt werden.

Meine aktuelle von vollständige .htaccess Datei findet Ihr bei mir auf Github

2.b   WordPress Routine in der .htaccess
Die Anweisungen (Zeilen) zwischen `BEGIN WordPress` und `END WordPress` sind dynamisch generiert und sollten nur über WordPress-Filter geändert werden. Alle Änderungen an den Anweisungen zwischen diesen Markierungen werden überschrieben.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

2.1 HTTP Header

Hier werden einige Sicherheitsstandard für den Header der Webseite vorgenommen:
– Die Umleitung von der unsicheren HTTP Verbindung auf die sichere HTTPS Verbindung.
– Das Einbinden von HTTP Strict Transport Security (HSTS). Dies ist ein Sicherheitsmechanismus für HTTPS-Verbindungen, der sowohl vor Aushebelung der Verbindungsverschlüsselung durch eine Downgrade-Attacke als auch vor Session Hijacking schützen soll.
– Der X-FRAME-OPTIONS-Header wird auf “sameorigin” eingestellt, um zu verhindern dass Ihre Webseite in einem Frame (iframe eingeschlossen) auf fremden Domains dargestellt werden kann. Das soll Clickjacking verhindern.
X-XSS-PROTECTION-Header Um die Sicherheit Ihrer Website gegen einige Arten von XSS-Angriffen (Cross-Site-Scripting) zu verbessern.
– Der HTTP-Header der X-Content-Type-Options-Header ist eine Markierung, die vom Server verwendet wird, um anzuzeigen, dass die in den Content-Type-Headern beworbenen MIME-Typen nicht geändert und befolgt werden sollten.
– Der Referrer-Policy-HTTP-Header steuert, wie viele Referrer-Informationen (die über den Referrer-Header gesendet werden) in Anfragen enthalten sein sollen.
Content-Security-Policy (CSP): Ist schon etwas aufwendiger und muss auf die Webseite angepasst werden. Die Erklärung für die einzelnen Einstellparameter könnt Ihr auf selfhtml.org finden. Hier wurde alles auf “self” gesetzt, außer “script-src” und “style-src” da ich zwei Fremde Plug-Ins für meine Fotos nutze die leider Java benutzen und den Code nicht gut Intrigiert haben. Bis ich diese nicht auch selbst geschrieben habe muss es leider so bleiben.

###################################################################################
# HTTP Header
###################################################################################
<IfModule mod_headers.c>
	## Umleitung HTTP zu HTTPS
	RewriteEngine On
	RewriteCond %{HTTPS} off
	RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 
	## HTTP Strict Transport Security (HSTS)
	Header set Strict-Transport-Security: "max-age=63072000; includeSubDomains; preload"
 
	## X-FRAME-OPTIONS-Header
        Header set X-Frame-Options "sameorigin"
 
	## X-XSS-PROTECTION-Header
	Header set X-XSS-Protection "1; mode=block"
 
	## X-Content-Type-Options-Header
	Header set X-Content-Type-Options "nosniff"
 
	## X-Permitted-Cross-Domain-Poöices
	Header set X-Permitted-Cross-Domain-Policies "none"
 
	## No-Referrer-Header
	Header set Referrer-Policy "no-referrer"
 
	## Content-Security-Policy (CSP)
	Header set Content-Security-Policy "default-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; object-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; media-src 'self'; child-src 'self' https:; font-src 'self' data:; connect-src 'self'; frame-ancestors 'self';base-uri 'none';form-action 'self'"
</IfModule>

2.2 Zwei-Faktor-Authentifizierung

Die Zwei-Faktor-Authentifizierung ist ein Faktor der viel Sicherheit geben kann. Wie das Funktioniert könnt Ihr auf diese Seite nachlesen “die-netzialisten.de”.
Nun müsste in eurer .htaccess folgender Code hinzugefügt worden sein:

###################################################################################
# Zwei-Faktor-Authentifizierung
###################################################################################
# Auth protect wp-login.php
<Files wp-login.php>
	AuthType Basic
	AuthName "Gesperrter Bereich"
	AuthUserFile /volume3/web/wordpress/.htpasswd
   Require valid-user
</Files>

2.3 Zugriffe sperren von Ordnern und Dateien

In diesen Punkt wird der Zugriff von außen auf bestimmte Dateitypen gesperrt. Dass diese nicht verändert oder gelesen werden können.

###################################################################################
# Sperrt Zugriffe auf Ordner und Dateien
###################################################################################
# Deaktiviert sämtliche *.php dateien im Upload Ordner
<FilesMatch /volume3/web/wordpress/wp-content/uploads/*.php$>
   Require all denied
</FilesMatch>
 
# Sperrt Zugriff auf .hta dateien
<FilesMatch "(\.htaccess|\.htpasswd)">
	Require all denied
</FilesMatch>
 
# Sperrt Zugriffe auf wp-config / *.txt außer robots
<FilesMatch "(^\.|wp-config\.php|(?<!robots)\.txt|(liesmich|readme)\.*)">
   Require all denied
</FilesMatch>

Zusätzlich würde ich den Zugriff auf XML-RPC sperren, wenn dieser nicht benötigt wird.
Unter XML-RPC (Extensible Markup Language Remote Procedure Call) versteht man eine Schnittstelle zwischen einem System (hier WordPress) und externen Funktionen. Sie kümmert sich beispielsweise um Pingbacks, also ein- und ausgehende Mitteilungen von anderen Webseiten. Außerdem greifen verschiedene Plug-Ins (wie beispielsweise Jetpack) oder Apps darauf zu. Es ist sozusagen die Schnittstelle zur Außenwelt.

###################################################################################
# Sperrt Zugriff auf XML-RPC
###################################################################################
<FilesMatch "xmlrpc.php">
    Require all denied
</FilesMatch>

Außerdem muss noch in der “function.php” Code dafür eingefügt werden, dies steht im Kapitel 3. function.php.

2.4 Ausblenden des Inhaltsverzeichnisses

###################################################################################
# Ausblenden des Inhaltsverzeichnisses
###################################################################################
Options -Indexes
<IfModule dir_module>
	DirectoryIndex disabled
	DirectoryIndex index.php
</IfModule>

2.5 .htaccess 7G Firewall

Die 7G Firewall von perishablepres ermöglicht es euch unabhängig von anderen Plug-Ins zu sein.

###################################################################################
# 7G FIREWALL v1.2 20190727
# @ https://perishablepress.com/7g-firewall/
###################################################################################
# 7G:[CORE]
ServerSignature Off
Options -Indexes
RewriteEngine On
RewriteBase /
 
# 7G:[QUERY STRING]
<IfModule mod_rewrite.c>
	RewriteCond %{REQUEST_URI} !(7g_log.php) [NC]
	RewriteCond %{QUERY_STRING} ([a-z0-9]{2000,}) [NC,OR]
	RewriteCond %{QUERY_STRING} (/|%2f)(:|%3a)(/|%2f) [NC,OR]
	RewriteCond %{QUERY_STRING} (/|%2f)(\*|%2a)(\*|%2a)(/|%2f) [NC,OR]
	RewriteCond %{QUERY_STRING} (~|`|<|>|\^|\|\\|0x00|%00|%0d%0a) [NC,OR]
	RewriteCond %{QUERY_STRING} (cmd|command)(=|%3d)(chdir|mkdir)(.*)(x20) [NC,OR]
	RewriteCond %{QUERY_STRING} (fck|ckfinder|fullclick|ckfinder|fckeditor) [NC,OR]
	RewriteCond %{QUERY_STRING} (/|%2f)((wp-)?config)((\.|%2e)inc)?((\.|%2e)php) [NC,OR]
	RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumbs?)?)((\.|%2e)php) [NC,OR]
	RewriteCond %{QUERY_STRING} (absolute_|base|root_)(dir|path)(=|%3d)(ftp|https?) [NC,OR]
	RewriteCond %{QUERY_STRING} (localhost|loopback|127(\.|%2e)0(\.|%2e)0(\.|%2e)1) [NC,OR]
	RewriteCond %{QUERY_STRING} (\.|20)(get|the)(_|%5f)(permalink|posts_page_url)(\(|%28) [NC,OR]
	RewriteCond %{QUERY_STRING} (s)?(ftp|http|inurl|php)(s)?(:(/|%2f|%u2215)(/|%2f|%u2215)) [NC,OR]
	RewriteCond %{QUERY_STRING} (globals|mosconfig([a-z_]{1,22})|request)(=|\[|%[a-z0-9]{0,2}) [NC,OR]
	RewriteCond %{QUERY_STRING} ((boot|win)((\.|%2e)ini)|etc(/|%2f)passwd|self(/|%2f)environ) [NC,OR]
	RewriteCond %{QUERY_STRING} (((/|%2f){3,3})|((\.|%2e){3,3})|((\.|%2e){2,2})(/|%2f|%u2215)) [NC,OR]
	RewriteCond %{QUERY_STRING} (benchmark|char|exec|fopen|function|html)(.*)(\(|%28)(.*)(\)|%29) [NC,OR]
	RewriteCond %{QUERY_STRING} (php)([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}) [NC,OR]
	RewriteCond %{QUERY_STRING} (e|%65|%45)(v|%76|%56)(a|%61|%31)(l|%6c|%4c)(.*)(\(|%28)(.*)(\)|%29) [NC,OR]
	RewriteCond %{QUERY_STRING} (/|%2f)(=|%3d|$&|_mm|cgi(\.|-)|inurl(:|%3a)(/|%2f)|(mod|path)(=|%3d)(\.|%2e)) [NC,OR]
	RewriteCond %{QUERY_STRING} (<|%3c)(.*)(e|%65|%45)(m|%6d|%4d)(b|%62|%42)(e|%65|%45)(d|%64|%44)(.*)(>|%3e) [NC,OR]
	RewriteCond %{QUERY_STRING} (<|%3c)(.*)(i|%69|%49)(f|%66|%46)(r|%72|%52)(a|%61|%41)(m|%6d|%4d)(e|%65|%45)(.*)(>|%3e) [NC,OR]
	RewriteCond %{QUERY_STRING} (<|%3c)(.*)(o|%4f|%6f)(b|%62|%42)(j|%4a|%6a)(e|%65|%45)(c|%63|%43)(t|%74|%54)(.*)(>|%3e) [NC,OR]
	RewriteCond %{QUERY_STRING} (<|%3c)(.*)(s|%73|%53)(c|%63|%43)(r|%72|%52)(i|%69|%49)(p|%70|%50)(t|%74|%54)(.*)(>|%3e) [NC,OR]
	RewriteCond %{QUERY_STRING} (\+|%2b|%20)(d|%64|%44)(e|%65|%45)(l|%6c|%4c)(e|%65|%45)(t|%74|%54)(e|%65|%45)(\+|%2b|%20) [NC,OR]
	RewriteCond %{QUERY_STRING} (\+|%2b|%20)(i|%69|%49)(n|%6e|%4e)(s|%73|%53)(e|%65|%45)(r|%72|%52)(t|%74|%54)(\+|%2b|%20) [NC,OR]
	RewriteCond %{QUERY_STRING} (\+|%2b|%20)(s|%73|%53)(e|%65|%45)(l|%6c|%4c)(e|%65|%45)(c|%63|%43)(t|%74|%54)(\+|%2b|%20) [NC,OR]
	RewriteCond %{QUERY_STRING} (\+|%2b|%20)(u|%75|%55)(p|%70|%50)(d|%64|%44)(a|%61|%41)(t|%74|%54)(e|%65|%45)(\+|%2b|%20) [NC,OR]
	RewriteCond %{QUERY_STRING} (\\x00|(\"|%22|\'|%27)?0(\"|%22|\'|%27)?(=|%3d)(\"|%22|\'|%27)?0|cast(\(|%28)0x|or%201(=|%3d)1) [NC,OR]
	RewriteCond %{QUERY_STRING} (g|%67|%47)(l|%6c|%4c)(o|%6f|%4f)(b|%62|%42)(a|%61|%41)(l|%6c|%4c)(s|%73|%53)(=|[|%[0-9A-Z]{0,2}) [NC,OR]
	RewriteCond %{QUERY_STRING} (_|%5f)(r|%72|%52)(e|%65|%45)(q|%71|%51)(u|%75|%55)(e|%65|%45)(s|%73|%53)(t|%74|%54)(=|[|%[0-9A-Z]{0,2}) [NC,OR]
	RewriteCond %{QUERY_STRING} (j|%6a|%4a)(a|%61|%41)(v|%76|%56)(a|%61|%31)(s|%73|%53)(c|%63|%43)(r|%72|%52)(i|%69|%49)(p|%70|%50)(t|%74|%54)(:|%3a)(.*)(;|%3b|\)|%29) [NC,OR]
	RewriteCond %{QUERY_STRING} (b|%62|%42)(a|%61|%41)(s|%73|%53)(e|%65|%45)(6|%36)(4|%34)(_|%5f)(e|%65|%45|d|%64|%44)(e|%65|%45|n|%6e|%4e)(c|%63|%43)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(.*)(\()(.*)(\)) [NC,OR]
	RewriteCond %{QUERY_STRING} (allow_url_(fopen|include)|auto_prepend_file|blexbot|browsersploit|(c99|php)shell|curltest|disable_functions?|document_root|elastix|encodeuricom|exec|exploit|fclose|fgets|fputs|fsbuff|fsockopen|gethostbyname|grablogin|hmei7|input_file|load_file|null|open_basedir|outfile|passthru|popen|proc_open|quickbrute|remoteview|root_path|safe_mode|shell_exec|site((.){0,2})copier|sux0r|trojan|wget|xertive) [NC,OR]
	RewriteCond %{QUERY_STRING} (;|<|>|\'|\"|\)|%0a|%0d|%22|%27|%3c|%3e|%00)(.*)(/\*|alter|base64|benchmark|cast|char|concat|convert|create|encode|declare|delete|drop|insert|md5|order|request|script|select|set|union|update) [NC,OR]
	RewriteCond %{QUERY_STRING} ((\+|%2b)(concat|delete|get|select|union)(\+|%2b)) [NC,OR]
	RewriteCond %{QUERY_STRING} (union)(.*)(select)(.*)(\(|%28) [NC,OR]
	RewriteCond %{QUERY_STRING} (concat)(.*)(\(|%28) [NC]
	RewriteRule .* - [F,L]
</IfModule>
 
# 7G:[REQUEST URI]
<IfModule mod_rewrite.c>
	RewriteCond %{REQUEST_URI} !(7g_log.php) [NC]
	RewriteCond %{REQUEST_URI} ([a-z0-9]{2000,}) [NC,OR]
	RewriteCond %{REQUEST_URI} (=?\\(\'|%27)/?)(\.) [NC,OR]
	RewriteCond %{REQUEST_URI} (/)(\*|\"|\'|\.|,|&|&amp;?)/?$ [NC,OR]
	RewriteCond %{REQUEST_URI} (\.)(php)(\()?([0-9]+)(\))?(/)?$ [NC,OR]
	RewriteCond %{REQUEST_URI} (/)(vbulletin|boards|vbforum)(/)? [NC,OR]
	RewriteCond %{REQUEST_URI} (\^|~|`|<|>|,|%|\\|\{|\}|\[|\]|\|) [NC,OR]
	RewriteCond %{REQUEST_URI} (\.(s?ftp-?)config|(s?ftp-?)config\.) [NC,OR]
	RewriteCond %{REQUEST_URI} (\{0\}|\"?0\"?=\"?0|\(/\(|\.\.\.|\+\+\+|\\\") [NC,OR]
	RewriteCond %{REQUEST_URI} (thumbs?(_editor|open)?|tim(thumbs?)?)(\.php) [NC,OR]
	RewriteCond %{REQUEST_URI} (/)(fck|ckfinder|fullclick|ckfinder|fckeditor) [NC,OR]
	RewriteCond %{REQUEST_URI} (\.|20)(get|the)(_)(permalink|posts_page_url)(\() [NC,OR]
	RewriteCond %{REQUEST_URI} (///|\?\?|/&&|/\*(.*)\*/|/:/|\\\\|0x00|%00|%0d%0a) [NC,OR]
	RewriteCond %{REQUEST_URI} (/%7e)(root|ftp|bin|nobody|named|guest|logs|sshd)(/) [NC,OR]
	RewriteCond %{REQUEST_URI} (/)(etc|var)(/)(hidden|secret|shadow|ninja|passwd|tmp)(/)?$ [NC,OR]
	RewriteCond %{REQUEST_URI} (s)?(ftp|http|inurl|php)(s)?(:(/|%2f|%u2215)(/|%2f|%u2215)) [NC,OR]
	RewriteCond %{REQUEST_URI} (/)(=|\$&?|&?(pws|rk)=0|_mm|_vti_|cgi(\.|-)?|(=|/|;|,)nt\.) [NC,OR]
	RewriteCond %{REQUEST_URI} (\.)(conf(ig)?|ds_store|htaccess|htpasswd|init?|mysql-select-db)(/)?$ [NC,OR]
	RewriteCond %{REQUEST_URI} (/)(bin)(/)(cc|chmod|chsh|cpp|echo|id|kill|mail|nasm|perl|ping|ps|python|tclsh)(/)?$ [NC,OR]
	RewriteCond %{REQUEST_URI} (/)(::[0-9999]|%3a%3a[0-9999]|127\.0\.0\.1|localhost|loopback|makefile|pingserver|wwwroot)(/)? [NC,OR]
	RewriteCond %{REQUEST_URI} (\(null\)|\{\$itemURL\}|cAsT\(0x|echo(.*)kae|etc/passwd|eval\(|self/environ|\+union\+all\+select) [NC,OR]
	RewriteCond %{REQUEST_URI} (/)(awstats|(c99|php|web)shell|document_root|error_log|listinfo|muieblack|remoteview|site((.){0,2})copier|sqlpatch|sux0r) [NC,OR]
	RewriteCond %{REQUEST_URI} (/)((php|web)?shell|conf(ig)?|crossdomain|fileditor|locus7|nstview|php(get|remoteview|writer)|r57|remview|sshphp|storm7|webadmin)(.*)(\.|\() [NC,OR]
	RewriteCond %{REQUEST_URI} (/)(author-panel|bitrix|class|database|(db|mysql)-?admin|filemanager|htdocs|httpdocs|https?|mailman|mailto|msoffice|mysql|_?php-?my-?admin(.*)|sql|system|tmp|undefined|usage|var|vhosts|webmaster|www)(/) [NC,OR]
	RewriteCond %{REQUEST_URI} (base64_(en|de)code|benchmark|child_terminate|e?chr|eval|exec|function|fwrite|(f|p)open|html|leak|passthru|p?fsockopen|phpinfo|posix_(kill|mkfifo|setpgid|setsid|setuid)|proc_(close|get_status|nice|open|terminate)|(shell_)?exec|system)(.*)(\()(.*)(\)) [NC,OR]
	RewriteCond %{REQUEST_URI} (\.)(7z|ab4|afm|aspx?|bash|ba?k?|bz2|cfg|cfml?|cgi|conf(ig)?|ctl|dat|db|dll|eml|et2|exe|fec|fla|hg|inc|ini|inv|jsp|log|lqd|mbf|mdb|mmw|mny|old|one|out|passwd|pdb|pl|psd|pst|ptdb|pwd|py|qbb|qdf|rar|rdf|sdb|sql|sh|soa|swf|swl|swp|stx|tar|tax|tgz|tls|tmd|wow|zlib)$ [NC,OR]
	RewriteCond %{REQUEST_URI} (/)(^$|00.temp00|0day|3xp|70bex?|admin_events|bkht|(php|web)?shell|configbak|curltest|db|dompdf|filenetworks|hmei7|index\.php/index\.php/index|jahat|kcrew|keywordspy|mobiquo|mysql|nessus|php-?info|racrew|sql|ucp|webconfig|(wp-)?conf(ig)?(uration)?|xertive)(\.php) [NC]
	RewriteRule .* - [F,L]
</IfModule>
# 7G:[USER AGENT]
<IfModule mod_rewrite.c>
	RewriteCond %{REQUEST_URI} !(7g_log.php) [NC]
	RewriteCond %{HTTP_USER_AGENT} ([a-z0-9]{2000,}) [NC,OR]
	RewriteCond %{HTTP_USER_AGENT} (&lt;|%0a|%0d|%27|%3c|%3e|%00|0x00) [NC,OR]
	RewriteCond %{HTTP_USER_AGENT} ((c99|php|web)shell|remoteview|site((.){0,2})copier) [NC,OR]
	RewriteCond %{HTTP_USER_AGENT} (base64_decode|bin/bash|disconnect|eval|lwp-download|unserialize|\\\x22) [NC,OR]
	RewriteCond %{HTTP_USER_AGENT} (360Spider|acapbot|acoonbot|ahrefs|alexibot|asterias|attackbot|backdorbot|becomebot|binlar|blackwidow|blekkobot|blexbot|blowfish|bullseye|bunnys|butterfly|careerbot|casper|checkpriv|cheesebot|cherrypick|chinaclaw|choppy|clshttp|cmsworld|copernic|copyrightcheck|cosmos|crescent|cy_cho|datacha|demon|diavol|discobot|dittospyder|dotbot|dotnetdotcom|dumbot|emailcollector|emailsiphon|emailwolf|exabot|extract|eyenetie|feedfinder|flaming|flashget|flicky|foobot|g00g1e|getright|gigabot|go-ahead-got|gozilla|grabnet|grafula|harvest|heritrix|httrack|icarus6j|jetbot|jetcar|jikespider|kmccrew|leechftp|libweb|linkextractor|linkscan|linkwalker|loader|miner|majestic|mechanize|mj12bot|morfeus|moveoverbot|netmechanic|netspider|nicerspro|nikto|ninja|nutch|octopus|pagegrabber|planetwork|postrank|proximic|purebot|pycurl|python|queryn|queryseeker|radian6|radiation|realdownload|rogerbot|scooter|seekerspider|semalt|seznambot|siclab|sindice|sistrix|sitebot|siteexplorer|sitesnagger|skygrid|smartdownload|snoopy|sosospider|spankbot|spbot|sqlmap|stackrambler|stripper|sucker|surftbot|sux0r|suzukacz|suzuran|takeout|teleport|telesoft|true_robots|turingos|turnit|vampire|vikspider|voideye|webleacher|webreaper|webstripper|webvac|webviewer|webwhacker|winhttp|wwwoffle|woxbot|xaldon|xxxyy|yamanalab|yioopbot|youda|zeus|zmeu|zune|zyborg) [NC]
	RewriteRule .* - [F,L]
</IfModule>
# 7G:[REMOTE HOST]
<IfModule mod_rewrite.c>
	RewriteCond %{REQUEST_URI} !(7g_log.php) [NC]
	RewriteCond %{REMOTE_HOST} (163data|amazonaws|colocrossing|crimea|g00g1e|justhost|kanagawa|loopia|masterhost|onlinehome|poneytel|sprintdatacenter|reverse.softlayer|safenet|ttnet|woodpecker|wowrack) [NC]
	RewriteRule .* - [F,L]
</IfModule>
# 7G:[HTTP REFERRER]
<IfModule mod_rewrite.c>
	RewriteCond %{REQUEST_URI} !(7g_log.php) [NC]
	RewriteCond %{HTTP_REFERER} (semalt.com|todaperfeita) [NC,OR]
	RewriteCond %{HTTP_REFERER} (ambien|blue\spill|cialis|cocaine|ejaculat|erectile|erections|hoodia|huronriveracres|impotence|levitra|libido|lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|troyhamby|ultram|unicauca|valium|viagra|vicodin|xanax|ypxaieo) [NC]
	RewriteRule .* - [F,L]
</IfModule>
# 7G:[REQUEST METHOD]
<IfModule mod_rewrite.c>
	RewriteCond %{REQUEST_URI} !(7g_log.php) [NC]
	RewriteCond %{REQUEST_METHOD} ^(connect|debug|delete|move|put|trace|track) [NC]
	RewriteRule .* - [F,L]
</IfModule>

3. function.php

In der “function.php” werden nun weitere Einstellungen vorgenommen.
Die aktuelle und vollständige Datei könnt Ihr in meinen Github Account finden.

In der Funktion “fototechnik_blog_init” wird für etwas Sicherheit gesorgt da einige angreifbare Schnittstellen deaktiviert werden. Zusätzlich deaktiviere ich alle Emoticons und Embeds da ich die nicht benötige. Sowie den Feed.

function fototechnik_blog_init(){
    /* Sicherheits Funktionen */
    add_filter('the_generator', create_function( '$x', 'return;'));  /* Wordpress Version ausblenden */
    add_filter('login_errors', create_function('$a',"return null;")); /* Login Fehler deaktivieren */
    add_filter('xmlrpc_enabled', '__return_false' ); /* XML-RPC Schnittstelle deaktivieren */
    /*  add_filter('rest_enabled', '__return_false');   /* REST API Schnittstelle deaktivieren */ 
    /*  add_filter('rest_jsonp_enabled', '__return_false'); /* REST API Schnittstelle deaktivieren */ 
    add_filter('json_enabled', '__return_false');   /* WP-JSON Schnittstelle deaktivieren */
    add_filter('json_jsonp_enabled', '__return_false'); /* WP-JSON Schnittstelle deaktivieren */
    remove_action('wp_head', 'wp_resource_hints', 2); /* DNS Prefatch entfernen */
    /* Mit dem RSD Verweis wird eine XML-Datei mit allen Services des WordPress Blogs bereitgestellt. */
    remove_action('wp_head', 'rsd_link'); /* RSD Verweis entfernen */
    /* Das WLW Manifest dient als Beschreibung fuer externe Editoren, um auf den WordPress Blog zugreifen zu koennen. */
    remove_action('wp_head', 'wlwmanifest_link' ); /* WLW Manifest entfernen */
 
    wp_deregister_script('heartbeat'); /* den Wordpress Heartbeat deaktivieren */
 
    /* Emoticons deaktivieren */
    remove_action('wp_head', 'print_emoji_detection_script', 7 ); 
    remove_action('admin_print_scripts', 'print_emoji_detection_script' );
    remove_action('wp_print_styles', 'print_emoji_styles' ); 
    remove_action('admin_print_styles', 'print_emoji_styles' );
    remove_filter('the_content_feed', 'wp_staticize_emoji' );
    remove_filter('comment_text_rss', 'wp_staticize_emoji' ); 
    remove_filter('wp_mail', 'wp_staticize_emoji_for_email' );
    add_filter('tiny_mce_plugins', 'disable_emojis_tinymce' );
 
    /* Embeds deaktivieren */
    remove_action( 'rest_api_init', 'wp_oembed_register_route' );
    add_filter( 'embed_oembed_discover', '__return_false' );
    remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
    remove_action( 'wp_head', 'wp_oembed_add_host_js' );
    add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin' );
    add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
    remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 );
} 
add_action('init','fototechnik_blog_init');
 
/* Deaktivieren einiger Funktionen */
/* Tinymce Plugin herrausfiltern (für Emoticons) */
function disable_emojis_tinymce( $plugins ) {
    if ( is_array( $plugins ) ) {
      return array_diff( $plugins, array( 'wpemoji' ) );
    } else {
      return array();
    }
  }
 
  /* Embeds deaktivieren */
  function disable_embeds_tiny_mce_plugin($plugins) {
    return array_diff($plugins, array('wpembed'));
  } 
  function disable_embeds_rewrites($rules) {
    foreach($rules as $rule =&gt; $rewrite) {
      if(false !== strpos($rewrite, 'embed=true')) {
        unset($rules[$rule]);
      }
    }
    return $rules;
  }
 
  /* Deaktivieren der Feed Funktionen */
function fototechnik_blog_disable_feed() {
    wp_die('Keine RSS-Feed verfügbar, Bitte besuchen Sie meine Webseite.');
  }
  add_action('do_feed', 'itsme_disable_feed', 1);
  add_action('do_feed_rdf', 'itsme_disable_feed', 1);
  add_action('do_feed_rss', 'itsme_disable_feed', 1);
  add_action('do_feed_rss2', 'itsme_disable_feed', 1);
  add_action('do_feed_atom', 'itsme_disable_feed', 1);
  add_action('do_feed_rss2_comments', 'itsme_disable_feed', 1);
  add_action('do_feed_atom_comments', 'itsme_disable_feed', 1);
 
  /* Hiermit wird die direkte Verbindung von xmlrpc.php und x-pingback entfernt */
  function fototechnik_blog_remove_x_pingback( $headers ){
      unset( $headers['X-Pingback'] );
  return $headers;
  }
  add_filter( 'wp_headers', 'fototechnik_blog_remove_x_pingback' );

3.1 WordPress REST API Whitelist

Falls Ihr die REST API Schnittstelle benötigt könnt Ihr eine Whiteliste verwenden. Wenn der Webserver bei euch zu Hause steht könnt Ihr eure Domain als Whitelist nehmen und per VPN könnt Ihr von Überall eure Webseite mit REST API nutzen. Oder Ihr gibt eure IP an wenn Ihr eine feste IP besitzt. Das bietet eine hohe Sicherheit da niemand außer von euren Standort aus die Schnittstelle nutzen kann.

/* Whitelist und Einstellen der REST API Schnittstelle */
  function fototechnik_blog_rest_api() {
      $domain = "fototour-und-technik.de";					/* String der Domain */
      $ip_domain = gethostbyname($domain);					/* IP der Domain abfragen */
 
      $whitelist = [$ip_domain,'255.255.255.255', "::1" ];    /* IP Whitelist  */
 
      if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){		/* Wenn nicht auf der Whitelist */
          die('REST API is disabled.');
      }
  }
  add_action('rest_api_init','fototechnik_blog_rest_api');
Nächster Beitrag 21 March 2020
Vorheriger Beitrag 23 February 2020

Schreibe einen Kommentar

Dein Kommentar wird vor der Veröffentlichung von mir geprüft.