Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
That

Запрет символов в пароле

Recommended Posts

Здравствуйте. Необходимо запретить Русский язык в паролях, а так же большинство символов. В register.php сделал это следующим путём:

elseif(!preg_match("/^[-a-zA-Z0-9_]+$/i", $in_password)) 
	{
			// Сообщение
			$form_errors['password'][$this->lang->words['pass_too_characters']] = $this->lang->words['pass_too_characters'];
	}

 

Подскажите пожалуйста, а как быть в ipb.register.js? нужно это же сообщение показать "на лету". И помогите пожалуйста найти смену пароля, чтобы сделать то же самое. Спасибо!

Edited by That

Share this post


Link to post

Да, так JS заработал. Спасибо большое! А где искать смену пароля из личного кабинета? Потому как пользователь уже после регистрации может прописать "плохой" пароль в своём аккаунте.

Share this post


Link to post

admin/applications/core/modules_public/global/lostpass.php

 

				if( $pass_a != $pass_b )
			{
				$this->registry->output->showError( 'pass_no_match', 10187 );								
			}

Share this post


Link to post

Что-то я немного не пойму что тут делать, зато понял что новый пароль пользователь может мало того указать любым символом что мне не нужно, так и ещё длиной в 1 символ. Что тоже очень плохо.

Share this post


Link to post

Ниже этого кода вставляете проверку пароля по длине или по символам.

Share this post


Link to post

Так. Ниже у меня проверяется длина следующим путём:

if ( strlen( $pass_a ) < 4 )
{
	$form_errors['password'][$this->lang->words['pass_too_short']] = $this->lang->words['pass_too_short'];
}

Далее захожу в настройки, во время изменения пароля указываю длину нового пароля в 2-3 символа. Пароль успешно меняется.

Share this post


Link to post

Далее захожу в настройки, во время изменения пароля указываю длину нового пароля в 2-3 символа.

Логика подсказывает, что не там делаете.

Для настроек email/пароля в профиле используется ссылка index.php?app=core&module=usercp&tab=core&area=email

А выше указан путь admin/applications/core/modules_public/global/lostpass.php к файлу для "Забыл пароль"

 

 

Далее захожу в настройки, во время изменения пароля указываю длину нового пароля в 2-3 символа

admin/applications/core/extensions/usercpForms.php

 

	/**
 * UserCP Save Form: Password
 *
 * @param	array	Array of member / core_sys_login information (if we're editing)
 * @return	mixed	Array of errors / boolean true
 */
public function saveFormPassword( $member=array() )

 

Ниже у меня проверяется длина следующим путём

Используйте mb_strlen

  • Upvote 2

Share this post


Link to post

А если кроме длины строки нужно проверить

!preg_match("/^[-a-zA-Z0-9_]+$/i"

? Ведь судя по описанию можно лишь получить внутреннюю кодировку.

Share this post


Link to post

Ведь судя по описанию можно лишь получить внутреннюю кодировку.

Я написал, чтобы использовали mb_strlen вместо strlen.

Мой комментарий относился к

Ниже у меня проверяется длина следующим путём:

if ( strlen( $pass_a )

{

$form_errors['password'][$this->lang->words['pass_too_short']] = $this->lang->words['pass_too_short'];

}

Share this post


Link to post

Добрый день. Тоже заинтересовал данный вопрос, потому как нужно запретить менее 6ти символов и всякие там кавычки в изменяемом пароле. Ознакомившись с темой я понял что я ничего не понял. У нас есть путь:

index.php?app=core&module=usercp&tab=core&area=email

Судя по всему он ведёт к файлу /applications/core/modules_public/usercp/ и там лежит файл manualResolver.php. Открыв его я попал в тупик. Либо я пришёл не туда, либо я не могу понять куда тут добавить проверку.

Share this post


Link to post

Судя по всему он ведёт к файлу

newbie выше написал куда он ведет, но почему-то никто этого не видит

 

admin/applications/core/extensions/usercpForms.php

В методе saveFormEmailPassword

 

Найти (этот код повторяется 2 раза в файле, найти второй, в функции saveFormEmailPassword)

 

		if ( $new_pass != $chk_pass )
		{
			return array( 0 => $this->lang->words['passwords_not_matchy'] );
		}

Ниже добавить

			if( !preg_match("/^[-a-zA-Z0-9_]+$/i", $new_pass ) ) 
		{
			return array( 0 => $this->lang->words['pass_too_characters'] );
		}

		if ( strlen( $new_pass ) < 4 )
		{
			return array( 0 => $this->lang->words['pass_too_short'] );
		}

Share this post


Link to post

Прошу прощения, но я внимательно перечитал данную информацию и перепроверил, не работает. Затем я убрал свои ключи языка и подставил ваши. Ничего... После чего я вовсе просто скопировал ваш код и заменил свой. Не помогло. Вот код данного файла. Текущая версия форума 3.4.9.

Share this post


Link to post

Проверил, все работает. Это можно увидеть по еррор блоку который появляется сверху.

Естественно эти лэнги не существуют, их нужно создать в языке, либо написать сообщение ошибки вместо них.

Share this post


Link to post

@siv1987,

Так дело то сейчас не в том, что видны ошибки или нет :). Я залогинился, меняю пароль на любой односимвольный. Мне форум пишет что пароль успешно изменён. Тут же я ввожу свой новый пароль, который я до этого забил в 1 символ и меняю его на 2 символа. Соответственно система проверяет ранее изменёный пароль и так как всё успешно - меняет его ещё раз на 2х символьный :)

Edited by Gendrixon

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...