Proteggere WordPress da richieste URL maligne

Post aggiornato il 30 dicembre @ 19:33

Leggo e rimbalzo ai lettori italiani il post di Jeff Starr su come proteggere WordPress da richieste URL pericolose come quelle che, vi ricorderete, a settembre scorso posero le installazioni non aggiornate di WordPress sotto attacco. Quegli indirizzi, spesso molto lunghi, contenevano parole come eval e base64_decode. Con quattro righe di codice, però possiamo impedire richieste di indirizzi che abbiano queste caratteristiche.

Copiate queste righe:

<?php 
/* 
Plugin Name: Block Bad Queries
Plugin URI: http://perishablepress.com/press/2009/12/22/protect-wordpress-against-malicious-url-requests/
Description: Protect WordPress Against Malicious URL Requests
Author URI: http://perishablepress.com/
Author: Perishable Press
Version: 1.0
*/
global $user_ID; if($user_ID) {
 if(!current_user_can('level_10')) {
  if (strlen($_SERVER['REQUEST_URI']) > 255 || 
   strpos($_SERVER['REQUEST_URI'], "eval(") || 
   strpos($_SERVER['REQUEST_URI'], "CONCAT") || 
   strpos($_SERVER['REQUEST_URI'], "UNION+SELECT") || 
   strpos($_SERVER['REQUEST_URI'], "base64")) {
    @header("HTTP/1.1 414 Request-URI Too Long");
    @header("Status: 414 Request-URI Too Long");
    @header("Connection: Close");
    @exit;
  }
 }
} ?>

incollatele in un file con nome block-bad-queries.php, uploadatelo nella directory wp-content/plugins e attivate il plugin. Da questo momento le richieste di indirizzi che

  • siano più lunghe di 255 caratteri
  • o che contengano la parola eval(
  • o che contengano la parola base64
  • o che facciano altre operazioni non consentite come concat e union+select

non verranno soddisfatte. Ho aggiunto anche una condizione iniziale per permettere all’amministratore del sistema di essere escluso da quelle regole: può succedere, infatti, che una operazione amministrativa come la modifica di massa di più post generi URL lunghe, rendendo impossibile la modifica.

Questo, comunque, non vi esonera dall’impegno di aggiornare la vostra copia di WordPress. :-)