Andrea Beggi

Vi siete presi troppo sul serio.

Scalare i privilegi di un utente WordPress tramite script PHP

A T T E N Z I O N E ! Questo post ha piu' di sei mesi. Le informazioni contenute potrebbero non essere aggiornate.

Questo non è un post che suggerisce metodi per violare la sicurezza di un blog, ma per rimediare ad un inconveniente che ho incontrato qualche volta. In particolare mi è successo che i privilegi di un utente si fossero in qualche modo “corrotti” e non fosse più possibile accedere alle funzioni di amministrazione.

Lo scenario è il seguente. Devo fare degli interventi di manutenzione su un blog WordPress che ha qualche problema di funzionamento. Le cose che ho a disposizione sono:

  • Credenziali per accedere via FTP.
  • Credenziali di un’utenza WordPress con privilegi normali.

Come prima cosa accedo al blog con l’account e visualizzo la dashboard (bacheca).

Poi creo un file che chiamo, per esempio, get_user_info.php, con il seguente contenuto:

<?php global $current_user;
      require('wp-blog-header.php');
      get_currentuserinfo();

      echo 'Username: ' . $current_user->user_login . "\n";
      echo '</br>';
      echo 'User email: ' . $current_user->user_email . "\n";
      echo '</br>';
      echo 'User first name: ' . $current_user->user_firstname . "\n";
      echo '</br>';
      echo 'User last name: ' . $current_user->user_lastname . "\n";
      echo '</br>';
      echo 'User display name: ' . $current_user->display_name . "\n";
      echo '</br>';
      echo 'User ID: ' . $current_user->ID . "\n";

?>

e lo copio via FTP nella root che contiene il blog sul server http.

Lo eseguo inserendo nella barra indirizzi del browser:

http://www.dominio.com/get_user_info.php

La pagina dà alcune informazioni; la più importante è lo user ID, che mi serve nello step successivo.

Creo un altro file, per esempio update_user_role.php, con il seguente contenuto:

<?php
require( './wp-load.php' );

 $user_id = inserire_qui_user_ID_corretto;

 $new_role = 'administrator';
 wp_update_user( array ('ID' => $user_id, 'role' => $new_role ) ) ;
 echo 'Fatto.';

?>

avendo cura di inserire lo user ID che ho rilevato poco fa nella riga relativa. Copio anche questo sul server via FTP e lo eseguo con le stesse modalità del precedente:

http://www.dominio.com/update_user_role.php

Ritorno alla bacheca del blog e faccio un refresh della pagina.
Missione compiuta.
(Devo solo ricordarmi di cancellare dal server i file che ho appena utilizzato).

 

7 Commenti

Giuseppe | #

Non è possibile fare lo stesso con un solo file (il secondo) dove al posto dell’hardcoding dell’user id uso get_user_by( ‘login’, il_login_che_conosco) per recuperare l’utente e quindi il suo ID?

Andrea | #

Si, certo! Ma non sono bravo a scrivere codice….. 🙂

Gianluca | #

Ciao, bel blog.
Finalmente una persona chiara e piacevole da leggere.
Per il primo file con le info dell’utente, posso suggerire anche:
echo “”;
print_r($current_user);
echo “”;
Così eviti di scrivere tutte le chiamate alla classe utente.

Ciao!

Gianluca | #

Wops, nel commento precedente sono stati rimossi i tag html.
echo “”;
print_r($current_user);
echo “”;

Ovviamente senza spazi.

Riciao.