WordPress 비밀번호 찾기 이메일 재설정 링크가 유효하지 않은 문제 해결
오랫동안 블로그 글을 업데이트하지 않았고, 최근에는 딱히 쓸 만한 내용도 없었습니다. 국경절 연휴를 앞두고 있어서, 저는 지루한 내용이나 몇 가지 써 보려고 했습니다. 마침 오늘 WordPress 백엔드의 비밀번호를 변경하려다가 WordPress의 작은 문제를 하나 발견했습니다(취약점이라고 하기도 그렇고, 작은 버그라고 할 수 있습니다). 비밀번호를 변경하면 시스템에서 비밀번호 재설정 링크를 이메일로 보내는데, 원래는 문제가 없습니다. 이메일을 정상적으로 받은 후 이메일 링크를 클릭했더니 "비밀번호 재설정 링크가 유효하지 않습니다"라는 메시지가 표시되었습니다.

사실 이메일 발송 주소 뒤에 (>) 기호가 하나 더 붙어 있었습니다. 원래 WordPress가 보기 좋게 하려고 앞뒤에 꺾쇠괄호를 붙인 것인데, 오히려 이메일에서 주소의 일부로 인식해 버렸고, 클릭하면 당연히 유효하지 않은 링크가 됩니다. 해결 방법은 매우 간단하며, 아래에 두 가지 방법을 소개합니다.
방법 1
테마 루트 디렉터리의 functions.php 파일에 다음 코드를 삽입하면 됩니다.
/**
* 修复 WordPress 找回密码 bug
* 注:https://blog.ikxin.com/archives/80.html
*/
function reset_password_message( $message, $key ) {
if ( strpos($_POST['user_login'], '@') ) {
$user_data = get_user_by('email', trim($_POST['user_login']));
} else {
$login = trim($_POST['user_login']);
$user_data = get_user_by('login', $login);
}
$user_login = $user_data->user_login;
$msg = __('有人要求重设如下帐号的密码:'). "\r\n\r\n";
$msg .= network_site_url() . "\r\n\r\n";
$msg .= sprintf(__('用户名:%s'), $user_login) . "\r\n\r\n";
$msg .= __('若这不是您本人要求的,请忽略本邮件,一切如常。') . "\r\n\r\n";
$msg .= __('要重置您的密码,请打开下面的链接:'). "\r\n\r\n";
$msg .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') ;
return $msg;
}
add_filter('retrieve_password_message', reset_password_message, null, 2);
이 방법의 단점은 테마를 변경한 후 코드를 다시 추가해야 한다는 것입니다.
방법 2
또 다른 방법은 WordPress 루트 디렉터리의 wp-login.php 파일을 수정하는 것입니다.
다음 부분을 찾습니다.
$message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n";
다음과 같이 수정합니다.
$message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') ;
사실상 (<)와 (>\r\n)를 제거하는 것입니다. 하지만 이 방법은 WordPress를 업그레이드하면 무효화됩니다. 업그레이드 후 해당 파일이 교체되기 때문에 wp-login.php를 다시 수정해야 합니다. 따라서 첫 번째 방법을 사용하는 것을 권장합니다.

댓글
(0)아직 댓글이 없습니다