Außerdem ist es empfehlenswert einen anderen Präfix als wp_ zu benutzen
Code:
$table_prefix = ‘myblog123_’;
Disallow File Edit solltet ihr erst verbieten wenn ihr alle Einstellungen beendet habt.
Code:
define(‘DISALLOW_FILE_EDIT’, true);
Damit keine Fehlermeldungen auf eurer Webseite angezeigt werden und ggf. sonstiges angezeigt wird was besser nicht angezeigt werden sollte, muss der Debug Modus ausgestellt werden
Achtet dadrauf, dass ihr bei der Installation von WordPress nach möglichkeit nicht “admin” als Benutzeraccount benutzt. Benutzt einfach irgendwas außergewöhnliches was ihr euch aber merken könnt. Den Anzeigenamen in den Artikel lässt sich nachträglich im Profil (wp-admin/profile.php) ändern. Ein sicheres Passwort sollte ebenfalls benutzt werden, ich empfehle hierzu folgenden Generator : http://www.gaijin.at/olspwgen.php. Ein Beispiel Passwort, welches so schnell nicht crackbar ist, könnte zB so aussehen : sN@KMqhKxlWV2oqubl]Esö0&8uYq@!vbgI!QDHJFpj5yb@>Z
4. Ordner/Datei Rechte richtig einstellen
Um die Berechtigungen für ein Verzeichniss einzusellen, macht Ihr Rechtsklick auf den Ordner und klickt auf “Dateiberechtigungen”, anschließend gebt ihr dort die “Zahl” ein,
welche im Bild bei “Needed Chmod” steht.
Die config.php sollte bestenfalls 440 oder 400 haben, falls diese Einstellungen nicht gehen benutze 644
4. Plugins installieren
Anti-Vorratsdatenspeicherung 2.0 ( speichert IPs als MD5 ) von daher besser zu V 1.x greifen, Ips werden als 127.0.0.1 gespeichert, User-Agents und Email Adressen werden nicht gespeichert.
Askimet würde ich durch AntiSpam Bee ersetzen. Wie der Name schon zu vermuten lässt versucht AntiSpam Bee Spam in Kommentaren, Pingbacks etc herauszufiltern und zu blockieren.
Jetpack wird hauptsächlich für Statistiken benutzt. Hierfür ist ein WordPress.com Account notwendig.
block-bad-queries/ protect WordPress Against Malicious URL Requests
Falls das Installieren der Plugins deshalb fehlschlägt, habt ihr 2 Möglichkeiten.
1. Ihr bearbeitet eure Config.php wie folgt :
Code:
define(‘FS_METHOD’, ‘ftpext’); // forces the filesystem method: “direct”, “ssh”, “ftpext”, or “ftpsockets”
define(‘FTP_BASE’, ‘/puplic_html/blog/’); // absolute path to root installation directory
define(‘FTP_CONTENT_DIR’, ‘/puplic_html/blog/wp-content/’); // absolute path to “wp-content” directory
define(‘FTP_PLUGIN_DIR ‘, ‘/puplic_html/blog/wp-content/plugins/’); // absolute path to “wp-plugins” directory
define(‘FTP_PUBKEY’, ‘/home/username/.ssh/id_rsa.pub’); // absolute path to your SSH public key
define(‘FTP_PRIVKEY’, ‘/home/username/.ssh/id_rsa’); // absolute path to your SSH private key
define(‘FTP_USER’, ‘username’); // either your FTP or SSH username
define(‘FTP_PASS’, ‘password’); // password for FTP_USER username
define(‘FTP_HOST’, ‘ftp.domain.de:21′); // hostname:port combo for your SSH/FTP server
2. Ihr gebt eure Zugangsdaten in der Form ein, was mir sicherer erscheint.
5. WordPress und Plugins aktuell halten
Prüft in regelmäßigen Abständen ob neue Plugin bzw WordPress Updates verfügbar sind (/wp-admin/update-core.php)
6. Entfernt die WordPress Version / ( Error Messages )
Sucht in eurem Theme Order nach der Datei functions.php und fügt folgende Zeilen ein
Entfernen der WP Version
Code:
function no_generator() { return ”; }
add_filter( ‘the_generator’, ‘no_generator’ );
Entfernen der WP – Login / Error Messages
Code:
function explain_less_login_issues(){ return ‘ERROR: Entered credentials are incorrect.’;}
add_filter( ‘login_errors’, ‘explain_less_login_issues’ );
7. Entfernt unsichere Dateien
Code:
readme.html
/wp-admin/install.php
8. Index.php hinzufügen
Zum Schluss solltet ihr in Ordner wie zB “uploads“, “themes“, usw eine leere index.php Datei einfügen, damit man diese Ordner nicht direkt anbrowsen kann.
htaccess Datei ( in das haupt verzeichniss kopieren ):
#Disable Directory Listing
Options -Indexes
####################################################################################
# Schutz der wp-config.php
<files wp-config.php>
Order deny,allow
deny from all
</files>
####################################################################################
php_flag display_errors off
php_flag log_errors off
php_flag register_globals off
php_flag session.use_trans_sid off
####################################################################################
####################################################################################
<Files 403.shtml>
order allow,deny
allow from all
</Files>
####################################################################################
####################################################################################
####################################################################################
####################################################################################
####################################################################################
### PERISHABLE PRESS 4G BLACKLIST ###
# ESSENTIALS
RewriteEngine on
ServerSignature Off
Options All -Indexes
Options +FollowSymLinks
####################################################################################
# FILTER REQUEST METHODS
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} ^(TRACE|DELETE|TRACK) [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>
####################################################################################
# BLACKLIST CANDIDATES
<Limit GET POST PUT>
Order Allow,Deny
Allow from all
Deny from 75.126.85.215 "# blacklist candidate 2008-01-02 = admin-ajax.php attack "
Deny from 128.111.48.138 "# blacklist candidate 2008-02-10 = cryptic character strings "
Deny from 87.248.163.54 "# blacklist candidate 2008-03-09 = block administrative attacks "
Deny from 84.122.143.99 "# blacklist candidate 2008-04-27 = block clam store loser "
Deny from 210.210.119.145 "# blacklist candidate 2008-05-31 = block _vpi.xml attacks "
Deny from 66.74.199.125 "# blacklist candidate 2008-10-19 = block mindless spider running "
Deny from 203.55.231.100 "# 1048 attacks in 60 minutes"
Deny from 24.19.202.10 "# 1629 attacks in 90 minutes"
</Limit>
####################################################################################
# QUERY STRING EXPLOITS
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} ../ [NC,OR]
RewriteCond %{QUERY_STRING} boot.ini [NC,OR]
#RewriteCond %{QUERY_STRING} tag= [NC,OR]
RewriteCond %{QUERY_STRING} ftp: [NC,OR]
RewriteCond %{QUERY_STRING} http: [NC,OR]
RewriteCond %{QUERY_STRING} https: [NC,OR]
RewriteCond %{QUERY_STRING} mosConfig [NC,OR]
# RewriteCond %{QUERY_STRING} ^.*([|]|(|)|<|>|'|"|;|?|*).* [NC,OR]
# RewriteCond %{QUERY_STRING} ^.*(%22|%27|%3C|%3E|%5C|%7B|%7C).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare|drop).* [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>
####################################################################################
# Datei zum Regeln von IP-Bereichen
Order deny,allow
Allow from all
# Sperre folgende IPs
#deny from 127.1.1.1
Geschrieben von: gehaxelt - 06-03-2012 05:36 PM
- Keine Antworten
Wenn man nicht möchte, das jeder an bestimmte Dateien gelangt, dann sollte man diese verschlüsseln.
TrueCrypt ist eine Open-Source Software, welche Container erstellen und verwalten kann. Diese können mit verschiedenen Algorithmen vom AES bis Twofish verschlüsselt werden.
Wie man dies macht, habe ich in einem Video gezeigt.
Daten über das Tutorial:
- Zeitaufwand: 15 Minuten
Aufbau:
Was ist ein Passwort?
Was ist Brute-Force?
Was ist ein sicheres Passwort?
Wie kann ich es mir merken?
1. Was ist ein Passwort?
Ein Passwort ist heutzutage kein Wort mehr, sondern eine Zeichenkette, welche es einem Benutzer ermöglicht sich gegenüber einem System zu authentifizieren und in Bereiche einzusehen, die von Außen ohne die entsprechenden Logindaten nicht möglich wäre.
Ein Passwort ist sozusagen ein Schlüssel, um ein Schloss zu öffnen und den verschlossenen Inhalt zu nutzen.
2. Was ist Brute-Force?
Brute-Force bedeutet so viel wie “Rohe Gewalt” und stellt eine Methode zum “Erraten” des Passwortes dar.
Dabei versucht der Angreifer das Passwort zu erraten, in dem er einen Login mit einer generierten Zeichenkette versucht. Dabei wird die Zeichenkette “iteriert”, d.h. die Kette fängt mit “a” an und wird danach auf “b” geändert. Das wiederholt sich fortlaufend auf mit der Länge:
a
b
aa
ab
ac
bbb
bbc
…
Dann gibt es noch die Möglichkeit einen Brute-Force über sogenannte Wortlisten durchzuführen. Dabei nutzt der Angreifer statt den generierten Passwörtern, Passwörter aus den Wortlisten, in denen häufige Passwörte, z.B. “test123″, “passwort”, abgespeichert sind, und so den Zeitaufwand für das Brute-Forcen zu verringern.
Wenn das System, z.B. ein Forum, sich nicht gegen solche Angriffe schützt, in dem z.B. die Anzahl der maximalen Loginversuche begrenzt wird, und bei Überschreitung dieser Anzahl der Zugriff auf die Seite gesperrt wird, kann der Angreifer sich “alle Zeit der Welt” nehmen und solange Passwörter ausprobieren, bis er das richtige gefunden hat.
3. Was ist ein sicheres Passwort?
Ein sicheres Passwort sollte möglichst zufällig gestaltet sein. Es sollten Buchstaben (Klein- und Großschreibung!), Zahlen & Sonderzeichen darin vorhanden sein, und das Passwort sollte eine Länge von 8+ Stellen besitzen. Das erhöht die Zeit, welche der Angreifer für einen Brute-Force benötigt, ungemein.
Nehmen wir mal an, man hält sich an die o.g. Regeln, und nutzt alle Zeichenkategorien aus dem ASCII-Zeichensatz. Demnach gäbe es 93 verschiedene Zeichen die man verwendet haben könnte (33:! bis 126: ~). Der Angreifer weiß nicht genau welche, und muss deswegen von allen ausgehen. Die Anzahl der möglichen Kombinationen ergibt sich aus:
Anzahl = Zeichenanzahl ^ Passwortlänge.
Bei unserem Beispiel mit einer Passwortlänge von 8 Zeichen entspricht das:
Anzahl = 93 ^ 8
Anzahl = 5.595.818.096.650.401 Möglichkeiten
Wenn der Angreifer es schafft, 1.000.000 Passwörter pro Sekunde zu testen, was bei einem Login auf ein Forum utopisch sein dürfte, dann würde die Person immer noch 5595818096 Sekunden brauchen, was ~ 177 Jahren entspricht.
Hier nochmal die wichtigsten Punkte aufgelistet:
-Großbuchstaben
-Kleinbuchstaben
-Zahlen
-Sonderzeichen
-Mindestens 8 Stellen
-Passwortwechsel alle x Wochen
-Den letzten Punkt habe ich noch nicht angesprochen, aber man sollte seine Passwörter alle x Wochen ändern, auch wenn man das ungern macht.
Ein Passwort ist nur dann sicher, wenn es nur im Gehirn geschrieben steht und nirgend woanders zu finden ist.
Auch sollte die Weitergabe des Passwortes an “angeblich” beste Freunde unterbleiben.
4. Wie kann ich es mir merken?
Wenn man nun für jeden Login ein anderes, komplexes Passwort nutzt, dann wird man irgendwann Probleme haben, sich alle Passwörter zu merken, und deswegen muss man zu kleinen Eselsbrücken greifen. Die Satz-Strategie hat sich am meisten bewährt.
Dabei denkt man sich einen Satz aus, und nimmt zum Beispiel alle Anfangs- oder Endbuchstaben der Wörter, und reiht diese aneinander.
Beispiel:
Satz:
=>I’am writing this tutorial for you, because you do not know, how to create secure passwords!
Zusammengefasst:
=> I’awtt4u,budnk,h2csp!
Man kann die Sätze immer auf die entsprechende Situation anpassen, zum Beispiel bei Shopping-Seiten:
Einführung in die Bash - Teil 4: Kommandosubstitution
Unter einer Kommandosubstitution versteht man die Ausgabe eines Programmes, die normalerweise auf die Standardausgabe (stdout) geleitet werden würde. Steht der Befehl jedoch zwischen zwei Backticks (`), wird dieser ausgeführt und kann innerhalb eines anderen Befehls genutzt werden.
Hier ein Beispiel:
Eingabe
Ausgabe
Erklärung
pwd
/root
Der Befehl pwd gibt das aktuelle Verzeichnis aus.
echo Wir sind im Verzeichnis `pwd`
Wir sind im Verzeichnis /root
Der Befehl innerhalb der Backticks wird zuerst ausgeführt und dann in den echo -Befehl eingesetzt.
echo Wir sind im Verzeichnis $(pwd)
Wir sind im Verzeichnis /root
Die ausführliche Version der Kommandosubstitution. Kein Unterschied zur Kurzversion. Jedoch mittlerweile üblicher
Geschrieben von: Florian Reith - 25-01-2012 10:09 AM
- Keine Antworten
Einführung in die Bash - Teil 3: Globbing
Die Bash bietet uns verschiedene Hilfsmittel um Dateinamen an ein Programm zu übergeben. Entweder man gibt eine vollständige Liste der entsprechenden Dateinamen an oder man verwendet Patterns (Suchmuster) um die entsprechenden Dateien automatisch zu ermitteln.
Die Bash generiert daraufhin eine Liste mit den passenden Dateinamen und übergibt diese an das Programm.
Hinweis: Bei versteckten Dateien (Dateiname beginnt mit einem Punkt) muss der führende Punkt explizit angegeben werden.
Metazeichen
Beschreibung
Beispiel
Mögliches Resultat
?
Genau ein Zeichen.
x?
x1, xa, xb, ...
*
Kein oder beliebig viele Zeichen.
x*
x, x1, xab, xabcdefg, ...
[abc] [a−z]
Ein Zeichen, welches innerhalb von [] steht.
x[yz]
xy, xz
[!abc] [!a−z]
Genau ein Zeichen, welches NICHT innerhalb von [] steht.
x[!yz]
xa, xb, xc, ...
~
Home-Verzeichnis des aktuellen Benutzers
~/Daten
/root/Daten
~Florian
Home-Verzeichnis des Benutzers "Florian"
~Florian/Daten
/home/Florian/Daten
{abc,def,...}
Liste der angegebenen Zeichenketten
ls *.{c,h,sh}
install.sh ips.c uninstall.sh webinstall.h
/
Verzeichnistrenner
-
-
Hinweis: Um Globbing zu unterbinden muss der Text in "" geschrieben werden.
Geschrieben von: Florian Reith - 24-01-2012 11:58 AM
- Keine Antworten
Einführung in die Bash - Teil 2: Standard Kanäle und Pipes
Standard Kanäle
Wie jede andere Shell auch, bringt die Bash drei Standard Kanäle zur Regulierung von Streams (Datenströmen) mit sich.
Man spricht hier von I/O bzw. Input/Output (Eingabe/Ausgabe).
stdin (Kanal 0) - der Eingabekanal (Standard-Input)
Dieser Kanal empfängt Daten oder Eingaben und reicht sie an das Programm weiter.
stdout (Kanal 1) der Ausgabekanal (Standard-Output)
Dieser Kanal gibt die Daten aus, die ein Prozess zurückgibt.
stderr (Kanal 2) der Fehlerausgabekanal (Standard-Error)
Produziert ein Prozess einen Fehler, so wird dieser auf diesem Kanal ausgegeben.
Umleitung der Standard Kanäle (I/O Redirect)
Die eben beschriebenen Standard Kanäle lassen sich nicht nur ausgeben sondern alternativ auch aus Dateien heraus bzw. in Dateien hinein umleiten (lesen/schreiben).
Beispiel 1 - Umleiten von stdout in eine Datei (überschreiben)
Die Dateien und Ordner in einem Verzeichnis sollen aufgelistet und das Ergebnis in die Datei "liste.txt" gespeichert werden.
Kommando:
Code:
ls 1> liste.txt
Beschreibung:
Der Kanal 1 (Standard Output bzw stdout) des Programms ls wird in die Datei liste.txt umgeleitet, welche vor dem eigentlichen Umleiten erstellt wird.
Hinweis: Existiert diese Datei, wird sie überschrieben!
Beispiel 2 - Umleiten von stdout in eine Datei (anhängen)
Die Dateien und Ordner in einem Verzeichnis sollen aufgelistet und das Ergebnis an die Datei "liste.txt" angehängt werden.
Kommando:
Code:
ls 1>> liste.txt
Beschreibung:
Der Kanal 1 (Standard Output bzw. stdout) des Programms ls wird an die Datei liste.txt angehängt. Die Datei wird dementsprechend nicht überschrieben.
Beispiel 3 - Umleiten von stderr in eine Datei (anhängen)
Die Dateien und Ordner in einem nicht existierenden Verzeichnis sollen aufgelistet und die Fehlermeldung an den Error-Log "error.log" angehängt werden.
Kommando:
Code:
ls abcd 2>> error.log
Beschreibung:
Das Verzeichnis "abcd" existiert nicht und der Fehler wird über Fehlerkanal 2 (Standard Error bzw. stderr) des Programms ls an die Datei error.log angehängt. Die Datei wird wie auch in den vorherigen Beispielen nicht überschrieben.
Tipp: Lässt man die 1 bei der Ausgabeumlenkung (>) weg, so benutzt die Bash automatisch Kanal 1 (Output).
Beispiel 4 - Umleiten von mehreren Kanälen
Die Dateien und Ordner in einem dem Verzeichnis abcd werden aufgelistet und in die Datei liste.txt gespeichert. Existiert die der Ordner abcd nicht, wird der Fehler in der Datei error.log vermerkt.
Kommando:
Code:
ls abcd > liste.txt 2> error.log
Beschreibung:
Fall 1: Das Verzeichnis "abcd" existiert und die Dateiliste wird in die Datei liste.txt geleitet.
Fall 2: Das Verzeichnis "abcd" existiert nicht und der Fehler wird in die Datei error.log geleitet.
Tipp: Die Reihenfolge des Befehls ist von Bedeutung, existierende Dateien werden überschrieben.
Beispiel 5 - Kanäle ineinander leiten
Die Dateien und Ordner in einem dem Verzeichnis abcd werden aufgelistet und in die Datei full.log gespeichert. Fehler landen ebenfalls in der full.log
Kommando:
Code:
ls abcd >full.log 2>&1
Beschreibung:
Alles Ausgaben aus Kanal 1 und 2 werden in die gleiche Datei geleitet (full.log)
Tipp: Die Reihenfolge des Befehls ist von Bedeutung, existierende Dateien werden überschrieben.
Geschrieben von: Florian Reith - 24-01-2012 11:57 AM
- Keine Antworten
Einführung in die Bash - Teil 1: Definition
Die Bash (Bourne-again shell) ist eine Erweiterung der Unix-Shell und bietet dem Benutzer auf Unix und Linux Systemen eine Schnittstelle zum Kernel (Das Herz des Betriebssystems).
Da man via Bash Befehle eingeben und ausführen kann, spricht man hier von einem Kommandozeileninterpreter bzw. CLI (command-line interpreter ).
Mit der Bash ist es außerdem möglich Scripte bzw. Scriptsprachen zu interpretieren und auszuführen, so lassen sich kleine bis komplexe Aufgaben (teil-)automatisieren.