Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: авторизация
 
 автор: SINtez   (11.08.2005 в 14:20)   письмо автору
 
 

Приветствую всех!
в общем задача такая:
при входе в админку необходимо запрашивать логин и пароль - для админа и только.
и необходимо чтобы пороль был хорошо заХЕШирован... ну и конечно привязать это всё к админке...

на других форумах мне отвечали довольно неуважительно а у вас я смотрю процветает уважение к Нюбам :)

заранее спасибо.

   
 
 автор: Евгений Петров   (11.08.2005 в 14:25)   письмо автору
 
   для: SINtez   (11.08.2005 в 14:20)
 

хешировать можно при помощи md5() или password а можно и тем и доугим несколько раз.

   
 
 автор: SINtez   (11.08.2005 в 14:29)   письмо автору
 
   для: Евгений Петров   (11.08.2005 в 14:25)
 

дело в том, что я пока что ещё чайник и поэтому смутно предстваляю себе как это происходит точнее что и куда писать надо...

   
 
 автор: Гость   (11.08.2005 в 14:36)   письмо автору
 
   для: SINtez   (11.08.2005 в 14:29)
 

смотри есть пароль "dsf" хешируем его md5 :

<?
$pass
="dsf";
$pass=md5($pass);
echo 
$pass//хеш пароля
?>

хешируем несколько раз подряд ^

<?
$pass
="dsf";
$pass=md5($pass);
$pass=md5($pass);
$pass=md5($pass);
echo 
$pass//Выводится "3-ной" хеш пароля
?>

Вот и все дела)

   
 
 автор: Гость   (11.08.2005 в 14:32)   письмо автору
 
   для: Евгений Петров   (11.08.2005 в 14:25)
 

Если пароль берется не из БД, а из файла, то чтоб его там не подсмотрели, то его перед этим хешируем md5() 3 раза подряд... расшифровать то что было изначально наверное нереально... или нужно подождать пару лет))), ну и перед проверкой пороля используй sleep(2); чтоп усложнить бутафорс)

   
 
 автор: P@Sol   (11.08.2005 в 14:28)   письмо автору
 
   для: SINtez   (11.08.2005 в 14:20)
 

вот посмотри
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=80&page=1

   
 
 автор: SINtez   (11.08.2005 в 14:31)   письмо автору
 
   для: P@Sol   (11.08.2005 в 14:28)
 

на сколько понял по ссылке идёт речь о регистрации других людей и последующем их посещении данных страниц... я не прав? я чтото упустил?

   
 
 автор: Евгений Петров   (11.08.2005 в 14:35)   письмо автору
 
   для: SINtez   (11.08.2005 в 14:31)
 

Ну а чтоб только администратор смог надо где то там прописать
if($login == '"dmin")
  // и дальше код который пускает дальше.

   
 
 автор: P@Sol   (11.08.2005 в 14:36)   письмо автору
 
   для: SINtez   (11.08.2005 в 14:31)
 

ну....а вам регистрация не нужна??? там есть и вход...а для шифрования пароля надо так $pass=md5($pass); или как предлогают выше $pass=md5(md5(md5($pass)));

   
 
 автор: Loki   (11.08.2005 в 15:29)   письмо автору
 
   для: P@Sol   (11.08.2005 в 14:36)
 

Ну трижды его хешировать смысла нет: все равно это необратимое шифрование. Так что даже из одного хэша можно получить множество комбинаций...

   
 
 автор: P@Sol   (11.08.2005 в 14:38)   письмо автору
 
   для: SINtez   (11.08.2005 в 14:20)
 

>при входе в админку необходимо запрашивать логин и пароль -
>для админа и только.
это не возможно, т.к. скрипту надо дать понять админ ты или нет....поэтому форма будет выводиться для всех...а пароль знает только админ:)

   
 
 автор: Евгений Петров   (11.08.2005 в 14:41)   письмо автору
 
   для: P@Sol   (11.08.2005 в 14:38)
 

Можно по IP адресу проверять если он постоянный для админа или в cookie какой нибудь код помещать - типа админ.

   
 
 автор: P@Sol   (11.08.2005 в 15:09)   письмо автору
 
   для: Евгений Петров   (11.08.2005 в 14:41)
 

а если админ из инет кафе решил зайти? или из гостей?

   
 
 автор: SINtez   (11.08.2005 в 15:20)   письмо автору
 
   для: P@Sol   (11.08.2005 в 14:38)
 

ну да, я это и имел ввиду

   
 
 автор: Гость   (11.08.2005 в 14:53)   письмо автору
 
   для: SINtez   (11.08.2005 в 14:20)
 

Вобщем я вырвал кусок кода из одного из приложений, его надо поставить в начало документа который хочешь "зашитить паролем" , ну и есенно немного подправить

<?
session_start
();
if (empty(
$_SESSION['avtoriz'])&& $_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) 
{
 
  if (isset(
$login) && isset($pass))
  {
  
$login=md5($login);
  
$pass=md5($pass);
  
$pass=md5($pass);
    if (
$login === "3689521afb72c966754f1ccb34ed6530" && $pass === "7f5f358af2656a62415a27950b40a730")
    {
    
$_SESSION['avtoriz'] = true
    
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
    echo 
"Спасибо вы авторизованы, для продолжения работы проидите по <a href=".$location.">этой ссылке</a> Или просто обновите странницу";
    }
  }
  else
  {
  
?>
  <form action =admin_catalog.php method="post">
  Логин :<input type="text" name="login" maxlength="15"/>
  Пароль :<input type="password" name="pass" maxlength="25"/>
  <input type="submit" value="Зайти"/></form>
  <?
  
}
sleep(4);
exit();

echo 
"Секретные данные :)))"
?>

в данном случае логин - "гость", пароль - "пасс"

   
 
 автор: SINtez   (11.08.2005 в 15:21)   письмо автору
 
   для: Гость   (11.08.2005 в 14:53)
 

конкретно по данному посту у меня вопрос а как сменить пароль и логин если они захешированы?

   
 
 автор: Гость   (11.08.2005 в 17:08)   письмо автору
 
   для: SINtez   (11.08.2005 в 15:21)
 

такой код покажет тебе хеш нужного слова:

<?
echo md5('нужное_слово/набор_букв');
?>

   
 
 автор: SINtez   (11.08.2005 в 17:58)   письмо автору
 
   для: Гость   (11.08.2005 в 17:08)
 

спасибо - я понял.

   
 
 автор: SINtez   (11.08.2005 в 18:01)   письмо автору
 
   для: Гость   (11.08.2005 в 14:53)
 

а если человек допустим скачает этот файл с помощью телепортпро он сможет обнаружить пароль?

   
 
 автор: SINtez   (11.08.2005 в 18:16)   письмо автору
 
   для: Гость   (11.08.2005 в 14:53)
 

может я чего не понял? он меня и при правильном и при неправильном ответах перекидывает на страницу admin_catalog.php :(((

   
 
 автор: SINtez   (11.08.2005 в 15:23)   письмо автору
 
   для: SINtez   (11.08.2005 в 14:20)
 

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

   
 
 автор: totx   (11.08.2005 в 18:36)   письмо автору
 
   для: SINtez   (11.08.2005 в 15:23)
 

Работа в 3 шага:
1) Создаем фаил index.php и со следующим содержанием:

<?php
  
if(!isset($HTTP_POST_VARS['name'])&&!isset($HTTP_POST_VARS['password']))
  {
?>
<div align="center"><h1>Опознание Админа.</h1>
    <form method="post" action="index.php">
    <table border="1">
    <tr>
      <th> Логин </th>
      <td> <input type="text" name="name"> </td>
    </tr>
    <tr>
      <th> Пароль </th>
      <td> <input type="password" name="password"> </td>
    </tr>
    <tr>
      <td colspan="2" align="center">
        <input type="submit" value="Войти">
      </td>
    </tr>
    </table>
    </form></div>
<?php
  
}
  else
  {
     include_once(
'config.php');
    
$query "select count(*) from admin where
              name = '
$name' and
              pass = '
$password'";
    
$result mysql_query$query );
    if(!
$result)
    {
      echo 
'Невозможно выполнить запрос.';
      exit;
    }
    
$count mysql_result$result0);
    if ( 
$count )
    {
      echo 
'<h1>Вы на месте!</h1>';
      
URL=aut_index.html'></HEAD></HTML>";
    }
    else
    {
      echo '
<h1>Уходите!</h1>';
      echo '
Вам не разрешено просматривать этот ресурс.';
    }
  }
?>

2. Создаем фаил config.php со следующим содержанием:

<?php
  $dblocation 
"localhost"//адрес б.д.
  
$dbname "name_db";//имя базы данных
  
$dbuser "login";//твой логин к базе данных
  
$dbpasswd "password";//твой пароль к б.д.
  
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
  if (!
$dbcnx)
  {
    echo( 
"<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" );
    exit();
  }
  if (! @
mysql_select_db($dbname,$dbcnx) )
  {
    echo( 
"<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>" );
    exit();
  }
//Классная функция на случай повторения соединения с Б.Д.
  
function puterror($message)
  {
    echo(
"<p>$message</p>");
    exit();
  }
?>

3) И таблица в самой базе данных, создай запрос со следующим содержанием:

CREATE TABLE 'admin' (
  'name' varchar(10) NOT NULL default '',
  'pass' varchar(15) NOT NULL default '',
  PRIMARY KEY  ('name')
) TYPE=MyISAM;

-- 
-- Дамп данных таблицы 'admin'
-- 

INSERT INTO 'auth' VALUES ('login', 'password');

Готово, теперь заходи на страницу index.php.

   
 
 автор: totx   (11.08.2005 в 18:36)   письмо автору
 
   для: SINtez   (11.08.2005 в 15:23)
 

Работа в 3 шага:
1) Создаем фаил index.php и со следующим содержанием:

<?php
  
if(!isset($HTTP_POST_VARS['name'])&&!isset($HTTP_POST_VARS['password']))
  {
?>
<div align="center"><h1>Опознание Админа.</h1>
    <form method="post" action="index.php">
    <table border="1">
    <tr>
      <th> Логин </th>
      <td> <input type="text" name="name"> </td>
    </tr>
    <tr>
      <th> Пароль </th>
      <td> <input type="password" name="password"> </td>
    </tr>
    <tr>
      <td colspan="2" align="center">
        <input type="submit" value="Войти">
      </td>
    </tr>
    </table>
    </form></div>
<?php
  
}
  else
  {
     include_once(
'config.php');
    
$query "select count(*) from admin where
              name = '
$name' and
              pass = '
$password'";
    
$result mysql_query$query );
    if(!
$result)
    {
      echo 
'Невозможно выполнить запрос.';
      exit;
    }
    
$count mysql_result$result0);
    if ( 
$count )
    {
      echo 
'<h1>Вы на месте!</h1>';
      
URL=aut_index.html'></HEAD></HTML>";
    }
    else
    {
      echo '
<h1>Уходите!</h1>';
      echo '
Вам не разрешено просматривать этот ресурс.';
    }
  }
?>

2. Создаем фаил config.php со следующим содержанием:

<?php
  $dblocation 
"localhost"//адрес б.д.
  
$dbname "name_db";//имя базы данных
  
$dbuser "login";//твой логин к базе данных
  
$dbpasswd "password";//твой пароль к б.д.
  
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
  if (!
$dbcnx)
  {
    echo( 
"<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" );
    exit();
  }
  if (! @
mysql_select_db($dbname,$dbcnx) )
  {
    echo( 
"<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>" );
    exit();
  }
//Классная функция на случай повторения соединения с Б.Д.
  
function puterror($message)
  {
    echo(
"<p>$message</p>");
    exit();
  }
?>

3) И таблица в самой базе данных, создай запрос со следующим содержанием:

CREATE TABLE 'admin' (
  'name' varchar(10) NOT NULL default '',
  'pass' varchar(15) NOT NULL default '',
  PRIMARY KEY  ('name')
) TYPE=MyISAM;

-- 
-- Дамп данных таблицы 'admin'
-- 

INSERT INTO 'auth' VALUES ('login', 'password');

Готово, теперь заходи на страницу index.php.

   
 
 автор: cheops   (11.08.2005 в 19:19)   письмо автору
 
   для: SINtez   (11.08.2005 в 14:20)
 

Вы можете использовать для построения такой системы либо статью http://www.softtime.ru/info/articlephp.php?id_article=34, либо указанную выше тему http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=80, но всех надёжнее будет использовать защиту директории с административной частью средствами Apache, подробнее о которых можно почитать в статье по ссылке http://www.softtime.ru/info/articlephp.php?id_article=27

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования