• Автор:

    Flesha
  • Добавлено:

    май 01, 2013
  • Комментариев:

    0
  • Просмотров:

    1251

Хак Авторизация по почте

Хак Авторизация по почте

Данный хак поможет значительно улучшить безопасность на сайте. Благодаря тому, что почту пользователя никто, кроме администрации, не видит - хакеру сложно будет подобрать пароль к аккаунту. Даже если у него уже есть пароль, он не сможет узнать почту пользователя, просто просмотрев сайт и профиль пользователя.

Установка:

1. Открыть /engine/inc/options.php и найти:
showRow( $lang['opt_sys_ut'], $lang['opt_sys_utd'], makeDropDown( array ("0" => $lang['opt_sys_reg'], "1" => $lang['opt_sys_reg_1'] ), "save_con[registration_type]", "{$config['registration_type']}" ) );


Добавить ниже:
showRow( "Использовать почту вместо логина:", "Использовать почту вместо логина при авторизации?", makeDropDown( array ("1" => $lang['opt_sys_yes'], "0" => $lang['opt_sys_no'] ), "save_con[authorization_email]", "{$config['authorization_email']}" ) );


2. Открыть /engine/modules/sitelogin.php и найти:
if( !preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $_POST['login_name']) AND $allow_login) {


Заменить на:
if( ((!preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $_POST['login_name']) AND !$config['authorization_email']) OR ( strlen($_POST['login_name']) <= 50 AND count(explode("@", $_POST['login_name'])) == 2 AND $config['authorization_email'])) AND $allow_login) {


Найти еще:
$member_id = $db->super_query( "SELECT * FROM " . USERPREFIX . "_users where name='{$_POST['login_name']}' and password='" . md5( $_POST['login_password'] ) . "'" );


Заменить на:
$where = "name='{$_POST['login_name']}'";
if ($config['authorization_email'])
$where = "email='{$_POST['login_name']}'";

$member_id = $db->super_query( "SELECT * FROM " . USERPREFIX . "_users where ".$where." and password='" . md5( $_POST['login_password'] ) . "'" );


3. Открыть /engine/inc/include/functions.inc.php и найти:
if( $username == "" or preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $username ) or $md5_password == "" ) return false;


Заменить на:
if ($username == "" OR $md5_password == "")
return false;
if (preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $username) AND (!$config['authorization_email'] OR !$post))
return false;
if ((strlen($username) > 50 OR count(explode("@", $username)) != 2) AND $config['authorization_email'] AND $post)
return false;


Найти еще:
$member_id = $db->super_query( "SELECT * FROM " . USERPREFIX . "_users WHERE name='$username' and password='$md5_password'" );


Заменить на:
$where = "name='{$username}'";
if ($config['authorization_email'])
$where = "email='{$username}'";

$member_id = $db->super_query( "SELECT * FROM " . USERPREFIX . "_users where ".$where." and password='".$md5_password."'" );


Не забудьте предупредить пользователей, если Вы включите опцию авторизации по почте.
Версия DLE: 9.x
Вернуться
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.