Một lỗ hổng gần đây đã được tiết lộ ảnh hưởng đến WordPress 2.8.3 và cho phép người dùng quản trị bị khóa tài khoản của họ bằng cách thay đổi mật khẩu.Hiểu rõ về lỗ hổng Wordpress
This post tiết lộ đầy đủ chi tiết về lỗ hổng và bao gồm các đoạn mã có liên quan. Bài đăng đề cập rằng 'Bạn có thể lạm dụng chức năng đặt lại mật khẩu và bỏ qua bước đầu tiên và sau đó đặt lại mật khẩu quản trị bằng cách gửi một mảng tới biến $ key.'
Tôi muốn được một người quen thuộc với PHP giải thích lỗi chi tiết hơn.
Những người bị ảnh hưởng nên update đến bản phát hành 2.8.4 mới có vẻ như sửa lỗi này.
wp-login.php:
...[snip]....
line 186:
function reset_password($key) {
global $wpdb;
$key = preg_replace('/[^a-z0-9]/i', '', $key);
if (empty($key))
return new WP_Error('invalid_key', __('Invalid key'));
$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE
user_activation_key = %s", $key));
if (empty($user))
return new WP_Error('invalid_key', __('Invalid key'));
...[snip]....
line 276:
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
$errors = new WP_Error();
if (isset($_GET['key']))
$action = 'resetpass';
// validate action so as to default to the login screen
if (!in_array($action, array('logout', 'lostpassword', 'retrievepassword',
'resetpass', 'rp', 'register', 'login')) && false ===
has_filter('login_form_' . $action))
$action = 'login';
...[snip]....
line 370:
break;
case 'resetpass' :
case 'rp' :
$errors = reset_password($_GET['key']);
if (! is_wp_error($errors)) {
wp_redirect('wp-login.php?checkemail=newpass');
exit();
}
wp_redirect('wp-login.php?action=lostpassword&error=invalidkey');
exit();
break;
...[snip ]...
Cảm ơn bạn đã vô tình cảnh báo tôi cập nhật lượt cài đặt từ của tôi. :-) –