﻿////////////////////////////////////////////////////////////////////////////////
// JohnCMS                             Content Management System              //
// Официальный сайт сайт проекта:      http://johncms.com                     //
// Дополнительный сайт поддержки:      http://gazenwagen.com                  //
////////////////////////////////////////////////////////////////////////////////
// JohnCMS core team:                                                         //
// Евгений Рябинин aka john77          john77@gazenwagen.com                  //
// Олег Касьянов aka AlkatraZ          alkatraz@gazenwagen.com                //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////
// Модуль входа по ключу для JohnCMS 4.0.0         //
// Автор мода: Fikus79                             //
// Сайт автора: http://mowap.ru                    //
/////////////////////////////////////////////////////

Модуль входа по ключу.
Что такое КЛЮЧ и зачем он нужен?

Если злоумышленник воспользуется Вашим телефоном, или компьютером, или еще каким образом сможет похитить закладку с Вашим автологином по логину и паролю, то он сможет сделать с Вашей учетной записью все что угодно, сможет писать от Вашего имени, сменить пароль и прочее.
Если же он похитит Вашу ссылку с автологином по ключу, то он не сможет сменить Ваш пароль(для смены пароля необходимо знать старый пароль от учетки)
Следовательно Вы сможете зайти на сайт по логину и паролю, и сменить ключ.
И злоумышленник останется с носом.
Ключ генерируется случайным образом и может состоять из от семи до двенадцати символов, цифр, знаков. Но лучше конечно, чтобы никакие злоумышленники вообще не хитили у Вас ничего :)


ВНИМАНИЕ!!!
Для нормальной работы системы, необходимы следующие условия:
1) Версия PHP не ниже 5.1
2) MySQL версии не ниже 4.1
3) Поддержка .htaccess
3) Версия Джона на сайте - JohnCMS 4.0.0


УСТАНОВКА МОДУЛЯ
1) Распаковываем архив
2) Заливаем все распакованные файлы на хостинг, согласившись на замену
3) Авторизуемся на сайте как администратор
4) Запускаем инсталлятор по адресу http://ваш_сайт/install.php
5) Следуйте подсказкам инсталлятора

Если процедура установки прошла успешно и сайт работает,
НЕ ЗАБУДЬТЕ следующее:
   - удалите файл /install.php
   
   Модуль затронул три системных файла. Все свои изменения я выделял в файле и их легко найти.
Для тех, кто многое менял в двиге и ему не допустима замена его файлов:

1) в файл /users/includes/profile/office.php добавить код в кабинет (смотрите в моем файле):
	
	/////////////////Для модуля вход по ключу//////////////////////
	echo '<li><font color="red"><b>!</b></font> <a href="'.$set['homeurl'].'/users/key.php">Секретный ключ</a> <a href="'.$set['homeurl'].'/pages/faq.php?act=key">?</a></li>';	
	///////////////////////////////////////////////////////////////
	
2) в файле registration.php заменен код при занесении данных нового пользователя в базу
//////////////// Генерация ключа для ВХОДА ПО КЛЮЧУ /////////////////////////
		$gen_pass = '';
		$bukvy = array('a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'L', 'm', 'M', 'n', 'N', 'o', 'p', 'P', 'q', 'Q','r', 'R', 's', 'S', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '_', '!', '@', '?', '~', '(', ')');
		shuffle($bukvy);
		$z = rand(8,12);
		while ($z > 0)
		{
			$gen_pass .= $bukvy[$z];
			$z = $z - 1;
		}
	/////////////////////////////////////////////////////////////////////////////
	
	
	///////Занесение в базу данных нового пользователя://////////////////
		
        mysql_query("INSERT INTO `users` SET
            `name` = '" . mysql_real_escape_string($reg_nick) . "',
            `name_lat` = '" . mysql_real_escape_string($lat_nick) . "',
            `password` = '" . mysql_real_escape_string($pass) . "',
            `imname` = '$reg_name',
            `about` = '$reg_about',
            `sex` = '$reg_sex',
            `rights` = '0',
            `ip` = '$ip',
            `browser` = '" . mysql_real_escape_string($agn) . "',
            `datereg` = '$realtime',
            `lastdate` = '$realtime',
            `preg` = '$preg',
			`inkey`='$gen_pass'
        ");
        $usid = mysql_insert_id();
		
		///////////// Изменено под модуль входа по ключу //////////////////
        echo '<div class="menu"><p><h3>' . $lng_reg['you_registered'] . '</h3>' . $lng_reg['your_id'] . ': <b>' . $usid . '</b><br/>' . $lng_reg['your_login'] . ': <b>' . $reg_nick . '</b><br/>' . $lng_reg['your_password'] . ': <b>' . $reg_pass . '</b></p>';
            echo "<p><h3>Ваш Ключ: " . $gen_pass . "</h3>"; 
			echo $lng_reg['your_link'] .'<input type="text" value="' . $set['homeurl'] . '/key.php?key=' . $gen_pass . '" /></p>';
		/////////////////////////////////////////////////////////////////////
		
		
   3) в файл 'pages/faq.php' добавить код справки о данном модуле:  
   
	case 'key':
        /*
        -----------------------------------------------------------------
        Справка по КЛЮЧУ
        -----------------------------------------------------------------
        */
        echo '<div class="phdr"><a href="faq.php"><b>F.A.Q.</b></a> | Вход по КЛЮЧУ</div>' .
            '<div class="menu"><p><b>Что такое КЛЮЧ и зачем он нужен?</b><br/>
Ключ необходим для защиты впервую очередь Ваших учеток.<br/>
Если злоумышленник воспользуется Вашим телефоном, или компьютером, или еще каким образом сможет похитить закладку с Вашим автологином по логину и паролю, то он сможет сделать с Вашей учетной записью все что угодно, сможет писать от Вашего имени, сменить пароль и прочее.<br/>
Если же он похитит Вашу ссылку с автологином по ключу, то он не сможет сменить Ваш пароль(для смены пароля необходимо знать старый пароль от учетки)<br/>
Следовательно Вы сможете зайти на сайт по логину и паролю, и сменить ключ.<br/>
И злоумышленник останется с носом.<br/>
Ключ генерируется случайным образом и может состоять из от семи до двенадцати символов, цифр, знаков. <br/>
Но лучше конечно, чтобы никакие злоумышленники вообще не хитили у Вас ничего :) <br/>
<br/></p></div>' .
            '<div class="phdr"><a href="' . $_SESSION['ref'] . '">' . $lng['back'] . '</a></div>';
        break;
 
	////////////добавил ссылку на инфу о КЛЮЧе////////////
    echo '<div class="menu"><a href="faq.php?act=key">Вход по ключу</a></div>';
	//////////////////////////////////////////////////
   
   
   
   
   
   
   
   
   
   
   
   
   