SlideShare ist ein Scribd-Unternehmen logo
1 von 44
WordPress absichern
    Torsten Landsiedel
        @zodiac1978
Was ist Sicherheit?



„Sicherheit ist ein relativer Zustand der Gefahrenfreiheit,
     der stets nur für einen bestimmten Zeitraum,
                eine bestimmte Umgebung
         oder unter bestimmten Bedingungen
                        gegeben ist.“
100% Sicherheit gibt es nicht
Spannungsfelder




Sicherheit           Benutzerfreundlichkeit
Wieso ich?
➔   Meine Webseite ist doch unwichtig!
➔   Wer hat denn Interesse an meinen Daten?
➔   Ich habe doch kaum Besucher!
➔   Ich habe doch ein „Sicherheits-Plugin“ installiert!
Darum!
➔   Hosting für Phishing-Seiten
➔   Spam-Versand
➔   Vandalismus / Wettbewerb
➔   Link-Farming (Backlinks)
➔   Viren/Malware-Infektionen verbreiten
➔   Werbung (Pop-Ups, iFrames, Direktlinks, etc.)
Es kann jeden treffen ...
➔   Reuters-Blog gehackt, nutzte veraltete WordPress-Version (Heise.de)
➔   Admartinator gehackt
➔   AMD-Blog defaced, dann offline
➔   Upload Magazin gehackt
➔   etc. etc. ...
Sicherheit erreichen
➔   Updaten, Updaten, Updaten!
    –   WordPress-Core, Themes und Plugins aktuell halten
    –   Benachrichtigung per Plugin (Mail on Update)
    –   Oder gleich Infinite WP oder Manage WP (o.ä.)
Gute Passwörter
➔   Möglichst lang (>10 Zeichen)
➔   Mehrere Wörter hintereinander
     –   Hutsahneregalhuepfburg
➔   Satz mit Regeln
     –   Dieser Satz ist ein super Passwort, dass ich mir gerade ausdenke!
     –   „DSi1sPdimga!“
➔   Nicht aufschreiben, nicht teilen, regelmäßig ändern
    (Stichwort: Zahnbürste!)
➔   KeePass nutzen
Schlechte Passwörter
➔   Vermeide bekannte Muster:
    ➔   Bernd1978 (Vorname + Geburtsjahr)
    ➔   P@ssw0rt (bekannte Ersetzungen)
➔   Wörterbuch-Wort
➔   Doppelt verwendete Passwörter
➔   Typische Tasten-Folgen oder Klassiker:
    ➔   Password, 123456, 12345678, qwerty, abc123
Das schwächste Glied der Kette ...
Der Weg muss sicher sein!
➔   Betriebssystem aktuell? Alle Sicherheitsupdates eingespielt?
➔   Virenscanner aktiv und aktuell?

➔   Wenn möglich SFTP statt FTP
    –   http://de.wikipedia.org/wiki/Secure_File_Transfer_Protocol
➔   Alternativ FTP over TLS
    –   http://de.wikipedia.org/wiki/FTP_über_TLS
Aufräumen! + Ordnung!
➔   Unbenutzte Themes und Plugins löschen!
    –   Nein, deaktivieren reicht nicht …
➔   Plugins und Themes nur aus vertrauenswürdigen Quellen
    beziehen!
➔   Verzeichnisse anzeigen verhindern
    –   Options All -Indexes (in .htaccess)
    –   Oder in jedem Ordner eine leere index.php
Security-Basics
➔   Sicherheitsschlüssel in der wp-config.php setzen
     –   http://codex.wordpress.org/Editing_wp-config.php#Security_Keys
➔   Sollte das Blog gehackt werden, unbedingt diese Schlüssel erneuern!
    Damit werden die Cookies verschlüsselt und die bleiben sonst valide!
Security through obscurity
Security through obscurity
➔   „Sicherheit durch Verschleierung“
➔   Sinnvoll nur als Ergänzung!
➔   Präfix ändern
    ➔ $table_prefix = 'wp_deinpräfix_';
➔   Bei der Installation durch Änderung in wp-config.php
➔   Ansonsten durch Plugins
➔   Verhindert einfache SQL-Injections
Wichtige Ordner verschieben
➔   wp-config.php (sofern möglich) in den Ordner über
    dem öffentlichen Ordner verschieben
    –   WordPress sucht automatisch auch dort!
➔   wp-content-Ordner verschieben
    –   define( 'WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] . '/blog/wp-content' );
    –   define( 'WP_CONTENT_URL', 'http://example/blog/wp-content');
    –   define( 'WP_PLUGIN_DIR', $_SERVER['DOCUMENT_ROOT'] . '/blog/wp-content/plugins' );
    –   define( 'WP_PLUGIN_URL', 'http://example/blog/wp-content/plugins');
„admin“ als Username
➔   Früher Standard, daher häufig Angriffsziel
➔   User-ID=1=Admin → OMG!

➔   Admin umbenennen:
➔   UPDATE wp_users SET user_login = 'Your New Username' WHERE user_login = 'Admin';
➔   (Wer nicht phpMyAdmin o.ä. nutzen möchte/kann, der nutzt das Search & Replace-Plugin von
    FrankBültge: http://wordpress.org/extend/plugins/search-and-replace/ )


➔   Und immer an das Präfix denken!
Ist das (un)sicher?
➔   Ist der neue Username dann geheim? Eher nicht ...
    –   Permalinkproblem:
            ●   /?author=1 → /author/admin
    –   the_author_posts_link
            ●   Link zur Autoren-Übersichtsseite bei Multiautoren-Blogs
    –   comment_class
            ●   Autor kommentiert in eigenem Blog
    –   Login-Fehlermeldung
Warum nur ...
„admin“ als Username
➔   User-ID per MySQL ändern:
➔   UPDATE 'wp_users' SET 'ID' = '1234' WHERE 'wp_users'.'ID' = 1;
➔   UPDATE 'wp_usermeta' SET 'user_id' = '1234' WHERE 'wp_usermeta'.'user_id' = 1;
➔   UPDATE 'wp_posts' SET 'post_author' = '1234' WHERE 'wp_posts'.'post_author' = 1;
➔   UPDATE 'wp_links' SET 'link_owner' = '1234' WHERE 'wp_links'.'link_owner' = 1;
➔   UPDATE `wp_comments` SET `user_id` = '1234' WHERE `wp_comments`.`user_id` = 1;


➔   (Wer nicht phpMyAdmin o.ä. nutzen möchte/kann, der nutzt das Search & Replace-Plugin von
    FrankBültge: http://wordpress.org/extend/plugins/search-and-replace/ )
➔   Und immer an das Präfix denken!
Autoren-Link umschreiben
➔   Autoren-Link umschreiben per Plugin: Edit Author Slug
    ➔   http://wordpress.org/extend/plugins/edit-author-slug/
Benutzername von Kommentar-Klassen
                                entfernen
// Security: Hide Usernames from Classes
// drweb.de/magazin/eine-wordpress-installation-korrekt-absichern/
function remove_comment_author_class($classes {
    foreach($classesas$key=>$class) {
      if(strstr($class,"comment-author-")) {
          unset($classes[$key]); }
      }
    return$classes;
}
add_filter('comment_class','andys_remove_comment_author_class');
Login-Fehlermeldungen
➔   Login verrät, ob Benutzername und/oder Passwort falsch waren ...
➔   Schlechte Usability:
add_filter('login_errors',create_function('$a', "return null;"));

➔   Besser:
function explain_less_login_issues() { return ‘FEHLER: Login falsch!’;}
add_filter( ‘login_errors’, ‘explain_less_login_issues’ );
Brute-Force-Attacken
➔   Was hilft? → Gute Passwörter!
➔   Oder ein Plugin: Limit Login Attempts
➔   Grenzen kennen!
    –   Distributed Brute Force
Kill PHP execution
➔   Im Ordner „/uploads/“ per htaccess die Ausführung von PHP
    verhindern:
    <FilesMatch *.php>
    Order Deny, Allow
    Deny from All
    </Files>
    (http://wp.smashingmagazine.com/2012/10/09/four-malware-infections-wordpress/)
wp-config.php schützen
➔   Bei PHP-Problemen darf niemals diese Datei öffentlich werden,
    daher schützen!
<FilesMatch "(wp-config.php|liesmich.html|readme.html)">
    order deny,allow
    deny from all
</FilesMatch>
➔   Zusatzfunktion: Versionsnummer verstecken
Versionsnummer verstecken
➔   Generator-Eintrag aus Head entfernen:
    –   <meta name="generator" content="WordPress <?php bloginfo('version'); ?>" />
    –   remove_action('wp_head', 'wp_generator');

➔   Aber was ist mit den Feeds?
    –   add_filter('the_generator', create_function('', 'return "";'));
➔   wp_enqueue_script()-Problem
    –   Wenn keine Version angegeben wird WP-Version angehängt!
Versionsnummer verstecken
// remove wp version param from any enqueued scripts
// http://docs.appthemes.com/tutorials/removing-wordpress-version-number/
function at_remove_wp_ver_css_js( $src ) {
    if(strpos($src,'ver='))
      $src= remove_query_arg('ver',$src);
    return$src;
}
add_filter('style_loader_src','at_remove_wp_ver_css_js',9999);
add_filter('script_loader_src','at_remove_wp_ver_css_js',9999);
SSL-Verschlüsselung
➔   Ab etwa 60 EUR / Jahr – SSL-Zertifikat
    –   define('FORCE_SSL_LOGIN', true);
    –   define('FORCE_SSL_ADMIN', true);
➔   Shared SSL-Lösung nur für den Login
    –   Redirect 301 /ssl
        https://sslsites.de/example.de/wp-login.php
    –   ???
Zugriffsrechte
➔   Immer nur soviel Rechte einräumen wie nötig
➔   Trennung Administration & Nutzung (Windows)
    –  Editor/Redakteur zum Arbeiten
     – Admin extra sichern
➔   Was nicht da ist, kann nicht missbraucht werden
    (Editor ausblenden)
    –   define('DISALLOW_FILE_EDIT',true);
➔   Dateirechte (Verzeichnisse: 755, Dateien: 644)
Zwei mal abschließen …
➔   htaccess-Passwort-Sicherung des Logins
    (nur wp-login.php!)
     –   Initiative WordPress-Sicherheit
     –   Zugang nur bestimmten IPs oder IP-Bereichen erlauben/verbieten
➔   Adminkonto extra absichern
     –   Google Authenticator oder Duo Two-Factor Authentication
➔   Blacklist
     –   http://perishablepress.com/5g-blacklist-2012/
Kinder & Brunnen
➔   Backups!
    –   FTP & MySQL-Datenbank
    –   SQL-Backup per Plugin: WP DB Backup
    –   Oder direkt in die Dropbox
    –   Bei vielen Datenbanken: MySQL-Dumper
    –   Nicht auf dem Server speichern (nicht öffentlich, nicht online)
➔   Richtig reagieren
    –   http://codex.wordpress.org/FAQ_My_site_was_hacked
Monitoring
➔   Vorteil: Schnellere Reaktionszeit
➔   Alle Änderungen werden per Mail gemeldet
    –   WordPress File Monitor Plus
➔   Nachteil: Serverbelastung
Theme & Plugin-Devs
➔   Vertraue NIEMALS einer Usereingabe!

●   Maskieren (escapen) je nach Kontext gegen Cross Site
    Scripting (XSS):
    –   esc_attr, esc_html, esc_js, esc_url, esc_url_raw, esc_textarea
Theme & Plugin-Devs
➔   Schutz vor SQL-Injection
    ➔   esc_sql
    ➔   $wpdb->prepare() / insert() / update() / select()
    ➔   Und immer an $wpdb->prefix denken!

➔   Weiterführende Links:
    ➔   http://codex.wordpress.org/Data_Validation
    ➔   http://remicorson.com/sanitizing-strings-and-data-validation-in-wordpress/
Informiere dich!
➔   Sicherheits-Blogs abonnieren
    –   http://blog.sucuri.net/category/wordpress
    –   http://googleonlinesecurity.blogspot.de/
    ➔   http://wpsecure.net/
    ➔   http://blog.unmaskparasites.com/
    ➔   http://perishablepress.com/category/web-design/security/
    ➔   https://www.badwarebusters.org/
Online Malware Scanner
➔   http://sitecheck.sucuri.net/scanner/
➔   http://safeweb.norton.com/
➔   http://www.unmaskparasites.com/security-report/
➔   http://www.unmaskparasites.com/malware-warning-guide/
➔   http://www.urlvoid.com/
➔   http://siteinspector.comodo.com/online_scan
➔   https://www.virustotal.com/
Themes prüfen
➔   http://wordpress.org/extend/plugins/tac/
➔   http://wordpress.org/extend/plugins/exploit-scanner/
➔   http://wordpress.org/extend/plugins/theme-check/
➔   http://wordpress.org/extend/plugins/log-deprecated-notices/
➔   http://wordpress.org/extend/plugins/deprecation-checker/
Plugins prüfen
➔   http://wordpress.org/extend/plugins/log-deprecated-notices/
➔   http://wordpress.org/extend/plugins/deprecation-checker/
➔   http://wordpress.org/extend/plugins/plugin-check/
➔   http://wordpress.org/extend/plugins/p3-profiler/
Sicherheits-Plugins für den Ernstfall
➔   http://wpantivirus.com/
➔   http://wordpress.org/extend/plugins/wp-security-scan/
➔   http://wordpress.org/extend/plugins/secure-wordpress/
➔   http://wordpress.org/extend/plugins/timthumb-vulnerability-scanner/
➔   http://wordpress.org/extend/plugins/bulletproof-security/
➔   http://wordpress.org/extend/plugins/6scan-protection/
➔   http://wordpress.org/extend/plugins/better-wp-security/
➔   http://wordpress.org/extend/plugins/ultimate-security-checker/
➔   http://wordpress.org/extend/plugins/wordfence/
Danke!


 Vielen Dank an die XING-WordPress-Gruppe!


Vielen Dank an das WordPress-Meetup Hamburg!
Fragen?
➔   Zeit ist knapp, daher gerne auch später auf dem Camp
    oder online:
    ➔   http://torstenlandsiedel.de/kontakt/
    ➔   https://twitter.com/zodiac1978/

Weitere ähnliche Inhalte

Andere mochten auch

Análisis espectral usando MATLAB
Análisis espectral usando MATLABAnálisis espectral usando MATLAB
Análisis espectral usando MATLABMarcelofrm
 
webinale2011_Daniel Höpfner_Förderprogramme für dummies
webinale2011_Daniel Höpfner_Förderprogramme für dummieswebinale2011_Daniel Höpfner_Förderprogramme für dummies
webinale2011_Daniel Höpfner_Förderprogramme für dummiessmueller_sandsmedia
 
El comercio a través del puerto de buenos
El comercio a través del puerto de buenosEl comercio a través del puerto de buenos
El comercio a través del puerto de buenosepmartin17
 
Bildungsprogramm 2013 von syndicom - Gewerkschaft Medien und Kommunikation
Bildungsprogramm 2013 von syndicom - Gewerkschaft Medien und KommunikationBildungsprogramm 2013 von syndicom - Gewerkschaft Medien und Kommunikation
Bildungsprogramm 2013 von syndicom - Gewerkschaft Medien und KommunikationBeatrice Müller
 
GBI CORREO INSTITUCIONAL Y AULA VIRTUAL
GBI CORREO INSTITUCIONAL Y AULA VIRTUALGBI CORREO INSTITUCIONAL Y AULA VIRTUAL
GBI CORREO INSTITUCIONAL Y AULA VIRTUALDANIEL1941
 
Variablesmundialesynacionalesing juancarlosperezortiz-120822121634-phpapp01
Variablesmundialesynacionalesing juancarlosperezortiz-120822121634-phpapp01Variablesmundialesynacionalesing juancarlosperezortiz-120822121634-phpapp01
Variablesmundialesynacionalesing juancarlosperezortiz-120822121634-phpapp01ropemali7
 
Umweltschutz in der schule georg & tasos
Umweltschutz in der schule georg & tasosUmweltschutz in der schule georg & tasos
Umweltschutz in der schule georg & tasosmxgiosi
 

Andere mochten auch (20)

Análisis espectral usando MATLAB
Análisis espectral usando MATLABAnálisis espectral usando MATLAB
Análisis espectral usando MATLAB
 
webinale2011_Daniel Höpfner_Förderprogramme für dummies
webinale2011_Daniel Höpfner_Förderprogramme für dummieswebinale2011_Daniel Höpfner_Förderprogramme für dummies
webinale2011_Daniel Höpfner_Förderprogramme für dummies
 
8 c gas
8 c gas8 c gas
8 c gas
 
El comercio a través del puerto de buenos
El comercio a través del puerto de buenosEl comercio a través del puerto de buenos
El comercio a través del puerto de buenos
 
Que es metadatos
Que es metadatosQue es metadatos
Que es metadatos
 
Die ferien sind vorbei
Die ferien sind vorbeiDie ferien sind vorbei
Die ferien sind vorbei
 
Farben
Farben Farben
Farben
 
Bildungsprogramm 2013 von syndicom - Gewerkschaft Medien und Kommunikation
Bildungsprogramm 2013 von syndicom - Gewerkschaft Medien und KommunikationBildungsprogramm 2013 von syndicom - Gewerkschaft Medien und Kommunikation
Bildungsprogramm 2013 von syndicom - Gewerkschaft Medien und Kommunikation
 
GBI CORREO INSTITUCIONAL Y AULA VIRTUAL
GBI CORREO INSTITUCIONAL Y AULA VIRTUALGBI CORREO INSTITUCIONAL Y AULA VIRTUAL
GBI CORREO INSTITUCIONAL Y AULA VIRTUAL
 
Weihnachten
WeihnachtenWeihnachten
Weihnachten
 
Variablesmundialesynacionalesing juancarlosperezortiz-120822121634-phpapp01
Variablesmundialesynacionalesing juancarlosperezortiz-120822121634-phpapp01Variablesmundialesynacionalesing juancarlosperezortiz-120822121634-phpapp01
Variablesmundialesynacionalesing juancarlosperezortiz-120822121634-phpapp01
 
Conmutador ip
Conmutador ipConmutador ip
Conmutador ip
 
Investigacion n
Investigacion nInvestigacion n
Investigacion n
 
Turismo sostenible en medio rural
Turismo sostenible en medio ruralTurismo sostenible en medio rural
Turismo sostenible en medio rural
 
MIS DISEÑOS
MIS DISEÑOSMIS DISEÑOS
MIS DISEÑOS
 
CoronaSV
CoronaSVCoronaSV
CoronaSV
 
Herramientas de la web 2
Herramientas de la web 2Herramientas de la web 2
Herramientas de la web 2
 
Umweltschutz in der schule georg & tasos
Umweltschutz in der schule georg & tasosUmweltschutz in der schule georg & tasos
Umweltschutz in der schule georg & tasos
 
Rendershots
RendershotsRendershots
Rendershots
 
Boletín grupo colina
Boletín grupo colinaBoletín grupo colina
Boletín grupo colina
 

Ähnlich wie WordPress absichern - WP Camp 2012 in Berlin

Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017TRILOS new media
 
WP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für WordpressWP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für Wordpressfrankstaude
 
Der oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterDer oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterGunther Pippèrr
 
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEARCH ONE
 
WordPress sicherer machen - Basics
WordPress sicherer machen - BasicsWordPress sicherer machen - Basics
WordPress sicherer machen - BasicsAndreas Rudorfer
 
Bestehende WordPress-Seiten auf Multisite migrieren
Bestehende WordPress-Seiten auf Multisite migrierenBestehende WordPress-Seiten auf Multisite migrieren
Bestehende WordPress-Seiten auf Multisite migrierenWalter Ebert
 
Sicherheit für WordPress
Sicherheit für WordPressSicherheit für WordPress
Sicherheit für WordPressWalter Ebert
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungFrank Schmittlein
 
Webanwendungen - Installation, Konfiguration und Administration
Webanwendungen - Installation, Konfiguration und AdministrationWebanwendungen - Installation, Konfiguration und Administration
Webanwendungen - Installation, Konfiguration und AdministrationThomas Siegers
 
Word Press Als Blog Und Cms O
Word Press Als Blog Und Cms OWord Press Als Blog Und Cms O
Word Press Als Blog Und Cms Osol777
 
WordPress Sicherheit
WordPress SicherheitWordPress Sicherheit
WordPress SicherheitDietmar Leher
 
PowerShell Sicherheit in 6 Schritten produktiv absichern
PowerShell Sicherheit in 6 Schritten produktiv absichernPowerShell Sicherheit in 6 Schritten produktiv absichern
PowerShell Sicherheit in 6 Schritten produktiv absichernAttila Krick
 
WPDB - das unbekannte Objekt
WPDB -  das unbekannte ObjektWPDB -  das unbekannte Objekt
WPDB - das unbekannte Objektfrankstaude
 
Eigene Themes from Scratch
Eigene Themes from ScratchEigene Themes from Scratch
Eigene Themes from ScratchStefan Fröhlich
 
Javascript done right
Javascript done rightJavascript done right
Javascript done rightDirk Ginader
 
Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)Sebastian Adler
 
HTML/CSS-Validierung in Zeiten von HTML5
HTML/CSS-Validierung in Zeiten von HTML5HTML/CSS-Validierung in Zeiten von HTML5
HTML/CSS-Validierung in Zeiten von HTML5Torsten Landsiedel
 
Meine ersten 12 Monate als Plugin-Entwickler für WordPress - WP Camp 2012 Berlin
Meine ersten 12 Monate als Plugin-Entwickler für WordPress - WP Camp 2012 BerlinMeine ersten 12 Monate als Plugin-Entwickler für WordPress - WP Camp 2012 Berlin
Meine ersten 12 Monate als Plugin-Entwickler für WordPress - WP Camp 2012 BerlinDavid Decker
 

Ähnlich wie WordPress absichern - WP Camp 2012 in Berlin (20)

Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
 
WP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für WordpressWP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für Wordpress
 
Der oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterDer oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerter
 
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
 
WordPress sicherer machen - Basics
WordPress sicherer machen - BasicsWordPress sicherer machen - Basics
WordPress sicherer machen - Basics
 
Bestehende WordPress-Seiten auf Multisite migrieren
Bestehende WordPress-Seiten auf Multisite migrierenBestehende WordPress-Seiten auf Multisite migrieren
Bestehende WordPress-Seiten auf Multisite migrieren
 
Typo3 und Varnish
Typo3 und VarnishTypo3 und Varnish
Typo3 und Varnish
 
Sicherheit für WordPress
Sicherheit für WordPressSicherheit für WordPress
Sicherheit für WordPress
 
TYPO3-Checkliste
TYPO3-ChecklisteTYPO3-Checkliste
TYPO3-Checkliste
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
 
Webanwendungen - Installation, Konfiguration und Administration
Webanwendungen - Installation, Konfiguration und AdministrationWebanwendungen - Installation, Konfiguration und Administration
Webanwendungen - Installation, Konfiguration und Administration
 
Word Press Als Blog Und Cms O
Word Press Als Blog Und Cms OWord Press Als Blog Und Cms O
Word Press Als Blog Und Cms O
 
WordPress Sicherheit
WordPress SicherheitWordPress Sicherheit
WordPress Sicherheit
 
PowerShell Sicherheit in 6 Schritten produktiv absichern
PowerShell Sicherheit in 6 Schritten produktiv absichernPowerShell Sicherheit in 6 Schritten produktiv absichern
PowerShell Sicherheit in 6 Schritten produktiv absichern
 
WPDB - das unbekannte Objekt
WPDB -  das unbekannte ObjektWPDB -  das unbekannte Objekt
WPDB - das unbekannte Objekt
 
Eigene Themes from Scratch
Eigene Themes from ScratchEigene Themes from Scratch
Eigene Themes from Scratch
 
Javascript done right
Javascript done rightJavascript done right
Javascript done right
 
Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)
 
HTML/CSS-Validierung in Zeiten von HTML5
HTML/CSS-Validierung in Zeiten von HTML5HTML/CSS-Validierung in Zeiten von HTML5
HTML/CSS-Validierung in Zeiten von HTML5
 
Meine ersten 12 Monate als Plugin-Entwickler für WordPress - WP Camp 2012 Berlin
Meine ersten 12 Monate als Plugin-Entwickler für WordPress - WP Camp 2012 BerlinMeine ersten 12 Monate als Plugin-Entwickler für WordPress - WP Camp 2012 Berlin
Meine ersten 12 Monate als Plugin-Entwickler für WordPress - WP Camp 2012 Berlin
 

Mehr von Torsten Landsiedel

Das Health Check Plugin in der Praxis
Das Health Check Plugin in der PraxisDas Health Check Plugin in der Praxis
Das Health Check Plugin in der PraxisTorsten Landsiedel
 
UX-Probleme mit dem neuen Block-Editor (Gutenberg)
UX-Probleme mit dem neuen Block-Editor (Gutenberg)UX-Probleme mit dem neuen Block-Editor (Gutenberg)
UX-Probleme mit dem neuen Block-Editor (Gutenberg)Torsten Landsiedel
 
Werde Übersetzer! Werde Translation Editor!
Werde Übersetzer!  Werde Translation Editor!Werde Übersetzer!  Werde Translation Editor!
Werde Übersetzer! Werde Translation Editor!Torsten Landsiedel
 
Die schmutzige Seite von WordPress
Die schmutzige Seite von WordPressDie schmutzige Seite von WordPress
Die schmutzige Seite von WordPressTorsten Landsiedel
 
The Child Theme Dilemma (EN) - Milano Edition
The Child Theme Dilemma (EN) - Milano EditionThe Child Theme Dilemma (EN) - Milano Edition
The Child Theme Dilemma (EN) - Milano EditionTorsten Landsiedel
 
Umgang mit Frustration im Open-Source-Projekt WordPress
Umgang mit Frustration im Open-Source-Projekt WordPressUmgang mit Frustration im Open-Source-Projekt WordPress
Umgang mit Frustration im Open-Source-Projekt WordPressTorsten Landsiedel
 
Wie ich durch Support und Übersetzung ein (besserer) Entwickler geworden bin
Wie ich durch Support und Übersetzung ein (besserer) Entwickler geworden binWie ich durch Support und Übersetzung ein (besserer) Entwickler geworden bin
Wie ich durch Support und Übersetzung ein (besserer) Entwickler geworden binTorsten Landsiedel
 
Contact Form 7 - Pflicht und Kür
Contact Form 7 - Pflicht und KürContact Form 7 - Pflicht und Kür
Contact Form 7 - Pflicht und KürTorsten Landsiedel
 
Social Media Menüs in WordPress
Social Media Menüs in WordPressSocial Media Menüs in WordPress
Social Media Menüs in WordPressTorsten Landsiedel
 
Shortcodes erstellen mit WordPress
Shortcodes erstellen mit WordPressShortcodes erstellen mit WordPress
Shortcodes erstellen mit WordPressTorsten Landsiedel
 
Podcasting mit WordPress.com-Blogs
Podcasting mit WordPress.com-BlogsPodcasting mit WordPress.com-Blogs
Podcasting mit WordPress.com-BlogsTorsten Landsiedel
 
WordPress.com-Blogs individualisieren
WordPress.com-Blogs individualisierenWordPress.com-Blogs individualisieren
WordPress.com-Blogs individualisierenTorsten Landsiedel
 

Mehr von Torsten Landsiedel (18)

Das Health Check Plugin in der Praxis
Das Health Check Plugin in der PraxisDas Health Check Plugin in der Praxis
Das Health Check Plugin in der Praxis
 
UX-Probleme mit dem neuen Block-Editor (Gutenberg)
UX-Probleme mit dem neuen Block-Editor (Gutenberg)UX-Probleme mit dem neuen Block-Editor (Gutenberg)
UX-Probleme mit dem neuen Block-Editor (Gutenberg)
 
Oh, no! DSGVO.
Oh, no! DSGVO.Oh, no! DSGVO.
Oh, no! DSGVO.
 
WordPress kaputt machen
WordPress kaputt machenWordPress kaputt machen
WordPress kaputt machen
 
Werde Übersetzer! Werde Translation Editor!
Werde Übersetzer!  Werde Translation Editor!Werde Übersetzer!  Werde Translation Editor!
Werde Übersetzer! Werde Translation Editor!
 
Die schmutzige Seite von WordPress
Die schmutzige Seite von WordPressDie schmutzige Seite von WordPress
Die schmutzige Seite von WordPress
 
The Child Theme Dilemma (EN) - Milano Edition
The Child Theme Dilemma (EN) - Milano EditionThe Child Theme Dilemma (EN) - Milano Edition
The Child Theme Dilemma (EN) - Milano Edition
 
Umgang mit Frustration im Open-Source-Projekt WordPress
Umgang mit Frustration im Open-Source-Projekt WordPressUmgang mit Frustration im Open-Source-Projekt WordPress
Umgang mit Frustration im Open-Source-Projekt WordPress
 
The Child Theme Dilemma (EN)
The Child Theme Dilemma (EN)The Child Theme Dilemma (EN)
The Child Theme Dilemma (EN)
 
Wie ich durch Support und Übersetzung ein (besserer) Entwickler geworden bin
Wie ich durch Support und Übersetzung ein (besserer) Entwickler geworden binWie ich durch Support und Übersetzung ein (besserer) Entwickler geworden bin
Wie ich durch Support und Übersetzung ein (besserer) Entwickler geworden bin
 
Das Child-Theme-Dilemma
Das Child-Theme-DilemmaDas Child-Theme-Dilemma
Das Child-Theme-Dilemma
 
Contact Form 7 - Pflicht und Kür
Contact Form 7 - Pflicht und KürContact Form 7 - Pflicht und Kür
Contact Form 7 - Pflicht und Kür
 
Social Media Menüs in WordPress
Social Media Menüs in WordPressSocial Media Menüs in WordPress
Social Media Menüs in WordPress
 
Mitmachen bei WordPress
Mitmachen bei WordPressMitmachen bei WordPress
Mitmachen bei WordPress
 
MetaMeetup
MetaMeetupMetaMeetup
MetaMeetup
 
Shortcodes erstellen mit WordPress
Shortcodes erstellen mit WordPressShortcodes erstellen mit WordPress
Shortcodes erstellen mit WordPress
 
Podcasting mit WordPress.com-Blogs
Podcasting mit WordPress.com-BlogsPodcasting mit WordPress.com-Blogs
Podcasting mit WordPress.com-Blogs
 
WordPress.com-Blogs individualisieren
WordPress.com-Blogs individualisierenWordPress.com-Blogs individualisieren
WordPress.com-Blogs individualisieren
 

WordPress absichern - WP Camp 2012 in Berlin

  • 1. WordPress absichern Torsten Landsiedel @zodiac1978
  • 2. Was ist Sicherheit? „Sicherheit ist ein relativer Zustand der Gefahrenfreiheit, der stets nur für einen bestimmten Zeitraum, eine bestimmte Umgebung oder unter bestimmten Bedingungen gegeben ist.“
  • 4. Spannungsfelder Sicherheit Benutzerfreundlichkeit
  • 5.
  • 6. Wieso ich? ➔ Meine Webseite ist doch unwichtig! ➔ Wer hat denn Interesse an meinen Daten? ➔ Ich habe doch kaum Besucher! ➔ Ich habe doch ein „Sicherheits-Plugin“ installiert!
  • 7. Darum! ➔ Hosting für Phishing-Seiten ➔ Spam-Versand ➔ Vandalismus / Wettbewerb ➔ Link-Farming (Backlinks) ➔ Viren/Malware-Infektionen verbreiten ➔ Werbung (Pop-Ups, iFrames, Direktlinks, etc.)
  • 8. Es kann jeden treffen ... ➔ Reuters-Blog gehackt, nutzte veraltete WordPress-Version (Heise.de) ➔ Admartinator gehackt ➔ AMD-Blog defaced, dann offline ➔ Upload Magazin gehackt ➔ etc. etc. ...
  • 9. Sicherheit erreichen ➔ Updaten, Updaten, Updaten! – WordPress-Core, Themes und Plugins aktuell halten – Benachrichtigung per Plugin (Mail on Update) – Oder gleich Infinite WP oder Manage WP (o.ä.)
  • 10. Gute Passwörter ➔ Möglichst lang (>10 Zeichen) ➔ Mehrere Wörter hintereinander – Hutsahneregalhuepfburg ➔ Satz mit Regeln – Dieser Satz ist ein super Passwort, dass ich mir gerade ausdenke! – „DSi1sPdimga!“ ➔ Nicht aufschreiben, nicht teilen, regelmäßig ändern (Stichwort: Zahnbürste!) ➔ KeePass nutzen
  • 11. Schlechte Passwörter ➔ Vermeide bekannte Muster: ➔ Bernd1978 (Vorname + Geburtsjahr) ➔ P@ssw0rt (bekannte Ersetzungen) ➔ Wörterbuch-Wort ➔ Doppelt verwendete Passwörter ➔ Typische Tasten-Folgen oder Klassiker: ➔ Password, 123456, 12345678, qwerty, abc123
  • 12. Das schwächste Glied der Kette ...
  • 13. Der Weg muss sicher sein! ➔ Betriebssystem aktuell? Alle Sicherheitsupdates eingespielt? ➔ Virenscanner aktiv und aktuell? ➔ Wenn möglich SFTP statt FTP – http://de.wikipedia.org/wiki/Secure_File_Transfer_Protocol ➔ Alternativ FTP over TLS – http://de.wikipedia.org/wiki/FTP_über_TLS
  • 14. Aufräumen! + Ordnung! ➔ Unbenutzte Themes und Plugins löschen! – Nein, deaktivieren reicht nicht … ➔ Plugins und Themes nur aus vertrauenswürdigen Quellen beziehen! ➔ Verzeichnisse anzeigen verhindern – Options All -Indexes (in .htaccess) – Oder in jedem Ordner eine leere index.php
  • 15. Security-Basics ➔ Sicherheitsschlüssel in der wp-config.php setzen – http://codex.wordpress.org/Editing_wp-config.php#Security_Keys ➔ Sollte das Blog gehackt werden, unbedingt diese Schlüssel erneuern! Damit werden die Cookies verschlüsselt und die bleiben sonst valide!
  • 17. Security through obscurity ➔ „Sicherheit durch Verschleierung“ ➔ Sinnvoll nur als Ergänzung! ➔ Präfix ändern ➔ $table_prefix = 'wp_deinpräfix_'; ➔ Bei der Installation durch Änderung in wp-config.php ➔ Ansonsten durch Plugins ➔ Verhindert einfache SQL-Injections
  • 18. Wichtige Ordner verschieben ➔ wp-config.php (sofern möglich) in den Ordner über dem öffentlichen Ordner verschieben – WordPress sucht automatisch auch dort! ➔ wp-content-Ordner verschieben – define( 'WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] . '/blog/wp-content' ); – define( 'WP_CONTENT_URL', 'http://example/blog/wp-content'); – define( 'WP_PLUGIN_DIR', $_SERVER['DOCUMENT_ROOT'] . '/blog/wp-content/plugins' ); – define( 'WP_PLUGIN_URL', 'http://example/blog/wp-content/plugins');
  • 19. „admin“ als Username ➔ Früher Standard, daher häufig Angriffsziel ➔ User-ID=1=Admin → OMG! ➔ Admin umbenennen: ➔ UPDATE wp_users SET user_login = 'Your New Username' WHERE user_login = 'Admin'; ➔ (Wer nicht phpMyAdmin o.ä. nutzen möchte/kann, der nutzt das Search & Replace-Plugin von FrankBültge: http://wordpress.org/extend/plugins/search-and-replace/ ) ➔ Und immer an das Präfix denken!
  • 20. Ist das (un)sicher? ➔ Ist der neue Username dann geheim? Eher nicht ... – Permalinkproblem: ● /?author=1 → /author/admin – the_author_posts_link ● Link zur Autoren-Übersichtsseite bei Multiautoren-Blogs – comment_class ● Autor kommentiert in eigenem Blog – Login-Fehlermeldung
  • 22. „admin“ als Username ➔ User-ID per MySQL ändern: ➔ UPDATE 'wp_users' SET 'ID' = '1234' WHERE 'wp_users'.'ID' = 1; ➔ UPDATE 'wp_usermeta' SET 'user_id' = '1234' WHERE 'wp_usermeta'.'user_id' = 1; ➔ UPDATE 'wp_posts' SET 'post_author' = '1234' WHERE 'wp_posts'.'post_author' = 1; ➔ UPDATE 'wp_links' SET 'link_owner' = '1234' WHERE 'wp_links'.'link_owner' = 1; ➔ UPDATE `wp_comments` SET `user_id` = '1234' WHERE `wp_comments`.`user_id` = 1; ➔ (Wer nicht phpMyAdmin o.ä. nutzen möchte/kann, der nutzt das Search & Replace-Plugin von FrankBültge: http://wordpress.org/extend/plugins/search-and-replace/ ) ➔ Und immer an das Präfix denken!
  • 23. Autoren-Link umschreiben ➔ Autoren-Link umschreiben per Plugin: Edit Author Slug ➔ http://wordpress.org/extend/plugins/edit-author-slug/
  • 24. Benutzername von Kommentar-Klassen entfernen // Security: Hide Usernames from Classes // drweb.de/magazin/eine-wordpress-installation-korrekt-absichern/ function remove_comment_author_class($classes { foreach($classesas$key=>$class) { if(strstr($class,"comment-author-")) { unset($classes[$key]); } } return$classes; } add_filter('comment_class','andys_remove_comment_author_class');
  • 25. Login-Fehlermeldungen ➔ Login verrät, ob Benutzername und/oder Passwort falsch waren ... ➔ Schlechte Usability: add_filter('login_errors',create_function('$a', "return null;")); ➔ Besser: function explain_less_login_issues() { return ‘FEHLER: Login falsch!’;} add_filter( ‘login_errors’, ‘explain_less_login_issues’ );
  • 26. Brute-Force-Attacken ➔ Was hilft? → Gute Passwörter! ➔ Oder ein Plugin: Limit Login Attempts ➔ Grenzen kennen! – Distributed Brute Force
  • 27. Kill PHP execution ➔ Im Ordner „/uploads/“ per htaccess die Ausführung von PHP verhindern: <FilesMatch *.php> Order Deny, Allow Deny from All </Files> (http://wp.smashingmagazine.com/2012/10/09/four-malware-infections-wordpress/)
  • 28. wp-config.php schützen ➔ Bei PHP-Problemen darf niemals diese Datei öffentlich werden, daher schützen! <FilesMatch "(wp-config.php|liesmich.html|readme.html)"> order deny,allow deny from all </FilesMatch> ➔ Zusatzfunktion: Versionsnummer verstecken
  • 29. Versionsnummer verstecken ➔ Generator-Eintrag aus Head entfernen: – <meta name="generator" content="WordPress <?php bloginfo('version'); ?>" /> – remove_action('wp_head', 'wp_generator'); ➔ Aber was ist mit den Feeds? – add_filter('the_generator', create_function('', 'return "";')); ➔ wp_enqueue_script()-Problem – Wenn keine Version angegeben wird WP-Version angehängt!
  • 30. Versionsnummer verstecken // remove wp version param from any enqueued scripts // http://docs.appthemes.com/tutorials/removing-wordpress-version-number/ function at_remove_wp_ver_css_js( $src ) { if(strpos($src,'ver=')) $src= remove_query_arg('ver',$src); return$src; } add_filter('style_loader_src','at_remove_wp_ver_css_js',9999); add_filter('script_loader_src','at_remove_wp_ver_css_js',9999);
  • 31. SSL-Verschlüsselung ➔ Ab etwa 60 EUR / Jahr – SSL-Zertifikat – define('FORCE_SSL_LOGIN', true); – define('FORCE_SSL_ADMIN', true); ➔ Shared SSL-Lösung nur für den Login – Redirect 301 /ssl https://sslsites.de/example.de/wp-login.php – ???
  • 32. Zugriffsrechte ➔ Immer nur soviel Rechte einräumen wie nötig ➔ Trennung Administration & Nutzung (Windows) – Editor/Redakteur zum Arbeiten – Admin extra sichern ➔ Was nicht da ist, kann nicht missbraucht werden (Editor ausblenden) – define('DISALLOW_FILE_EDIT',true); ➔ Dateirechte (Verzeichnisse: 755, Dateien: 644)
  • 33. Zwei mal abschließen … ➔ htaccess-Passwort-Sicherung des Logins (nur wp-login.php!) – Initiative WordPress-Sicherheit – Zugang nur bestimmten IPs oder IP-Bereichen erlauben/verbieten ➔ Adminkonto extra absichern – Google Authenticator oder Duo Two-Factor Authentication ➔ Blacklist – http://perishablepress.com/5g-blacklist-2012/
  • 34. Kinder & Brunnen ➔ Backups! – FTP & MySQL-Datenbank – SQL-Backup per Plugin: WP DB Backup – Oder direkt in die Dropbox – Bei vielen Datenbanken: MySQL-Dumper – Nicht auf dem Server speichern (nicht öffentlich, nicht online) ➔ Richtig reagieren – http://codex.wordpress.org/FAQ_My_site_was_hacked
  • 35. Monitoring ➔ Vorteil: Schnellere Reaktionszeit ➔ Alle Änderungen werden per Mail gemeldet – WordPress File Monitor Plus ➔ Nachteil: Serverbelastung
  • 36. Theme & Plugin-Devs ➔ Vertraue NIEMALS einer Usereingabe! ● Maskieren (escapen) je nach Kontext gegen Cross Site Scripting (XSS): – esc_attr, esc_html, esc_js, esc_url, esc_url_raw, esc_textarea
  • 37. Theme & Plugin-Devs ➔ Schutz vor SQL-Injection ➔ esc_sql ➔ $wpdb->prepare() / insert() / update() / select() ➔ Und immer an $wpdb->prefix denken! ➔ Weiterführende Links: ➔ http://codex.wordpress.org/Data_Validation ➔ http://remicorson.com/sanitizing-strings-and-data-validation-in-wordpress/
  • 38. Informiere dich! ➔ Sicherheits-Blogs abonnieren – http://blog.sucuri.net/category/wordpress – http://googleonlinesecurity.blogspot.de/ ➔ http://wpsecure.net/ ➔ http://blog.unmaskparasites.com/ ➔ http://perishablepress.com/category/web-design/security/ ➔ https://www.badwarebusters.org/
  • 39. Online Malware Scanner ➔ http://sitecheck.sucuri.net/scanner/ ➔ http://safeweb.norton.com/ ➔ http://www.unmaskparasites.com/security-report/ ➔ http://www.unmaskparasites.com/malware-warning-guide/ ➔ http://www.urlvoid.com/ ➔ http://siteinspector.comodo.com/online_scan ➔ https://www.virustotal.com/
  • 40. Themes prüfen ➔ http://wordpress.org/extend/plugins/tac/ ➔ http://wordpress.org/extend/plugins/exploit-scanner/ ➔ http://wordpress.org/extend/plugins/theme-check/ ➔ http://wordpress.org/extend/plugins/log-deprecated-notices/ ➔ http://wordpress.org/extend/plugins/deprecation-checker/
  • 41. Plugins prüfen ➔ http://wordpress.org/extend/plugins/log-deprecated-notices/ ➔ http://wordpress.org/extend/plugins/deprecation-checker/ ➔ http://wordpress.org/extend/plugins/plugin-check/ ➔ http://wordpress.org/extend/plugins/p3-profiler/
  • 42. Sicherheits-Plugins für den Ernstfall ➔ http://wpantivirus.com/ ➔ http://wordpress.org/extend/plugins/wp-security-scan/ ➔ http://wordpress.org/extend/plugins/secure-wordpress/ ➔ http://wordpress.org/extend/plugins/timthumb-vulnerability-scanner/ ➔ http://wordpress.org/extend/plugins/bulletproof-security/ ➔ http://wordpress.org/extend/plugins/6scan-protection/ ➔ http://wordpress.org/extend/plugins/better-wp-security/ ➔ http://wordpress.org/extend/plugins/ultimate-security-checker/ ➔ http://wordpress.org/extend/plugins/wordfence/
  • 43. Danke! Vielen Dank an die XING-WordPress-Gruppe! Vielen Dank an das WordPress-Meetup Hamburg!
  • 44. Fragen? ➔ Zeit ist knapp, daher gerne auch später auf dem Camp oder online: ➔ http://torstenlandsiedel.de/kontakt/ ➔ https://twitter.com/zodiac1978/