optymalizacja-cms-wordpress

Optimierung und Sicherung / WordPress CMS

Tags: Audit WordPress, Optimierung, seo, Sicherung, Webseiten, WordPress

WordPress / Responsive Developer

I. Datenarchivierung

Bevor ich mit der Arbeit beginne, mache ich zuerst eine Kopie der Internetseite.

  • BackUpWordPress.

II. WordPress CMS und Add-Ons Update

Der erste Schritt der Optimierung besteht darin, das System und die Add-Ons auf die neuesten Versionen zu aktualisieren. Dies ist sehr wichtig, weil die Autoren von Zeit zu Zeit Fehler korrigieren, Sicherheitslücken beseitigen, die Arbeitsgeschwindigkeit erhöhen oder neue, interessante Funktionen hinzufügen.

III. Optimierung der Betriebsgeschwindigkeit

Bei WordPress installierte Internetseiten werden häufig langsam geladen, insbesondere abends, wenn das Hosting am stärksten ausgelastet ist. Man muss zunächst die PHP-Version auf dem Server auf 7 ändern und unnötige Add-Ons deaktivieren. Dann installiere ich ein PHP-Code-Caching-Plugin, mit dem dynamische Seiten in statischer Form geöffnet und Seitencode und Bildgrößen minimiert werden können. Man sollte die Internetseite für das globale Cloudflare-CDN (cloudflare.com) konfigurieren, wodurch die Internetseite von den nächstgelegenen Standorten des Benutzers auf der ganzen Welt heruntergeladen wird.

  • P3 Plugin Performance Profiler, Analyse und Deaktivierung unnötiger Add-Ons,
  • W3 Total Cache, WP Super Cache, LiteSpeed Cache, PHP-Code-Caching,
  • Autoptimize, Minimierung des Seitencodes,
  • Jetpack z WordPress.com / Photon, Fotooptimierung, Komprimierung und Integration mit WordPress CDN,
  • .htaccess optimization, Änderung der Browser-Cachingszeit des Codes, Code-Komprimierung für den Browser:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.(php|html|htm|css|js|ico|jpg|jpeg|png|gif|swf|json|txt|eot|woff|woff2|ttf|svg)$ empty [R=404,L]

<FilesMatch "\.(css|js|ico|jpg|jpeg|png|gif|swf|xml|json|txt|eot|woff|woff2|ttf|svg|pdf|doc|xls)$">
 RequestHeader unset Cookie
 Header unset Set-Cookie
 Header unset Cookie
</FilesMatch>

<IfModule mod_expires.c>
 FileETag MTime

 ExpiresActive on
 ExpiresDefault "access plus 28 days"

 ExpiresByType text/html "access plus 3 hours"

 ExpiresByType application/json "access plus 3 hours"
 ExpiresByType text/xml "access plus 3 hours"
 ExpiresByType application/xml+rss "access plus 3 hours"

 ExpiresByType text/css "access plus 7 days"

 ExpiresByType text/javascript "access plus 14 days"
 ExpiresByType application/x-javascript "access plus 14 days"
 ExpiresByType application/javascript "access plus 14 days"

 ExpiresByType text/plain "access plus 28 days"

 ExpiresByType image/x-icon "access plus 28 days"
 ExpiresByType image/jpeg "access plus 28 days"
 ExpiresByType image/png "access plus 28 days"
 ExpiresByType image/gif "access plus 28 days"

 ExpiresByType application/x-shockwave-flash "access plus 28 days"

 ExpiresByType application/x-font-ttf "access plus 1 years"
 ExpiresByType application/x-font-opentype "access plus 1 years"
 ExpiresByType application/x-font-woff "access plus 1 years"
 ExpiresByType application/x-font-woff2 "access plus 1 years"
 ExpiresByType application/vnd.ms-fontobject "access plus 1 years"
 ExpiresByType image/svg+xml "access plus 1 years"

 ExpiresByType text/x-component "access plus 1 years"
</IfModule>

<IfModule mod_deflate.c>
 AddOutputFilterByType DEFLATE text/html
 AddOutputFilterByType DEFLATE text/plain

 AddOutputFilterByType DEFLATE application/json
 AddOutputFilterByType DEFLATE text/xml
 AddOutputFilterByType DEFLATE application/xml+rss

 AddOutputFilterByType DEFLATE text/css

 AddOutputFilterByType DEFLATE text/javascript
 AddOutputFilterByType DEFLATE application/x-javascript
 AddOutputFilterByType DEFLATE application/javascript

 AddOutputFilterByType DEFLATE application/x-shockwave-flash

 AddOutputFilterByType DEFLATE application/x-font-ttf
 AddOutputFilterByType DEFLATE application/x-font-opentype
 AddOutputFilterByType DEFLATE application/x-font-woff
 AddOutputFilterByType DEFLATE application/x-font-woff2
 AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
 AddOutputFilterByType DEFLATE image/svg+xml

 AddOutputFilterByType DEFLATE text/x-component

 # Remove browser bugs (only needed for really old browsers)
 BrowserMatch ^Mozilla/4 gzip-only-text/html
 BrowserMatch ^Mozilla/4\.0[678] no-gzip
 BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
 Header append Vary User-Agent
</IfModule>

  • wp-config.php-Optimierung, Änderung der Cron-Task-Aufrufzeit:

define('WP_CRON_LOCK_TIMEOUT', 600);

IV. Datenbankoptimierung

Optimiert die Datenbanktabellen, leert den Papierkorb, löscht Eintragsversionen, automatische Skizzen, Spam und alte Daten. Der meiste Platz wird von Eintragsversionen eingenommen, weshalb man deren Anzahl zusätzlich auf 100 begrenzen sollte.

  • WP-Optimize,
  • wp-config.php-Optimierung, Änderung der Häufigkeit des Autospeicherns von Einträgen und Einschränkung der Versionenanzahl:

define('AUTOSAVE_INTERVAL',3600);
define('WP_POST_REVISIONS',100);

V. Sicherheit

Als erstes sollte man bei der Installation von WordPress einen anderen Datenbanknamen als den Standardnamen angeben. Man darf nicht die Standardanmeldung "admin" oder "administrator" als Administratorname verwenden. Wenn Sie Informationen auf der Site bereitstellen, sollten Sie das Administratorkonto nicht zum Veröffentlichen von Artikeln und Kommentaren verwenden, und der Nickname muss anders als der Benutzername festgelegt werden. Dadurch wird man viele Angriffe vermeiden, die unser Passwort zur Seite erzwingen wollen.

  • Wordfence Security, Schutz vor Grundangriffen und Viren,
  • Loginizer, Login-Schutz / Anti Brute Force,
  • PHP-Schutz:

function sr_security() {
  global $user_ID;

  if ($user_ID) {
    if ( !current_user_can('manage_options') ) {
      if (strlen($_SERVER['REQUEST_URI']) > 255 ||
          stripos($_SERVER['REQUEST_URI'], "eval(") ||
          stripos($_SERVER['REQUEST_URI'], "CONCAT") ||
          stripos($_SERVER['REQUEST_URI'], "UNION+SELECT") ||
          stripos($_SERVER['REQUEST_URI'], "base64")) {
        if (!headers_sent()) {
          header("HTTP/1.1 414 Request-URI Too Long");
          header("Status: 414 Request-URI Too Long");
          header("Connection: Close");
        }
        exit;
      }
    }
  }
}
add_action( 'init', 'sr_security' );

  • .htaccess-Schutz, Autorensuchblockade, 5G BLACKLIST/FIREWALL:

RewriteCond %{QUERY_STRING} author=
RewriteRule .* empty [R=404,L]

# 5G BLACKLIST/FIREWALL
# @ http://perishablepress.com/5g-blacklist/

# 5G:[QUERY STRINGS]
<ifModule mod_rewrite.c>
 RewriteCond %{QUERY_STRING} (environ|localhost|mosconfig|scanner) [NC,OR]
 RewriteCond %{QUERY_STRING} (mod)\=\.?/? [NC,OR]
 RewriteCond %{QUERY_STRING} boot\.ini  [NC,OR]
 RewriteCond %{QUERY_STRING} echo.*kae  [NC,OR]
 RewriteCond %{QUERY_STRING} etc/passwd [NC,OR]
 RewriteCond %{QUERY_STRING} \=\\%27$   [NC,OR]
 RewriteCond %{QUERY_STRING} \=\\\'$    [NC,OR]
 RewriteCond %{QUERY_STRING} \.\./      [NC,OR]
 RewriteCond %{QUERY_STRING} \?         [NC]
 RewriteRule .* - [F]
</ifModule>

# 5G:[USER AGENTS]
<ifModule mod_setenvif.c>
 SetEnvIfNoCase User-Agent (casper|cmsworldmap|diavol|dotbot)   keep_out
 SetEnvIfNoCase User-Agent (flicky|ia_archiver|jakarta|kmccrew) keep_out
 SetEnvIfNoCase User-Agent (libwww|planetwork|pycurl|skygrid)   keep_out
 SetEnvIfNoCase User-Agent (purebot|comodo|feedfinder|turnit)   keep_out
 SetEnvIfNoCase User-Agent (zmeu|nutch|vikspider|binlar|sucker) keep_out
 <limit GET POST PUT>
  Order Allow,Deny
  Allow from all
  Deny from env=keep_out
 </limit>
</ifModule>

# 5G:[REQUEST STRINGS]
<ifModule mod_alias.c>
 RedirectMatch 403 (https?|ftp|php)\://
 RedirectMatch 403 /(cgi|https?|ima|ucp)/
 RedirectMatch 403 /(Permanent|Better)$
 RedirectMatch 403 (\=\\\'|\=\\%27|/\\\'/?|\)\.css\()$
 RedirectMatch 403 \.(cgi|asp|aspx|cfg|dll|exe|jsp|mdb|sql|ini|rar)$
 RedirectMatch 403 /(contac|fpw|install|pingserver|register)\.php$
 RedirectMatch 403 (base64|crossdomain|localhost|wwwroot|e107\_)
 RedirectMatch 403 (eval\(|\_vti\_|\(null\)|echo.*kae|config\.xml)
 RedirectMatch 403 \.well\-known/host\-meta
 RedirectMatch 403 /function\.array\-rand
 RedirectMatch 403 \)\;\$\(this\)\.html\(
 RedirectMatch 403 proc/self/environ
 RedirectMatch 403 msnbot\.htm\)\.\_
 RedirectMatch 403 /ref\.outcontrol
 RedirectMatch 403 com\_cropimage
 RedirectMatch 403 indonesia\.htm
 RedirectMatch 403 \{\$itemURL\}
 RedirectMatch 403 function\(\)
 RedirectMatch 403 labels\.rdf
 RedirectMatch 403 /playing.php
 RedirectMatch 403 muieblackcat
</ifModule>

# 5G:[BAD IPS]
<limit GET POST PUT>
 Order Allow,Deny
 Allow from all
 # uncomment/edit/repeat next line to block IPs
 # Deny from 123.456.789
</limit>

# 5G:[WordPress]
<ifModule mod_rewrite.c>
 RedirectMatch 403 /\$\&
 RedirectMatch 403 (?i)/\&(t|title)=
 RedirectMatch 403 (?i)/\.(bash|git|hg|log|svn|swp|tar)
 RedirectMatch 403 (?i)/(1|contact|i|index1|iprober|phpinfo|phpspy|product|signup|t|test|tz|visit|webshell|wp-signup).php
 RedirectMatch 403 (?i)/(author-panel|class|database|manage|phpMyAdmin|register|submit-articles|system|usage|webmaster)/?$
 RedirectMatch 403 (?i)/(=|_mm|cgi|cvs|dbscripts|jsp|rnd|userfiles)
</ifModule>

  • wp-config.php-Schutz, Deaktivierung der Dateibearbeitung bei WordPress:

define('DISALLOW_FILE_EDIT',true);

WordPress wird oft als SEO-Verzeichnis verwendet, wodurch jeder Benutzer ein potenzielles Ziel für Spammer ist. Man darf keine ungesicherten Formulare hinterlassen, weil man sonst eine Vielzahl von automatisch generierten Kommentaren und E-Mails ins Postfach bekommt.

  • Akismet, Spamschutz,
  • Formularschutz:

.DISABLE{display:none}

<input name="sr-code" value="ąćęłńóśżź" type="hidden" />
<input class="DISABLE" name="submit" value="spam" type="submit" />
<input name="submit" value="Wyślij" type="submit" />

 if (($_POST['submit']==='spam') || ($_POST['sr-code']!=='ąćęłńóśżź')) die();


Kunden

  • play
  • plk
  • pkp-cargo
  • uniwersytet-warszawski
  • politechnika-poznanska
  • uniwersytet-adama-mickiewicza
  • termy-maltanskie
  • rzeczpospolita
  • v33
  • ferguson
  • unitra
  • wyzsza-szkola-urody-i-edukacji
  • wyzsza-szkola-handlu-i-uslug