From 04c1a62c0f741a35a4a1009c86db671e9dbac6e6 Mon Sep 17 00:00:00 2001 From: Rafa Date: Fri, 12 May 2017 17:40:00 +0200 Subject: [PATCH] =?UTF-8?q?Vulnerabilidad=20Se=20ha=20detectado=20que,=20a?= =?UTF-8?q?l=20recuperar=20la=20contrasen=CC=83a,=20es=20posible=20realiza?= =?UTF-8?q?r=20una=20denegacio=CC=81n=20de=20servicio,=20enviando=20Email?= =?UTF-8?q?=20de=20recordatorio=20de=20contrasen=CC=83a,=20tantas=20veces?= =?UTF-8?q?=20como=20el=20atacante=20lo=20quiera,=20afectado=20al=20usuari?= =?UTF-8?q?o.=20Colapsando=20su=20bandeja=20de=20entrada=20y=20el=20servid?= =?UTF-8?q?or=20de=20correo=20inunda=CC=81ndolo=20de=20peticiones.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Solución: Se recomienda aplicar un método anti-automatización, por lo que no es posible que un atacante pueda enviar más de 3 a 5 intentos de recuperación de contraseña en un corto período de tiempo. La aplicación de un captcha es la técnica más recomendada para evitar que programas automatizados puedan llevar a cabo ataques de fuerza bruta. Un captcha, básicamente, trata de distinguir entre un ser humano y una máquina, ya que este último es mucho más rápido enviando solicitudes para tratar de iniciar sesión o enviar cualquier petición. Otro método sería bloquear, por un período de tiempo aleatorio, una IP que está enviando una gran cantidad de peticiones de acceso o de recuperación de contraseña. Eso haría que el ataque pueda durar mucho más, por lo que puede cambiar el tiempo necesario para encontrar una sola cadena de caracteres desde días hasta meses o incluso años. --- main/auth/lostPassword.php | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/main/auth/lostPassword.php b/main/auth/lostPassword.php index 66007525a4..97b9188567 100755 --- a/main/auth/lostPassword.php +++ b/main/auth/lostPassword.php @@ -54,6 +54,35 @@ if ($reset && $userId) { $form = new FormValidator('lost_password'); $form->addHeader($tool_name); $form->addText('user', [get_lang('LoginOrEmailAddress'), get_lang('EnterEmailUserAndWellSendYouPassword')], true); + + +$captcha = api_get_setting('allow_captcha'); +$allowCaptcha = $captcha === 'true'; + +if ($allowCaptcha) { + $ajax = api_get_path(WEB_AJAX_PATH).'form.ajax.php?a=get_captcha'; + $options = array( + 'width' => 220, + 'height' => 90, + 'callback' => $ajax.'&var='.basename(__FILE__, '.php'), + 'sessionVar' => basename(__FILE__, '.php'), + 'imageOptions' => array( + 'font_size' => 20, + 'font_path' => api_get_path(SYS_FONTS_PATH).'opensans/', + 'font_file' => 'OpenSans-Regular.ttf', + //'output' => 'gif' + ) + ); + + $captcha_question = $form->addElement('CAPTCHA_Image', 'captcha_question', '', $options); + $form->addElement('static', null, null, get_lang('ClickOnTheImageForANewOne')); + + $form->addElement('text', 'captcha', get_lang('EnterTheLettersYouSee'), array('size' => 40)); + $form->addRule('captcha', get_lang('EnterTheCharactersYouReadInTheImage'), 'required', null, 'client'); + + $form->addRule('captcha', get_lang('TheTextYouEnteredDoesNotMatchThePicture'), 'CAPTCHA', $captcha_question); +} + $form->addButtonSend(get_lang('Send')); if ($form->validate()) {