За последние 24 часа нас посетили 64819 программистов и 1744 робота. Сейчас ищут 930 программистов ...

Зацените скрипт

Тема в разделе "Прочие вопросы по PHP", создана пользователем mpak, 30 окт 2006.

  1. mpak

    mpak Активный пользователь

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Скрипт аутентификации на сайте. Главной его особенностью является генерация временных ссылок скопировав которые и выложив вы позволяете человеку войти со своими правами. По истечение заложенного в ссылку времени она перестает действовать. Скрипт должен иметь возможность брать данные из бд но и без нее тоже будет работать. Логин в скрипте хранится не в открытом виде а плюсуется к паролю и хешируется увеличивая данные и уменьшая шансы подбора. При генерации временной ссылки происходит хеширование хеша. Подбор не возможен. В общем вот мое творение. Буду рад любым исправлениям и доработкам.

    Первое число в $_GET['sid'] это количество секунд в в течение которых ссылка будет работать. Просто изменив его вы увеличиваете или изменяете срок службы ссылки. Человек вошедший по ссылке изменить ссылку не может.

    PHP:
    1.  
    2. <?
    3.  
    4. #md5('логин:пароль');
    5.  
    6. /* CREATE TABLE `auth` (
    7.   `id` int(11) NOT NULL auto_increment,
    8.   `name` varchar(255) NOT NULL,
    9.   `auth` varchar(255) NOT NULL,
    10.   PRIMARY KEY  (`id`)
    11. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;
    12. INSERT INTO `auth` (`id`, `name`, `auth`) VALUES
    13. (1, 'mpak', '17f1899b1b89e4e6817bce39734dc35e'),
    14. (2, 'user', '90db0030e7a6df3b0f4cba5512f72521'),
    15. (3, 'user', 'ff1c7171251eb822de2114ed2c501e51');*/
    16.  
    17. unset($user);
    18. $use_bd = false;
    19. if ($use_bd){
    20.     $use_bd = @mysql_connect('localhost', 'test', '');
    21.     if ($use_bd) mysql_select_db('test');
    22. }
    23. if (!$use_bd){
    24.     $users = array('90db0030e7a6df3b0f4cba5512f72521', 'ff1c7171251eb822de2114ed2c501e51');
    25.     $sresu = array_flip($users);
    26. }
    27.  
    28. $t = time(); $r = 3;
    29. if (isset($_GET['sid'])){
    30.     $sid = $_GET['sid'];
    31.     $r = $sid[0];
    32.     $num = substr($sid, $r + 33); // Номер пользователя в таблице доступа
    33.     if ($use_bd){
    34.         $result = mysql_query("SELECT * FROM `auth` WHERE `id` = '$num'");
    35.         $user = mysql_fetch_array($result, 1);
    36.     }
    37.     substr($sid, 1, $r) <= substr($t, strlen($t) - $r) ? $p = substr($t, 0, strlen($t) - $r) : $p = substr($t, 0, strlen($t) - $r) - 1;
    38.     if ($sid == $r.substr($sid, 1, $r).md5(substr($p, 0, strlen($t) - $r).($use_bd ? $user['auth'] : $users[$num])).($use_bd ? $user['id'] : $num)) $auth = $sid; // проверка ссылки
    39. }
    40. if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])){
    41.     $md5 = md5("{$_SERVER['PHP_AUTH_USER']}:{$_SERVER['PHP_AUTH_PW']}");
    42.     if ($use_bd){
    43.         $result = mysql_query("SELECT * FROM `auth` WHERE `auth` = '$md5'");
    44.         $user = mysql_fetch_array($result, 1);
    45.     }
    46.     if(isset($user['auth']) || isset($sresu[$md5])) $auth = $r.substr($t, strlen($t) - $r).md5(substr($t, 0, strlen($t) - $r).($use_bd ? $user['auth'] : $md5)).($use_bd ? $user['id'] : $sresu[$md5]);
    47. }
    48. //echo $md5;
    49. if (strlen($_GET['logof']) && $_GET['logof'] == $_SERVER['PHP_AUTH_USER']){
    50.     unset($auth);
    51.     unset($_SERVER['PHP_AUTH_USER']);
    52. //  unset($_SERVER['PHP_AUTH_PW']);
    53. }
    54.  
    55. if (!strlen($auth)){
    56.     if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])){
    57.         echo "Ваш хеш ".$md5." его нет в таблице доступа.<br>";
    58.     }else{
    59.         header("WWW-Authenticate: Basic realm=\"My Realm\"");
    60.         header("HTTP/1.0 401 Unauthorized");
    61.     }
    62.     echo "Доступ к странице закрыт. Обратитесь к администратору.";
    63.     echo "<br><a href='{$_SERVER['SCRIPT_NAME']}?logof={$_SERVER['PHP_AUTH_USER']}'>Авторизация</a>";
    64.     exit;
    65. }
    66.  
    67. echo "<a href='index.php?sid=$auth'>index.php?sid=$auth</a>";
    68. ?>
    69.  
    Попробовать работу скрипта можно по адресу http://mpak.s86.ru/login
    user 123
    user 12345

    Ссылка на 16.6 (999 секунд) минут http://mpak.s86.ru/login/index.php?sid= ... ef29f65220
    на 2.7 часа (9999 секунд) http://mpak.s86.ru/login/index.php?sid= ... 4934f8c040
    на 1.1 суток (99999 секунд) http://mpak.s86.ru/login/index.php?sid= ... 0c237e0de0
    на 11.5 суток (999999 секунд) http://mpak.s86.ru/login/index.php?sid= ... d189063930
    на 115.7 суток http://mpak.s86.ru/login/index.php?sid= ... 3961c2c160

    ну и так далее...
     
  2. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    mpak это велосипед с квадратными колесами...
    (все это реализуется в тысячу раз проще, а главное в тысячу раз безопаснее)
     
  3. mpak

    mpak Активный пользователь

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Стояла задача на короткие промежутки времени открывать доступ к странице копированием ссылки. Так чтобы она через определенный промежуток времени гарантированно была неработаспособна. Я ничего подобного найти не смог.
     
  4. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
     
  5. mpak

    mpak Активный пользователь

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Еще есть один скрипт который не могу найти долго. HTMLAREA создание html страниц по типу ворда. Есть желание сделать его модулем для портальной системы но никак не могу найти. Может кто нибудь видел что то похожее?.
     
  6. Anonymous

    Anonymous Guest

    Видел, хорошую штуку... дома в закладках лежит. Вечером ссылку положу, если надо..
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    mpak
    Это называется WYSIWYG если я правильно понял :) (гугль рулит в этом плане тоже)
     
  8. mpak

    mpak Активный пользователь

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Нашел штук 8 разных. Не один не смог заставить работать нормально. При наличае работающего смог бы его модулем для портального движка сделать.
     
  9. Anonymous

    Anonymous Guest

    Вот я как раз неплохой нашел... а вообще большинство tinyMCE используют...
     
  10. mpak

    mpak Активный пользователь

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Скачал версию 2_0_8 это то что мне надо. Примного благодарен. Близжайшие планы прикрутить эту штуку как модуль mdpro.
     
  11. Anonymous

    Anonymous Guest

    Рад, что я хоть кому то оказался полезен =)
     
  12. mpak

    mpak Активный пользователь

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Поразбиравшись нашел уже интегрированный. Но добиться его работы не могу. Портальная система mdpro модуль называется RteMulti возможно кто то смог его заставить работать. Помогите.
     
  13. rush

    rush Активный пользователь

    С нами с:
    1 фев 2006
    Сообщения:
    2
    Симпатии:
    0
    я юзаю FcEditor, хоть и притормаживает немного, но функциональность отличная. лекгок в настройке..
     
  14. NIKO

    NIKO Активный пользователь

    С нами с:
    10 фев 2006
    Сообщения:
    655
    Симпатии:
    0
    Адрес:
    Armenia
    А че такое mdpro?