Skip to main content

[Thủ Thuật Drupal] Cách lấy mật khẩu Drupal admin bằng PHP

Một số nhà cung cấp hosting không cho phép truy cập SSH vào máy chủ web nơi trang web Drupal được cài đặt, điều này khiến bạn không thể khôi phục mật khẩu tài khoản quản trị viên của Drupal thông qua dòng lệnh drush.

Phương pháp sau đây sẽ được sử dụng như một "phương pháp thay thế" khi các kỹ thuật khôi phục mật khẩu dựa trên dòng lệnh drush không hoạt động được.

Phương pháp đặt lại mật khẩu được mô tả bên dưới sử dụng tập lệnh PHP phải được tải lên máy chủ web để cài đặt lại mật khẩu quản trị viên. 

Bên dưới, tập lệnh PHP thực thi một script đầy đủ để có quyền truy cập vào các chức năng cần thiết tạo mật khẩu quản trị và sau đó cập nhật cơ sở dữ liệu bằng mật khẩu mới mà bạn chỉ định qua tham số trên URL khi bạn thực thi tập lệnh thông qua trình duyệt web .

Lưu ý: việc để lại tập lệnh đặt lại mật khẩu này trên máy chủ của bạn sau khi đặt lại mật khẩu tạo thành một lỗ hổng bảo mật rất quan trọng cho phép bất kỳ ai đặt lại mật khẩu quản trị viên của bạn. Sử dụng tập lệnh này cẩn thận và luôn xóa tập lệnh sau khi bạn sử dụng xong.

Bước 1: Đầu tiên, tạo một tệp có tên ngẫu nhiên (gh34tu9.php chẳng hạn).

Bước 2: Sao chép và dán các nội dung sau vào file php trên.

<?php
use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;

if (pathinfo(__FILE__, PATHINFO_FILENAME) == 'admin-pass-reset') {
  die('Please change your file name to a random string to continue');
}

// Boot Drupal.
$autoloader = require __DIR__ . '/autoload.php';

$request = Request::createFromGlobals();
$kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod', FALSE);
$kernel->boot();

// Get password hasher service.
$password_hasher = $kernel->getContainer()->get('password');

// Hash password.
if (isset($_GET['pass']) && !empty($_GET['pass'])) {
 $newhash =  $password_hasher->hash($_GET['pass']);
}
else {
  die('Retry with ?pass=PASSWORD set in the URL');
}

// Update user password.
$updatepass = Drupal::database()->update('users_field_data')
  ->fields(array(
    'pass' => $newhash,
//  'name' => 'admin',
//	'mail' => 'yourmail@example.com'
  ))
  ->condition('uid', '1', '=')
  ->execute();

// Clean user 1 cache.
Drupal::cache('entity')->delete('values:user:1');

print "Done. Please delete this file as soon as possible";  

Bước 3: Tải tệp lên thư mục gốc của thư mục cài đặt Drupal

Thư mục root / cài đặt Drupal tức là nơi chứa index.php, update.php, robots.txt và các tệp và thư mục khác.

Bước 4: Thực thi tập lệnh, bằng cách chạy URL trong trình duyệt web như sau:

http://example.com/gh34tu9.php?pass=mypassword

Trong URL trên:
- thay thế example.com bằng tên miền thực của bạn.

- thay thế gh34tu9.php bằng tên tệp thực mà bạn đã chỉ định ở bước một ở trên,

- thay thế mypassword bằng mật khẩu mới mong muốn.

Lưu ý: Bạn nên chọn mật khẩu có chứa các chữ cái và chữ số viết hoa, viết thường và có độ dài ít nhất 12 chữ số. Tránh ký tự đặc biệt.

Nếu tập lệnh thực thi thành công, bạn sẽ thấy dòng chữ "Xong" trong trình duyệt web của mình.

Mật khẩu của tài khoản quản trị được tạo khi cài đặt Drupal (tức là người dùng / 1) sẽ được thay đổi thành "mypassword" (hoặc bất kỳ giá trị nào bạn chỉ định).

Cuối cùng, xóa tệp khỏi thư mục gốc cài đặt Drupal.

Đặt lại tên người dùng của tài khoản quản trị viên

Nếu bạn không thể nhớ (hoặc đơn giản là không biết) tên người dùng của tài khoản quản trị viên, trong tập lệnh ở trên, hãy thay đổi // 'name' => 'admin',  thành 'name' => 'admin' và tên người dùng cũng sẽ được đổi thành "admin".

Bạn cũng có thể đặt lại địa chỉ email của quản trị viên theo cách tương tự, bằng cách "bỏ ghi chú" (xóa //) dòng cho địa chỉ email trong tập lệnh ở trên.

Hy vọng sẽ giúp ích cho bạn.