1. WordPress runterladen und auf euren FTP hochladen ( zB. FileZilla )
Englisch ( http://wordpress.org/download/ )
Deutsch ( http://de.wordpress.org/ )
2. Config.php konfigurieren
Schreibt in die Config.php eure Datenbank Informationen rein, sollte so aussehen :
define('DB_NAME', 'Datenbankname'); define('DB_USER', 'Datenbankbenutzer'); define('DB_PASSWORD', 'Datenbankpasswort'); define('DB_HOST', 'localhost'); define('DB_CHARSET', 'utf8'); define('DB_COLLATE', '');
Außerdem ist es empfehlenswert einen anderen Präfix als wp_ zu benutzen
$table_prefix = 'myblog123_';
Disallow File Edit solltet ihr erst verbieten wenn ihr alle Einstellungen beendet habt.
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
define('WP_DEBUG', false);
Lasst euch Schlüssel generieren und fügt diese ebenfalls hinzu https://api.wordpress.org/secret-key/1.1/
zum Beispiel : ohne „// “ … Bitte generiert euch „eigene“
// define('AUTH_KEY', 'Y5x@O^>N#A(Oa__aNW3-[2Z%3(4A> _OHx,3So%N=AzZ[O+1w&gBQ v$@pAn/7|['); // define('SECURE_AUTH_KEY', '2:(WG|>])]7.vT$O$u|?hh| D0Q8|nH%QL=9bS,6@uw_5^d$pr-1n5(/+^|y.R;U'); // define('LOGGED_IN_KEY', 'M`ZfZZ}5UqIDT8{_Oqa x$)XK{S)dQq L=B*-!]3B-i`K}W9NT52fJ68G?QZ$E2N'); // define('NONCE_KEY', ',OgC~-2U/kcq[7s_OqRM]469V5In{/xo]|mI`fOSoO_ 3c|s(na7ScJeixx/Fxul');
3. WordPress installieren
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.
http://wordpress.org/extend/plugins/remove-ip/ Emails und User Agent werden gespeichert / IP’s werden ebenfalls als 127.0.0.1 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
WordPress File Monitor http://wordpress.org/extend/plugins/wordpress-file-monitor
WordPress Firewall 2 http://wordpress.org/extend/plugins/wordpress-firewall-2/
Secure WordPress by WebsiteDefender http://www.websitedefender.com/secure-wordpress-plugin/
nähere Informationen zu den letzten 3 Plugins : http://blog.yakuza112.org/?p=6352
4.1 Error, FTP Zugangsdaten werden benötigt ?!
Falls das Installieren der Plugins deshalb fehlschlägt, habt ihr 2 Möglichkeiten.
1. Ihr bearbeitet eure Config.php wie folgt :
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)
Wenn ihr lieber informiert werden wollt, benutzt einfach das Plugin von https://websitedefender.com.
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
function no_generator() { return ''; } add_filter( 'the_generator', 'no_generator' );
Entfernen der WP – Login / Error Messages
function explain_less_login_issues(){ return 'ERROR: Entered credentials are incorrect.';} add_filter( 'login_errors', 'explain_less_login_issues' );
7. Entfernt unsichere Dateien
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.
Update 1
htaccess Datei :
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / #################################################################################### # www2nowww RewriteCond %{HTTP_HOST} ^([^.]+)\.blog.yakuza112\.org$ [NC] RewriteRule ^(.*)$ http://blog.yakuza112.org/$1 [R=301,L] #################################################################################### # Hinzufuegn von Slash RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$ RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> #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> # CHARACTER STRINGS <IfModule mod_alias.c> # BASIC CHARACTERS RedirectMatch 403 , RedirectMatch 403 : RedirectMatch 403 ; # RedirectMatch 403 = RedirectMatch 403 @ RedirectMatch 403 [ RedirectMatch 403 ] RedirectMatch 403 ^ RedirectMatch 403 ` RedirectMatch 403 { RedirectMatch 403 } RedirectMatch 403 ~ RedirectMatch 403 " RedirectMatch 403 $ RedirectMatch 403 < RedirectMatch 403 > RedirectMatch 403 | RedirectMatch 403 .. # RedirectMatch 403 // RedirectMatch 403 %0 RedirectMatch 403 %A RedirectMatch 403 %B RedirectMatch 403 %C RedirectMatch 403 %D RedirectMatch 403 %E RedirectMatch 403 %F RedirectMatch 403 %22 RedirectMatch 403 %27 RedirectMatch 403 %28 RedirectMatch 403 %29 RedirectMatch 403 %3C RedirectMatch 403 %3E # RedirectMatch 403 %3F RedirectMatch 403 %5B RedirectMatch 403 %5C RedirectMatch 403 %5D RedirectMatch 403 %7B RedirectMatch 403 %7C RedirectMatch 403 %7D # COMMON PATTERNS Redirectmatch 403 _vpi RedirectMatch 403 .inc Redirectmatch 403 xAou6 Redirectmatch 403 db_name Redirectmatch 403 select( Redirectmatch 403 convert( Redirectmatch 403 /query/ RedirectMatch 403 ImpEvData Redirectmatch 403 .XMLHTTP Redirectmatch 403 proxydeny RedirectMatch 403 function. Redirectmatch 403 remoteFile Redirectmatch 403 servername Redirectmatch 403 &rptmode= Redirectmatch 403 sys_cpanel RedirectMatch 403 db_connect RedirectMatch 403 doeditconfig RedirectMatch 403 check_proxy Redirectmatch 403 system_user Redirectmatch 403 /(null)/ Redirectmatch 403 clientrequest Redirectmatch 403 option_value RedirectMatch 403 ref.outcontrol # SPECIFIC EXPLOITS RedirectMatch 403 errors. # RedirectMatch 403 config. RedirectMatch 403 include. RedirectMatch 403 display. RedirectMatch 403 register. Redirectmatch 403 password. RedirectMatch 403 maincore. RedirectMatch 403 authorize. Redirectmatch 403 macromates. RedirectMatch 403 head_auth. RedirectMatch 403 submit_links. RedirectMatch 403 change_action. Redirectmatch 403 com_facileforms/ RedirectMatch 403 admin_db_utilities. RedirectMatch 403 admin.webring.docs. Redirectmatch 403 Table/Latest/index. </IfModule> #################################################################################### # Datei zum Regeln von IP-Bereichen Order deny,allow Allow from all # Sperre folgende IPs #deny from 127.1.1.1 ############################# Update ############################################### <FilesMatch "(.htaccess|.htpasswd|wp-config.php|liesmich.html|readme.html)"> order deny,allow deny from all </FilesMatch>
http://nopaste.me/paste/18393479664f5a20e30db40
[php]< ?php printf (__(‚<h2>TEXT:.<span class=“keyword“> %s </span> TEXTTEXT!.‘, ‚altop‘), htmlentities(get_search_query()) ); ?>
„über htmlentities() wird die Eingabe escaped und somit wird die XSS nicht lauffähig.“[/php]
weiteres zum Thema : WordPress Hardening: Mehr Sicherheit gegen Angriffe aus dem Netz
Update:
############ Disable admin access for users ############ add_action('admin_init', 'no_more_dashboard'); function no_more_dashboard() { if (!current_user_can('manage_options') && $_SERVER['DOING_AJAX'] != '/wp-admin/admin-ajax.php') { wp_redirect(site_url()); exit; } }
Update Oktober 2019:
function remove_feed_generator() { return ''; } add_filter('the_generator', 'remove_feed_generator');
In die Funktcions.php eures Themes einfügen, damit registrierte Benutzer nicht mehr das Dashboard (wp-admin) sehen können
Quelle : http://blog.softlayer.com
Ich hoffe ich habe nix vergessen, falls doch hinterlasst mir doch einen Kommentar ;)
© 2008 ¥akuza112 Inc.
11 Kommentare
Yakuza112
„Gut gemacht ! Verstehe ich das richtig, dass mit dem Ändern vom \“WP_\“-Präfix die Verzeichnissnamen fürs (Admin)Backend geändert werden, also aus wp_admin wird myblog2424_admin ? PDF wurde jedenfalls gespeichert, immer wieder gut zu Auffrischung sowas. Besten Dank“
sry iwie hat die Firewall das geblockt .. hatte ne falsche einstellung aktiviert fail :(
nein es geht um den Datenbank Präfix Zb
wp_commentmeta
wp_comments
ist der standart präfix, diesen sollte man ändern ;)
geodreieck
Ah ok, danke.
4c1d
Super Tutorial.
Yakuza112
thx <3
Yakuza112
Update ::
falls ihr bei wp-includes/rss-functions.php bzw wp-includes/functions.php einen Fehler bekommt zB :
fügt in euer Home Verzeichniss ( evtl auch in wp-includes) eine .htaccess mit diesem Inhalt ein :
oder ihr nehmt einfach die oben genommene htaccess Datei
¥akuza112
Video Tut Reihe von gehaxelt.in : http://www.youtube.com/watch?v=TOusaaaA_XA&feature=channel
¥akuza112
Updated : htaccess added : PERISHABLE PRESS 4G BLACKLIST
¥akuza112
Weitere Möglichkeit :
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . 404.php/ [L]
404.php
< ?php header("Status: 301 Moved Permanently"); header("Location:http://blog.yakuza112.org/"); exit; ?>
Somit wird jede Anfrage auf ein Verzeichniss bzw einer Datei die nicht vorhanden ist umgeleitet :
zB http://blog.yakuza112.org/sadökljsaökldöasjdösajdo8021890e2908zd8sad()&„()§&)=“/?§
¥akuza112
Update : Disable admin access for users // Thanks @ Softlayer.com
¥akuza112
Update : Source Codes für BBcode und HTML, zum direkten einfügen in Blogs, Foren etc hinzugefügt
BB Code für Vbulletin : http://paste.yakuza112.org/HOZhfKLX
HTML : http://paste.yakuza112.org/hYKIWZym
¥akuza112
Updated .htaccess rules :
http://pastebin.com/KqxBT1Ht
https://nopaste.xyz/?24d979314e131850#ZpV07xsmUFNynW35XR4mBxdKYLG2OsDIe+uKW49CiMY= (Backup)