Bekijk Volledige Versie : Captcha code voor Wordpress admin login
Op de servers waarop voornamelijk Wordpress staat zijn de brute force aanvallen op de WP admin login pagina verantwoordelijk voor een groot deel van de serverload en levert zo nu en dan ook problemen op.
Nu vraag ik mijn klanten zodra er problemen zijn om in de .htaccess file de wp-admin.php pagina te voorzien van een wachtwoord. Werk goed maar veel klanten hebben onvoldoende technische kennis of er gewoon geen zin in. Het zou mooier zijn als ik het voor alle klanten in één keer kan regelen.
TransIP heeft een veel handigere oplossing gemaakt die ze bij alle klanten hebben doorgevoerd. Zodra je naar de wp-login.php pagina gaat word je doorgestuurd naar een pagina waarop je een captcha code moet overtypen. de URL ziet er dan als volgt uit: http://mijndomeinnaam.nl/__customer_validation/index.php?ref=mijndomeinnaam.nl&uri=/wp-login.php. Hoe hebben ze dit gemaakt?
Zie de afbeelding voor een screenshot van de pagina.
mod_rewrite, een alias en een cookie, gok ik.
Yourwebhoster
23/09/13, 08:16
mod_rewrite, een alias en een cookie, gok ik.
Dan ben je er nog niet. mod_rewrite is niet eens nodig.
Kijk eens naar de PHP feature auto_prepend_file. Doe dit alleen voor bepaalde files en check in het PHP bestand dat je prepend of de cookie die de gebruiker heeft ook gemaakt is met de CAPTCHA login.
Als je klanten WP kunnen installeren en verder invullen kunnen ze toch zeker ook wel een .htaccess file plaatsen........ zet op je helpdesk hoe ze dat simpel kunnen doen en voila.
Yourwebhoster
23/09/13, 08:32
Als je klanten WP kunnen installeren en verder invullen kunnen ze toch zeker ook wel een .htaccess file plaatsen........ zet op je helpdesk hoe ze dat simpel kunnen doen en voila.
Behalve dat het als gevolg kan hebben dat een WordPress installatie misbruikt kan worden geeft het ook een hoge server belasting.
Het probleem met auto_prepend, 404's geven in wordpress (die ook dynamisch zijn) en nog wat van dat soort oplossingen is dat ze wel werken maar nog te zwaar zijn. Als je echt de pineut bent krijg je tienduizenden requests achter elkaar en krijg je het moeilijk. Die htaccess iplimit's of passwords (afhankelijk van of het een eigen of shared server is) doen hun werk goed. Het probleem is alleen wel dat er toch mensen zijn die er niet blij mee zijn. Een echte goede oplossing heb ik echter nog niet gevonden.
Mod_security2 kan van alles zoals blokkeren na X verzoeken, maar ip's worden nauwelijks vaker gebruikt waardoor dat moeilijk te pakken is zonder goede bezoekers uit te sluiten.
Kay van Aarssen
23/09/13, 19:42
Misschien dat BruteProtect installeren helpt. Is een gratis plugin en je kunt gratis een API KEY aanvragen. En anders de plugin Limit Failed Login Attempts.
Dan ben je er nog niet. mod_rewrite is niet eens nodig.
Kijk eens naar de PHP feature auto_prepend_file. Doe dit alleen voor bepaalde files en check in het PHP bestand dat je prepend of de cookie die de gebruiker heeft ook gemaakt is met de CAPTCHA login.
Dit was wat het eerste bij mij op kwam. Er zullen nog 100 wegen naar Rome zijn. De ene wat sneller/veiliger dan de ander. Niet direct wat er gevraagd wordt wat betreft de redirect, maar wel wat tools die je kunnen helpen met het filteren.
iptables (niet zo effectief als de string wijzigt..)
/sbin/iptables -A INPUT -p tcp –dport 80 -m string –string “Log+In&testcookie=1″ –algo kmp -j DROP
of met rate limiting.
/sbin/iptables -A INPUT -d 10.0.0.1/32 -i eth0 -p tcp -m tcp --dport 80 -m string --string "/wp-login.php" --algo bm --to 64 -m recent --set --name filter_10.0.0.1_80 --rsource
/sbin/iptables -A INPUT -d 10.0.0.1/32 -i eth0 -p tcp -m tcp --dport 80 -m string --string "/wp-login.php" --algo bm --to 64 -m recent --update --seconds 120 --hitcount 3 --rttl --name filter_10.0.0.1_80 --rsource -j DROP
of dus mod security:
<LocationMatch “/wp-login.php”>
SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog,id:313371
SecAction “phase:5,deprecatevar:ip.counter=2/30,pass,nolog,id:313372″
SecRule IP:COUNTER “@gt 1″ “phase:2,pause:300,deny,status:406,setenv:RATELI MITED,skip:1,nolog,id:313373″
SecAction “phase:2,pass,setvar:ip.counter=+1,nolog,id:3133 74″
</LocationMatch>
Maar goed, zo zijn er nog meer natuurlijk.