Realizzazione e Creazione Siti Wordpress

Lostpassword modifiche di sicurezza pagina login di wordpress.



(Aggiornato il 30/08/2014)
Con questo articolo spiego come apportare alcune modifiche di sicurezza per la pagina di login di wordpress, in particolar modo per la funzione “lostpassword” (È stata persa la password?).

Queste modifiche di sicurezza su questa specifica funzione di default della pagina di login di wordpress impediranno ad un malintenzionato che abbia intenzione di eseguire un hacking al sito di usufruirne per reperire dati sensibili come password, username e indirizzo email amministratore.


 

LA FUNZIONE LOSTPASSWORD:

Questa funzione è molto utilizzata quando viene sfruttata una tecnica di hacking tramite SQL injection che, attraverso delle vulnerabilità e utilizzando degli exploit appositi, permette di penetrare all’interno del database MySQL utilizzato da wordpress.

Con la funzione lostpassword viene generata una chiave che permette tramite un link inviato alla email dell’amministratore del sito di resettare la password esistente, il problema sorge quando avendo ottenuto l’accesso al database si intercetta la chiave generata per resettare la password e utilizzata tramite link diretto senza aver bisogno di cliccare sul link che l’amministratore ha ricevuto tramite email.

La funzione lostpassword se disponibile, può essere utilizzata da chiunque ed è la più pericolosa, ecco perchè dovrebbe essere il primo punto da modificare per rendere più sicura la pagina di login.

Ricordate che dopo aver eliminato e reso inutilizzabile questa funzione in caso vi dimentichiate la password sarà possibile resettarla solo tramite database, oppure in alternativa si potrebbero ripristinare i file originali giusto il tempo che serve per richiedere una nuova password.

Un’altro fattore molto importante da considerare, è che eventualmente chi non riuscisse ad eseguire un hacking direttamente su database potrebbe pensare di reperire la password della vostra casella email, in questo modo avrebbe la possibilità di visualizzare e cliccare sul link apposito per resettare la password di accesso al pannello di controllo.

Link funzione lostpassword


COME ELIMINARE FUNZIONE LOSTPASSWORD:

Per eliminare la funzione lostpassword esistono diversi modi, aggiungere un filtro tramite codice PHP nel file function.php, oppure anche utilizzare il CSS per nascondere la funzione, metodi validi a parte l’utilizzo del CSS, ma visto che stiamo eseguendo questa operazione per rendere la pagina di login più sicura, la miglior cosa è eliminare il codice che genera la funzione.

Per farlo scaricate tramite FTP il file wp-login.php presente all’interno della root della vostra installazione di wordpress…

Aprite il file con un editor di testo e con la funzione “Trova”…

cercate il codice seguente:

case 'lostpassword'

Da quel codice eliminate tutto il codice seguente fino a prima del simbolo:

?>

Segue il codice completo da eliminare:

case 'lostpassword' :
case 'retrievepassword' :

	if ( $http_post ) {
		$errors = retrieve_password();
		if ( !is_wp_error($errors) ) {
			$redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : 'wp-login.php?checkemail=confirm';
			wp_safe_redirect( $redirect_to );
			exit();
		}
	}

	if ( isset($_GET['error']) && 'invalidkey' == $_GET['error'] ) $errors->add('invalidkey', __('Sorry, that key does not appear to be valid.'));
	$redirect_to = apply_filters( 'lostpassword_redirect', !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '' );

	do_action('lost_password');
	login_header(__('Lost Password'), '<p class="message">' . __('Please enter your username or email address. You will receive a link to create a new password via email.') . '</p>', $errors);

	$user_login = isset($_POST['user_login']) ? stripslashes($_POST['user_login']) : '';</pre>
<strong>Cercate il codice:</strong>
<pre class="brush: php; gutter: false; first-line: 1; highlight: []; html-script: false"><form name="lostpasswordform"</pre>
<strong>Eliminate tutto il codice fino al tag di chiusura:</strong>
<pre class="brush: php; gutter: false; first-line: 1; highlight: []; html-script: false"></form></pre>
<strong>Segue il codice completo da eliminare:</strong>
<pre class="brush: php; gutter: false; first-line: 1; highlight: []; html-script: false"><form name="lostpasswordform" id="lostpasswordform" action="<?php echo esc_url( site_url( 'wp-login.php?action=lostpassword', 'login_post' ) ); ?>" method="post">
	<p>
		<label for="user_login" ><?php _e('Username or E-mail:') ?><br />
		<input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr($user_login); ?>" size="20" /></label>
	</p>
<?php do_action('lostpassword_form'); ?>
	<input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" />
	<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e('Get New Password'); ?>" /></p>
</form>



Cercate il codice:

case 'resetpass'

in questo caso eliminate il codice da 4 righe più sopra, dal tag di apertura:

<?php

fino al tag di chiusura:

</form>

Segue il codice completo da eliminare:

<?php
login_footer('user_login');
break;

case 'resetpass' :
case 'rp' :
	$user = check_password_reset_key($_GET['key'], $_GET['login']);

	if ( is_wp_error($user) ) {
		wp_redirect( site_url('wp-login.php?action=lostpassword&error=invalidkey') );
		exit;
	}

	$errors = new WP_Error();

	if ( isset($_POST['pass1']) && $_POST['pass1'] != $_POST['pass2'] )
		$errors->add( 'password_reset_mismatch', __( 'The passwords do not match.' ) );

	do_action( 'validate_password_reset', $errors, $user );

	if ( ( ! $errors->get_error_code() ) && isset( $_POST['pass1'] ) && !empty( $_POST['pass1'] ) ) {
		reset_password($user, $_POST['pass1']);
		login_header( __( 'Password Reset' ), '<p class="message reset-pass">' . __( 'Your password has been reset.' ) . ' <a href="' . esc_url( wp_login_url() ) . '">' . __( 'Log in' ) . '</a></p>' );
		login_footer();
		exit;
	}

	wp_enqueue_script('utils');
	wp_enqueue_script('user-profile');

	login_header(__('Reset Password'), '<p class="message reset-pass">' . __('Enter your new password below.') . '</p>', $errors );

?>
<form name="resetpassform" id="resetpassform" action="<?php echo esc_url( site_url( 'wp-login.php?action=resetpass&key=' . urlencode( $_GET['key'] ) . '&login=' . urlencode( $_GET['login'] ), 'login_post' ) ); ?>" method="post">
	<input type="hidden" id="user_login" value="<?php echo esc_attr( $_GET['login'] ); ?>" autocomplete="off" />

	<p>
		<label for="pass1"><?php _e('New password') ?><br />
		<input type="password" name="pass1" id="pass1" class="input" size="20" value="" autocomplete="off" /></label>
	</p>
	<p>
		<label for="pass2"><?php _e('Confirm new password') ?><br />
		<input type="password" name="pass2" id="pass2" class="input" size="20" value="" autocomplete="off" /></label>
	</p>

	<div id="pass-strength-result" class="hide-if-no-js"><?php _e('Strength indicator'); ?></div>
	<p class="description indicator-hint"><?php _e('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ &amp; ).'); ?></p>

	<br class="clear" />
	<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e('Reset Password'); ?>" /></p>



Cercate il codice:

<p id="nav">

eliminate il codice fino al tag di chiusura:

</p>

Segue il codice completo da eliminare:

<p id="nav">
<a href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e( 'Log in' ); ?></a> |
<a href="<?php echo esc_url( wp_lostpassword_url() ); ?>" title="<?php esc_attr_e( 'Password Lost and Found' ) ?>"><?php _e( 'Lost your password?' ); ?></a>
</p>



Cercate il codice:

<a href="<?php echo esc_url( wp_lostpassword_url() );

Eliminate il codice fino al SECONDO tag di chiusura:

</a>

Segue il codice completo da eliminare:

<a href="<?php echo esc_url( wp_lostpassword_url() ); ?>" title="<?php esc_attr_e( 'Password Lost and Found' ); ?>"><?php _e( 'Lost your password?' ); ?></a>
<?php else : ?>
<a href="<?php echo esc_url( wp_lostpassword_url() ); ?>" title="<?php esc_attr_e( 'Password Lost and Found' ); ?>"><?php _e( 'Lost your password?' ); ?></a>

Eliminato tutto il codice, salvate il file e ricaricatelo tramite FTP sovrascrivendo il vecchio, recatevi alla pagina di accesso al pannello di controllo e la funzione lostpassword non sarà più disponibile.

Eliminato link lostpassword


ELIMINARE FUNZIONE LOSTPASSWORD 2:

Successivamente provate ad inserire il vostro username e una password DIVERSA da quella impostata e cliccate su “collegati”…

Noterete che avendo inserito una password errata wordpress vi restituirà un ERRORE e oltre che specificare l’username che utilizzate per eseguire l’accesso renderà ancora disponibile un link per resettare la password. (segue foto)

Secondo link lostpassword



Per eliminare anche questo link a “lostpassword” dovremo agire sul file user.php

Quindi sempre tramite FTP scaricate il file user.php che si trova all’interno della cartella dell’installazione di wordpress wp-includes


Cercate il codice:

%1$s

Eliminate il codice fino al primo punto di domanda:

?

facendo attenzione a non eliminare le parole:is incorrect.

Segue il codice completo da eliminare:

><strong>%1$s</strong> <a href="%2$s" title="Password Lost and Found">Lost your password</a>?

Dopo aver eliminato il codice, salvate il file e ricaricatelo via FTP sovrascivendo quello esistente.

Come da foto che segue, la segnalazione di errore non fornirà più nessuna informazione e il link lostpassword verrà rimosso.

Eliminato secondo link lostpassword


PLUGIN PER PERSONALIZZARE PAGINA LOGIN:



Per concludere, se trovate queste modifiche troppo complesse oppure non siete molto pratici vi segnalo un ottimo plugin per personalizzare la pagina login di wordpress che vi aiuterà ad impostare queste funzioni semplicemente in due click.

plugin login ninja


Il plugin professionale si chiama Login Ninja e costa solo 15 dollari (circa 11 euro) che fornisce anche la possibilità di tenere traccia di tutti i log effettuati.

Altre funzioni disponibili del plugin:

1 Protezione Login.

2 Inserimento codice verifica captche.

3 Protezione di attacchi Brute Force.

4 Ban di IP che sfruttano Attacco di Brute Force.

5 Log dettagliato di tutte le attività di accesso.

6 Ricezione notifiche e-mail per tutti i login eseguiti.

7 Reindirizzamento utenti in base ai ruoli e nomi utente.

8 Blocco spam bot di registrazione.

Se avete bisogno di aiuto o ulteriori chiarimenti inviate un commento e cercherò di rispondere quanto prima.

Articoli interessanti:

Strumenti per analizzare un sito internet
Creare un’area protetta e riservata tramite file htaccess.
Query sql per pulire e ottimizzare database wordpress
Hosting per wordpress: quale scegliere
Sicurezza wordpress: Protezioni e impostazioni


Vietata la Riproduzione.
Protezione Copyright

Lostpassword: modifiche di sicurezza pagina login di wordpress ultima modifica: 2013-04-19T22:09:27+00:00 da Admin-Fausto

Lascia un commento