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

Форум PHP

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

 

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

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

тема: Не работает авторизация
 
 автор: user10   (24.03.2010 в 23:59)   письмо автору
 
 

есть самописный скрип авторизации. отправляет post'ом логин и пароль. если логин и пароль верный то хешует и добавляет куки в md5. на локалхосте работает норм а на хостинге не хочет и кук не добавляет. пробовал со всех браузеров авторизироваться, не работают все кроме фаерфокса.(куки во всех браузерах включены)

  Ответить  
 
 автор: oliss   (25.03.2010 в 00:05)   письмо автору
 
   для: user10   (24.03.2010 в 23:59)
 

Баба Ванга ,может помочь(к сожалению её нет в живых)

  Ответить  
 
 автор: Slo_Nik   (25.03.2010 в 00:30)   письмо автору
 
   для: user10   (24.03.2010 в 23:59)
 

обычно в таких ситуациях рекомендуют прикрепить скрипт к сообщению...
а то телепатическими способностями не все обладают :)

  Ответить  
 
 автор: user10   (25.03.2010 в 00:36)   письмо автору
 
   для: Slo_Nik   (25.03.2010 в 00:30)
 


<?php
require "config/config.php";
//////////////////////////////////////////
switch ($logadm
{
case 
1:
$logfile fopen("config/log/admin/adm.log""a");
fputs($logfilegetenv("REMOTE_ADDR") . " - - ");
fputs($logfile"[" date("d/M/Y:H:i:s"time()) . " +0000] ");
fputs($logfile"\"" getenv(REQUEST_METHOD) . " ");
fputs($logfilegetenv("REQUEST_URI") . " ");
fputs($logfilegetenv("SERVER_PROTOCOL") . "\" 200 0 ");
fputs($logfile"\"" getenv("HTTP_REFERER") . "\" ");
fputs($logfile"\"" getenv("HTTP_USER_AGENT") . "\" ");
fputs($logfile"\n");
fclose($logfile);
break; }
//////////////////////////////////////////
$login            =    md5(md5(md5(sha1($login))));
$password        =    md5(md5(md5(sha1($password))));
$lgn            =     $_POST['login'];
$pass            =     $_POST['password'];
$l                =    md5(md5(md5(sha1($lgn))));
$p                =    md5(md5(md5(sha1($pass))));
///////////////////////////////////////////
$ac=file_get_contents('config/access');
if(
$_COOKIE['login'] === $login && $_COOKIE['password'] === $passwordheader ("Location: adm.php");
if(
$l===$login && $p===$password && $ac<=5)
{
setcookie ("login","$l",time()+120);
setcookie ("password","$p",time()+120);
$ac="0";
$ac=file_put_contents('config/access',$ac);
header ("Location: adm.php");
}            
else                                                                                                             { 
{
if(
$ac>=5)  
            
/////////--------CAPTCHA------------------------------------------
    
{
switch (
$logadm
{
case 
1:
$logfile fopen("config/log/admin/adm.log""a");
fputs($logfile"<br>");
fputs($logfile"LOGIN: $lgn");
fputs($logfile"\n");
fputs($logfile"<br>");
fputs($logfile"PASSWORD: $pass");
fputs($logfile"\n");
fputs($logfile"<br>");
fputs($logfile"--------------------------------------------------------");
fputs($logfile"<br>");
fputs($logfile"\n");
fclose($logfile);
break; }
    echo 
"
    <form method=post action=\"login2.php\">
    Логин:  <input type=text name=login size=18><br>
    Пароль:<input type=password name=password size=18><br>
    <img src=\"authcp.php\"><input type=text name=s size=18><br>
    <div id=\"ent\"><input type=submit value=Вход></div>
    </form>
    "
;}
else
    
//////---------------------------------------------------------
    
{
    switch (
$logadm
{
case 
1:
$logfile fopen("config/log/admin/adm.log""a");
fputs($logfile"<br>");
fputs($logfile"LOGIN: $lgn");
fputs($logfile"\n");
fputs($logfile"<br>");
fputs($logfile"PASSWORD: $pass");
fputs($logfile"\n");
fputs($logfile"<br>");
fputs($logfile"--------------------------------------------------------");
fputs($logfile"<br>");
fputs($logfile"\n");
fclose($logfile);
break; }
    
$ac++;
    
$ac=file_put_contents('config/access',$ac);
    echo 
'
    <form method=post action="login.php">
    Логин:  <input type=text name=login size=18><br>
    Пароль:<input type=password name=password size=18><br>
    <div id="ent"><input type=submit value=Вход></div>
    </form>'
;}

}
                                                                                                                }
?>

есле 5 попыток неудачных выводит капчу

  Ответить  
 
 автор: oliss   (25.03.2010 в 01:03)   письмо автору
 
   для: user10   (25.03.2010 в 00:36)
 

 md5(md5(md5(sha1($login)))); 

(Отвлеченно ),и вам не жалко насиловать ресурсы.
$_COOKIE['password'] === $password)

Может, не стоит хранить пароль в ЯВНОМ виде в куках ?

  Ответить  
 
 автор: user10   (25.03.2010 в 01:11)   письмо автору
 
   для: oliss   (25.03.2010 в 01:03)
 

админка для 1 пользователя

  Ответить  
 
 автор: Slo_Nik   (25.03.2010 в 01:19)   письмо автору
 
   для: user10   (25.03.2010 в 01:11)
 

а при чём тут один пользователь к хранению пароля в открытом виде в куке?

  Ответить  
 
 автор: Slo_Nik   (25.03.2010 в 01:04)   письмо автору
 
   для: user10   (25.03.2010 в 00:36)
 

откуда берётся переменная $logadm ?
если берётся из GET , то как она приводится к такому виду?
проверте register_globals на локалхосте и хостинге

p.s. возьмите значение атрибутов формы в кавычки...

  Ответить  
 
 автор: user10   (25.03.2010 в 01:07)   письмо автору
 
   для: Slo_Nik   (25.03.2010 в 01:04)
 

из конфига . если $logadm = 1 будет вести лог

  Ответить  
 
 автор: Slo_Nik   (25.03.2010 в 01:23)   письмо автору
 
   для: user10   (25.03.2010 в 01:07)
 

а вот эти переменные откуда берутся?
$login
$password

  Ответить  
 
 автор: user10   (25.03.2010 в 01:28)   письмо автору
 
   для: Slo_Nik   (25.03.2010 в 01:23)
 

из конфига

  Ответить  
 
 автор: user10   (25.03.2010 в 01:30)   письмо автору
 
   для: user10   (25.03.2010 в 01:28)
 

щас попробовал на прямую куки установить

<?php
require "config/config.php";
//////////////////////////////////////////

//////////////////////////////////////////
$login            =    md5(md5(md5(sha1($login))));
$password        =    md5(md5(md5(sha1($password))));


setcookie ("login","$login",time()+120);
setcookie ("password","$password",time()+120);
                                                                                                                
?>

устанавливает только firefox'y . с оперы, ие и хрома не хочет (куки везде включены в настройках)

  Ответить  
 
 автор: oliss   (25.03.2010 в 01:38)   письмо автору
 
   для: user10   (25.03.2010 в 01:30)
 

у вас не хватает одного параметра (если всё остальное верно)
int setcookie (string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])

  Ответить  
 
 автор: oliss   (25.03.2010 в 01:34)   письмо автору
 
   для: user10   (25.03.2010 в 01:07)
 

Если вы хотите чтобы вам помогли ( КОНКРЕТНО ), то Не напрягайте мозг людей которые НА САМОМ ДЕЛЕ ВАМ ХОТЯТ ПОМОЧЬ.
Показывайте ваш код ПОЛНОСТЬЮ, чтобы другие смогли смоделировать вашу проблему и дать вам конструктивный ответ
[ Простите , наболело.]

  Ответить  
 
 автор: user10   (25.03.2010 в 01:55)   письмо автору
 
   для: oliss   (25.03.2010 в 01:34)
 


<?php
$login            
=    "1111111111";
$password        =    "2222222222";
setcookie ("login","$login",time()+120);
setcookie ("password","$password",time()+120);
echo 
$_COOKIE['login'];    
echo 
"<br>";        
echo 
$_COOKIE['password'];                                                                            
?>

opera. chrome. ie
выводит токо <br>
firefox
1111111111
<br>
2222222222

  Ответить  
 
 автор: oliss   (25.03.2010 в 02:04)   письмо автору
 
   для: user10   (25.03.2010 в 01:55)
 

А ,корневую директорию ( отчего отталкивается парсер браузера) слабо указать (для начала)

  Ответить  
 
 автор: sasha1133   (25.03.2010 в 10:36)   письмо автору
 
   для: user10   (25.03.2010 в 01:55)
 

Лучше делать авторизацию с помощью сессии. Я например сделал так:

<?php
// Если не определена константа _ADMIN – завершаем работу скрипта
if(!defined('_ADMIN')) die; 

session_start();

$access = array();
$access file('access.php');

$true_login_md5 trim($access[1]);
$true_pass_md5 trim($access[2]);

// Если пришёл логин из формы
if ( !empty($_POST['login']) )
    {
    
// обрабатываем логин и пароль из формы:
    
$post_login substr($_POST['login'], 020);
    
$post_pass  substr($_POST['pass'], 020);
    
// Записываем в сессию
    
$_SESSION['login_md5'] = md5($post_login);
    
$_SESSION['pass_md5'] = md5($post_pass);
    }

// Если логин или MD5 пароля не совпадают
if ($_SESSION['login_md5'] != $true_login_md5  or  $_SESSION['pass_md5'] != $true_pass_md5
    {
    
// Если была нажата кнопка "вход"
    
if ( !empty($_POST['submit_login']) )
        {
        
$diag_message 'Неверный логин или пароль'
        }
    
// Вывод формы для ввода логина и пароля
    
include "enter.php";
    die; 
    }
?>


Этот файл (да и остальные тоже) включается в файл index.php, лежащий в папке admin/ .
<?php
// Работать с панелью администрирования можно только через файл index.php 
define('_ADMIN'TRUE);

// Проверка прав доступа
include 'auth.php';

. . . . . . 

  Ответить  
 
 автор: sasha1133   (25.03.2010 в 10:37)   письмо автору
 
   для: sasha1133   (25.03.2010 в 10:36)
 

Кстати если найдёте какие то недочёты, будет интересно о них узнать

  Ответить  
 
 автор: oliss   (25.03.2010 в 10:43)   письмо автору
 
   для: sasha1133   (25.03.2010 в 10:36)
 

Вы пишите авторизацию на файлах сессии (насколько это целесообразно?)
У вас движок форума или портал или блоговый?

  Ответить  
 
 автор: oliss   (25.03.2010 в 10:48)   письмо автору
 
   для: oliss   (25.03.2010 в 10:43)
 

а вообще то (по секрету ) админка не должна быть на вашем хосте (только локально ) ,это спасёт от многих проблем ( ну разве троян насадит ваши пароли от аккаунта FTP на вашей машине с вашего клиента)

  Ответить  
 
 автор: sasha1133   (25.03.2010 в 11:13)   письмо автору
 
   для: oliss   (25.03.2010 в 10:43)
 

нет, у меня простенький сайт, где админ имеет возможность добавлять автомобили на сайт и редактировать тексты. Если интересно, то вот он http://autoprof.by/ (строго не судите - первый сайт)

  Ответить  
 
 автор: Trianon   (25.03.2010 в 10:45)   письмо автору
 
   для: sasha1133   (25.03.2010 в 10:36)
 

достаточно подобрать за админом его сессионный идентификатор, случайно оброненный, и всё.

  Ответить  
 
 автор: sasha1133   (25.03.2010 в 11:07)   письмо автору
 
   для: Trianon   (25.03.2010 в 10:45)
 

при выходе сессии уничтожаются. А как подобрать сессионный идентификатор ? Если я правильно понял, это сработает, только когда админ авторизован.
Как можно улучшить защиту? Разве куки лучше - они же не у всех включены вроде бы.

  Ответить  
 
 автор: user10   (25.03.2010 в 11:44)   письмо автору
 
   для: sasha1133   (25.03.2010 в 11:07)
 

вчера сидел по разному пробовал. проблема в том что даже куки не выставляются .
заходил с телефона , с линукса, и с другой винды . пробовал разными браузерами, firefox нормально работает . сделал отдельный сценарий www.php чтоб просто отоброзил куки он работает но без time()+360. вставил его в login.php не хочет. на локал хосте всё работает отлично со всеми браузерами. можт серв не так настоен ?
хз из за чего может быть такое вообще не понятно . пойду волшебный бубен делать, можт поможет =(

  Ответить  
 
 автор: Trianon   (25.03.2010 в 12:03)   письмо автору
 
   для: sasha1133   (25.03.2010 в 11:07)
 

Расскажите, пожалуйста, как php определяет, чью сессию поднимать в скрипте - в ситуации, когда у человека в браузере выключены куки?

и отдельно - часто Вы наблюдали выключенные куки у кого-нибудь?

  Ответить  
 
 автор: sasha1133   (25.03.2010 в 13:04)   письмо автору
 
   для: Trianon   (25.03.2010 в 12:03)
 

>и отдельно - часто Вы наблюдали выключенные куки у кого-нибудь?

да вроде нет. Но я не вижу пока чем куки лучше сессий. Может просвятите?)

  Ответить  
 
 автор: Trianon   (25.03.2010 в 14:24)   письмо автору
 
   для: sasha1133   (25.03.2010 в 13:04)
 

"просветите"

Сразу, как только Вы ответите на первый вопрос.

  Ответить  
 
 автор: sasha1133   (25.03.2010 в 15:32)   письмо автору
 
   для: Trianon   (25.03.2010 в 14:24)
 

>Расскажите, пожалуйста, как php определяет, чью сессию поднимать в скрипте - в ситуации, когда у человека в браузере выключены куки?

Этот вопрос? Счас почитаю)

  Ответить  
 
 автор: oliss   (25.03.2010 в 16:50)   письмо автору
 
   для: sasha1133   (25.03.2010 в 15:32)
 

Ну ,наконец то.
Всё правильно !

  Ответить  
 
 автор: sasha1133   (25.03.2010 в 17:27)   письмо автору
 
   для: oliss   (25.03.2010 в 16:50)
 

Короче если использовать сессии, то будут использоваться куки для идентифицирования браузера, если куки выключены, то через URL и скрытые поля форм. Кроме того можно настроить эти параметры:
session.use_cookies - если равно 1, то PHP передает идентификатор в cookies, если 0 - то нет.
session.use_trans_sid если равно 1, то PHP передает его, добавляя к URL и формам, если 0 - то нет.

Я правильно понял? И имеется ввиду что человек может оставить где нить ссылку типо такой: index.php?PHPSESSID=9ebca8bd62c830d3e79272b4f585ff8f ? Просто я думаю админ врятли станет во первых выключать куки, во-вторых давать ссылки кому то на какие то страницы администраторской зоны) У меня вопрос: по ссылке вроде той что я написал можно зайти только до тех пор, пока сессия у админа не закончилась, правильно (пока этот идентификатор актуален)?

PS. Пока не вижу преимуществ кукисов перед сессиями, ведь если не ошибаюсь то:

Авторизация на куках:
+ нельзя оставить небезопасную ссылку типо той что вверху.
- если куки выключены, то авторизация совсем не будет работать
- куки теоретически можно стащить (ну вроде бы)

Авторизация на сессиях:
+ будет работать, если куки выключены
- правда тогда будут небезопасные ссылки
+ зато можно настроить, чтобы работал только на куках (немного радикально - нет куков - нет авторизации, но зато безопасно)

Если ошибаюсь поправьте, этот вопрос очень интересует.

  Ответить  
 
 автор: oliss   (25.03.2010 в 17:30)   письмо автору
 
   для: sasha1133   (25.03.2010 в 17:27)
 

Самое главное вы пропустили: сессии живут на сервере ,а куки на клиенте
Делайте выводы.

  Ответить  
 
 автор: sasha1133   (26.03.2010 в 00:47)   письмо автору
 
   для: oliss   (25.03.2010 в 17:30)
 

Это я знаю, кэп) И что с этого?

  Ответить  
 
 автор: Trianon   (26.03.2010 в 00:57)   письмо автору
 
   для: sasha1133   (26.03.2010 в 00:47)
 

А то, что аутентификация - процесс доказывания серверу клиентом, что он не верблюд.
Как Вы сессиями хоть что-то докажете, если они не у Вас, а у сервера?

  Ответить  
 
 автор: sasha1133   (26.03.2010 в 01:42)   письмо автору
 
   для: Trianon   (26.03.2010 в 00:57)
 

Ключ к сессиям по умолчанию хранится в тех же куках. Только как вариант когда куки выключены - передаются в ссылках и скрытых полях форм. Тем самым имея куку с идентификатором сессии, доказываем серверу, что клиент не верблюд (или наоборот - именно верблюд =) ). Чем плохо?

  Ответить  
 
 автор: oliss   (26.03.2010 в 02:39)   письмо автору
 
   для: sasha1133   (26.03.2010 в 01:42)
 

Вот этот самый идентификатор намного легче увести ( хотя, как реализована защита скрипта ), чем куку с вашего компьютера

  Ответить  
 
 автор: sasha1133   (26.03.2010 в 03:13)   письмо автору
 
   для: oliss   (26.03.2010 в 02:39)
 

чем же легче, если и в том и в том случае куки? И всё таки , как можно улучшить защиту? Проверять ip, версию браузера и тп (помимо сессий)?

  Ответить  
 
 автор: Trianon   (26.03.2010 в 03:45)   письмо автору
 
   для: sasha1133   (26.03.2010 в 01:42)
 

Плохо тем, что механизм идентификации сессии разрабатывался не для задач аутентификации, преследует совершенно иные цели и поэтому в рассматриваемом применении имеет изъяны.
Один из них (связанный с передачей SID в GET-параметрах скрипта) Вы уже подметили.

А кукис можно поставить и более изощренный.

Хотя для жестких ситуаций все равно придется поднимать https

  Ответить  
 
 автор: sasha1133   (26.03.2010 в 13:26)   письмо автору
 
   для: Trianon   (26.03.2010 в 03:45)
 

Понятно. А в чём фишка https?

  Ответить  
 
 автор: oliss   (26.03.2010 в 13:48)   письмо автору
 
   для: sasha1133   (26.03.2010 в 13:26)
 

http://ru.wikipedia.org/wiki/HTTPS

  Ответить  
 
 автор: sasha1133   (26.03.2010 в 15:08)   письмо автору
 
   для: oliss   (26.03.2010 в 13:48)
 

Спасибо

  Ответить  
Rambler's Top100
вверх

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