Модераторы: nerezus, IZ@TOP, awers, skyboy, SamDark, MoLeX
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Покритикуйте код авторизации 
:(
    Опции темы
Теги: нет
skeletor
Дата 28.7.2010, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Друзей: 0; Групп: 0
Регистрация: 21.2.2007
Где: Киев

Репутация: нет
Всего: 2



Скажу сразу, код работает, просто интересно, может стоит где-то оптимизировать или поправить, как нужно.

Собственно имеем такую структуру: 
connect.php - подключение к БД
functions.php - описание функций для обработки вводимых данных
index.php - страница с формой авторизации
login.php - авторизация
logout.php - выход
main.php - главная страница

Интересует правильно ли провожу авторизацию и выход.

login.php

Код
<?php

include 'functions.php';
include 'connect.php';

if (isset($_COOKIE['name'])) 
{
    header("Location: main.php");
    exit(0);


if (!isset($fPassword) or !isset($fUsername))
{
    header("Location: index.php");
    exit(0);   
}

$table_admin = "admin";
$table_domain_admins = "domain_admins";

$result = mysql_query ("SELECT password FROM $table_admin WHERE username='$fUsername' AND active='1'");
$row = mysql_fetch_row($result);   
     
$password = pacrypt ($fPassword,$row['0']);
       
    if ($password == $row['0'])
    {
        session_start();
        session_regenerate_id();
        $sessid = session_id();
        setcookie("name",$fUsername,time()+3600);
        setcookie("sessid",$sessid,time()+3600);       
        header("Location: main.php");
        exit(0);
    }

    else die('error set cookies');

mysql_close();

if (!isset($_COOKIE['name'])) 
{
    header("Location: index.php");
    exit(0);


?>


logout.php


Код
<?php

if (isset($_COOKIE['name']))
{
    session_start();
    setcookie('name', '', -1);
    session_destroy();  
}

header("Location: index.php"); 
 
?>



--------------------
"Винда съела дрова и резет здесь не фурычит" 
"Все говорят, что у меня /dev/hands кривой и я всё делаю через /dev/ass. А у меня этих файлов вообще нет!" 
PM MAIL WWW ICQ   Вверх
capitan
Дата 28.7.2010, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 528
Друзей: 0; Групп: 0
Регистрация: 27.2.2005
Где: Москва

Репутация: 8
Всего: 11



я бы использовал empty вместо isset 


--------------------
http://shina-cash.ru - Партнерская программа по продаже шин и дисков.
PM MAIL WWW ICQ   Вверх
skeletor
Дата 29.7.2010, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Друзей: 0; Групп: 0
Регистрация: 21.2.2007
Где: Киев

Репутация: нет
Всего: 2



А какая разница?


--------------------
"Винда съела дрова и резет здесь не фурычит" 
"Все говорят, что у меня /dev/hands кривой и я всё делаю через /dev/ass. А у меня этих файлов вообще нет!" 
PM MAIL WWW ICQ   Вверх
CruorVult (Online)
Дата 30.7.2010, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Друзей: 0; Групп: 0
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 1
Всего: 7



Если переменная существует, но пуста, то isset  вернет true а  !empty - false. 

Это сообщение отредактировал(а) CruorVult - 30.7.2010, 12:53
PM MAIL Skype   Вверх
solenko
Дата 30.7.2010, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Друзей: 0; Групп: 3
Регистрация: 15.1.2006
Где: Украина

Репутация: 30
Всего: 51



Код

if (isset($_COOKIE['name'])) 
{
    header("Location: main.php");
    exit(0);


Почему переход на main.php, а не туда, откуда пользователь пришел?

Код

$result = mysql_query ("SELECT password FROM $table_admin WHERE username='$fUsername' AND active='1'");

Откуда появилась переменная $fUsername? Потенциально -- sql injection

Код

setcookie("sessid",$sessid,time()+3600);   

Зачем вручную устанавливать сессионную куку, если это делается автоматически?

Код

setcookie("name",$fUsername,time()+3600);

А вот это самая большая ошибка. Берем тот же Tamper Data, добавляем куку name=admin и получаем полный поступ. Данные, о том, что пользователь авторизован, должны храниться не в cookie, а в session


--------------------
Все, что не анархия -- то фашизм.
PM MAIL WWW ICQ Skype   Вверх
Google
  Дата 2.9.2010, 22:49 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
IZ@TOP
skyboy
SamDark
MoLeX
awers

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 


Rambler's Top100

[ Время генерации скрипта: 0.2837 ]   [ Использовано запросов: 29 ]   [ GZIP включён ]


Реклама на сайте

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Хостинг: Vingrad Hosting     Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.