Cách đơn giản để lấy lại mật khẩu quản trị viên

reset admin password
Xem trực tiếp

Cảnh báo 

  1. Yêu cầu bạn phải biết tên người dùng quản trị viên.
  2. Nó cập nhật mật khẩu quản trị viên và gửi email đến địa chỉ email của quản trị viên. (nếu đã cài đặt SMTP)
  3. Nếu bạn không nhận được email, mật khẩu vẫn sẽ bị thay đổi.
  4. Bạn không cần phải đăng nhập để sử dụng nó. Nếu bạn có thể đăng nhập, thì đã không cần tập lệnh này.
  5. Đặt nó vào thư mục gốc của cài đặt WordPress. Không tải nó lên thư mục WordPress Plugins của bạn.
  6. Hãy xóa tập lệnh khi bạn thực hiện xong vì lý do bảo mật.

Hướng dẫn sử dụng 

  1. Lưu tập lệnh bên dưới thành một tệp có tên emergency.php vào thư mục gốc của cài đặt WordPress (cùng thư mục chứa wp-config.php).
  2. Trong trình duyệt của bạn, hãy mở http://example.com/emergency.php
  3. Theo hướng dẫn, nhập tên người dùng quản trị (thường là admin) và mật khẩu mới, sau đó nhấp vào Update Options . Một thông báo sẽ hiển thị ghi chú mật khẩu đã thay đổi. Một email sẽ được gửi đến quản trị viên blog với thông tin mật khẩu đã thay đổi.
  4. Xóa emergency.php khỏi máy chủ của bạn khi bạn hoàn tất. Không để nó trên máy chủ của bạn vì người khác có thể sử dụng nó để thay đổi mật khẩu của bạn.
<?php
/*
	This program is free software; you can redistribute it and/or modify
    	it under the terms of the GNU General Public License as published by
    	the Free Software Foundation; either version 2 of the License, or
    	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
    	but WITHOUT ANY WARRANTY; without even the implied warranty of
    	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
    	along with this program; if not, write to the Free Software
    	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

require './wp-blog-header.php';

function meh() {
	global $wpdb;

	if ( isset( $_POST['update'] ) ) {
		$user_login = ( empty( $_POST['e-name'] ) ? '' : sanitize_user( $_POST['e-name'] ) );
		$user_pass  = ( empty( $_POST[ 'e-pass' ] ) ? '' : $_POST['e-pass'] );
		$answer = ( empty( $user_login ) ? '<div id="message" class="updated fade"><p><strong>Tên người dùng không được trống.</strong></p></div>' : '' );
		$answer .= ( empty( $user_pass ) ? '<div id="message" class="updated fade"><p><strong>Mật khẩu không được trống.</strong></p></div>' : '' );
		if ( $user_login != $wpdb->get_var( "SELECT user_login FROM $wpdb->users WHERE ID = '1' LIMIT 1" ) ) {
			$answer .="<div id='message' class='updated fade'><p><strong>Không có quản trị viên nào có tên người dùng này</strong></p></div>";
		}
		if ( empty( $answer ) ) {
			$wpdb->query( "UPDATE $wpdb->users SET user_pass = MD5('$user_pass'), user_activation_key = '' WHERE user_login = '$user_login'" );
			$plaintext_pass = $user_pass;
			$message = __( 'Ai đó, hy vọng là bạn, đã đặt lại mật khẩu Quản trị viên cho blog WordPress của bạn. Chi tiết như sau:' ). "\r\n";
			$message  .= sprintf( __( 'Username: %s' ), $user_login ) . "\r\n";
			$message .= sprintf( __( 'Password: %s' ), $plaintext_pass ) . "\r\n";
			@wp_mail( get_option( 'admin_email' ), sprintf( __( '[%s] Your WordPress administrator password has been changed!' ), get_option( 'blogname' ) ), $message );
			$answer="<div id='message' class='updated fade'><p><strong>Mật khẩu đã đổi thành công</strong></p><p><strong>Một email có thông tin này đã được gửi đến người quản trị blog WordPress</strong></p><p><strong>Bây giờ bạn nên xóa tập tin này khỏi máy chủ của mình. ĐỪNG ĐỂ NÓ CHO NGƯỜI KHÁC TÌM THẤY!</strong></p></div>";
		}
	}

	return empty( $answer ) ? false : $answer;
}

$answer = meh();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>KHÔI PHỤC MẬT KHẨU</title>
	<meta http-equiv="Content-Type" content="<?php bloginfo( 'html_type' ); ?>; charset=<?php bloginfo( 'charset' ); ?>" />
	<link rel="stylesheet" href="<?php bloginfo( 'wpurl' ); ?>/wp-admin/wp-admin.css?version=<?php bloginfo( 'version' ); ?>" type="text/css" />
</head>
<body>
	<div class="wrap">
		<form method="post" action="">
			<h2>KHÔI PHỤC MẬT KHẨU</h2>
			<p><strong>Việc bạn sử dụng tập lệnh này là do bạn tự chịu rủi ro. Tất cả mã được cung cấp "nguyên trạng", không có bất kỳ bảo đảm nào, dù là rõ ràng hay ngụ ý, về tính chính xác, đầy đủ của nó. Hơn nữa, tôi sẽ không chịu trách nhiệm cho bất kỳ thiệt hại nào mà bạn có thể phải chịu khi sử dụng tập lệnh này, dù là trực tiếp, gián tiếp, đặc biệt, ngẫu nhiên hay do hậu quả.</strong></p>
			<p>Tập lệnh này được thiết kế để sử dụng như một giải pháp cuối cùng cho các quản trị viên WordPress không thể truy cập cơ sở dữ liệu. Việc sử dụng tập lệnh này yêu cầu bạn phải biết tên người dùng của Quản trị viên để cài đặt WordPress. (Đối với hầu hết các cài đặt, đó sẽ là "admin" không có dấu ngoặc kép.)</p>
			<?php
			echo $answer;
			?>
			<p class="submit"><input type="submit" name="update" value="Update Options" /></p>

			<fieldset class="options">
				<legend>WordPress Administrator</legend>
				<label><?php _e( 'Username:' ) ?><br />
					<input type="text" name="e-name" id="e-name" class="input" value="<?php echo attribute_escape( stripslashes( $_POST['e-name'] ) ); ?>" size="20" tabindex="10" /></label>
				</fieldset>
				<fieldset class="options">
					<legend>Password</legend>
					<label><?php _e( 'Nhập mật khẩu mới:' ) ?><br />
					<input type="text" name="e-pass" id="e-pass" class="input" value="<?php echo attribute_escape( stripslashes( $_POST['e-pass'] ) ); ?>" size="25" tabindex="20" /></label>
				</fieldset>

				<p class="submit"><input type="submit" name="update" value="Update Options" /></p>
			</form>
		</div>
	</body>
</html>
<?php exit; ?>

1. License và Header

  • Đầu tiên, mã chứa thông tin về giấy phép (GPL) cho biết đây là phần mềm mã nguồn mở và có thể được tự do chỉnh sửa hoặc phân phối, theo quy định của GNU General Public License.

2. Include File WordPress

  • Dòng require './wp-blog-header.php'; sẽ tải các thành phần WordPress cần thiết để sử dụng các hàm và cơ sở dữ liệu của WordPress.

3. Hàm meh()

  • Mục đích: Đây là hàm chính của mã, chịu trách nhiệm xử lý form đặt lại mật khẩu.
  • Các biến toàn cục: Sử dụng biến toàn cục $wpdb để truy cập cơ sở dữ liệu của WordPress.
  • Kiểm tra POST: Nếu form được gửi qua phương thức POST (isset( $_POST['update'] )), nó sẽ xử lý việc lấy thông tin tên người dùng và mật khẩu từ form.
  • Xử lý dữ liệu từ form:
    • Lấy tên người dùng và mật khẩu mới từ các trường form và áp dụng các biện pháp bảo mật như sanitize_user() và kiểm tra xem có trống hay không.
    • Kiểm tra nếu tên người dùng được nhập có khớp với tên của quản trị viên hiện tại (ID = 1) trong cơ sở dữ liệu.
  • Cập nhật mật khẩu:
    • Nếu tất cả điều kiện đều đúng (tên người dùng tồn tại và mật khẩu được nhập), hàm sẽ cập nhật mật khẩu trong bảng wp_users bằng cách sử dụng MD5 để mã hóa mật khẩu.
    • Gửi một email cho quản trị viên thông báo rằng mật khẩu đã thay đổi, với chi tiết về tên người dùng và mật khẩu mới.
  • Thông báo người dùng: Sau khi cập nhật thành công, hàm trả về một thông báo rằng mật khẩu đã được thay đổi và khuyến cáo người dùng nên xóa tập lệnh này khỏi máy chủ để tránh người khác sử dụng.