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

Форум PHP

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

 

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

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

тема: как сделать разавторизацию?
 
 автор: Bvz   (30.12.2009 в 08:37)   письмо автору
 
 

в скрипте авторизации выложенном в downloads есть возможность входа, и пока не закроется браузер никак нельзя выйти, а как сделать выход в данном скрипте, по нажатии кнопки?

<?php 
  
///////////////////////////////////////////////////
  // Система авторизации HTTP-Basic авторизации
  // 2003-2005 (C) IT-студия SoftTime (http://www.softtime.ru)
  // Симдянов И.В. (simdyanov@softtime.ru)
  ///////////////////////////////////////////////////
  // Устанавливаем соединение с базой данных
  
require_once("config.php");
  
// Если пользователь не авторизовался - авторизуемся
  
if(!isset($_SERVER['PHP_AUTH_USER'])) 
  { 
    
Header("WWW-Authenticate: Basic realm=\"Admin Page\""); 
    
Header("HTTP/1.0 401 Unauthorized"); 
    exit(); 
  } 
  else 
  { 
    
// Утюжим переменные $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'],
    // чтобы мышь не проскочила
    
if (!get_magic_quotes_gpc())
    {
      
$_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
      
$_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
    }
    
$_SERVER['PHP_AUTH_USER'] = str_replace("'","`",$_SERVER['PHP_AUTH_USER']);
    
$_SERVER['PHP_AUTH_PW'] = str_replace("'","`",$_SERVER['PHP_AUTH_PW']);
    
    
$query "SELECT pass FROM userlist WHERE name='".$_SERVER['PHP_AUTH_USER']."'";
    
$lst = @mysql_query($query); 
    
// Если ошибка в SQL-запросе - выдаём окно
    
if(!$lst)
    {
      
Header("WWW-Authenticate: Basic realm=\"Admin Page\""); 
      
Header("HTTP/1.0 401 Unauthorized"); 
      exit(); 
    }
    
// Если такого пользователя нет - выдаём окно
    
if(mysql_num_rows($lst) == 0)
    {
      
Header("WWW-Authenticate: Basic realm=\"Admin Page\""); 
      
Header("HTTP/1.0 401 Unauthorized"); 
      exit(); 
    }
    
// Если все проверки пройдены, сравниваем хэши паролей
    
$pass = @mysql_fetch_array($lst);
    if(
md5($_SERVER['PHP_AUTH_PW']) != $pass['pass'])
    {
      
Header("WWW-Authenticate: Basic realm=\"Admin Page\""); 
      
Header("HTTP/1.0 401 Unauthorized"); 
      exit(); 
    }
  }
?>

  Ответить  
 
 автор: Волки   (30.12.2009 в 12:54)   письмо автору
 
   для: Bvz   (30.12.2009 в 08:37)
 

это невозможно

[поправлено модератором]

  Ответить  
 
 автор: ~AquaZ~   (30.12.2009 в 14:55)   письмо автору
 
   для: Bvz   (30.12.2009 в 08:37)
 

Возможно. Послать юзера на
http://blablabla:blablabla@ваш_сайт.com/этот_скрипт.пхп
вместо blablabla - любое несуществующее имя.

  Ответить  
 
 автор: Bvz   (30.12.2009 в 15:14)   письмо автору
 
   для: ~AquaZ~   (30.12.2009 в 14:55)
 

неужели все так безнадежно?

  Ответить  
 
 автор: cheops   (31.12.2009 в 13:09)   письмо автору
 
   для: Bvz   (30.12.2009 в 15:14)
 

В этом плане данный способ аутентификации не очень удобный...

  Ответить  
 
 автор: Commander   (01.01.2010 в 13:12)   письмо автору
 
   для: cheops   (31.12.2009 в 13:09)
 

Cheops, у меня такой вопрос - вроде бы, в коде происходит запись в
$_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']); 
$_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW'])
Почему же невозможно туда записать пустую строку?

  Ответить  
 
 автор: cheops   (01.01.2010 в 15:50)   письмо автору
 
   для: Commander   (01.01.2010 в 13:12)
 

Не очень понятно, в смысле пустую строку?

  Ответить  
 
 автор: Commander   (01.01.2010 в 23:40)   письмо автору
 
   для: cheops   (01.01.2010 в 15:50)
 

>Не очень понятно, в смысле пустую строку?
$_SERVER['PHP_AUTH_USER'] = '';  
$_SERVER['PHP_AUTH_PW'] = ''
Пробовал так, не работает.

  Ответить  
 
 автор: Саня   (31.12.2009 в 15:26)   письмо автору
 
   для: Bvz   (30.12.2009 в 15:14)
 

Да. Это всё браузерная сторона. С сервера ничего не поделаешь.

  Ответить  
 
 автор: Commander   (01.01.2010 в 13:09)   письмо автору
 
   для: Bvz   (30.12.2009 в 08:37)
 

Я тоже хотел на этом коде выход реализовать - застрял на обнулении переменных. Проще реализовать на сессях.

  Ответить  
 
 автор: ~AquaZ~   (05.01.2010 в 20:05)   письмо автору
 
   для: Commander   (01.01.2010 в 13:09)
 

Ясно, тут для всех мой совет - пустое слово...

  Ответить  
 
 автор: Вурдалак   (06.01.2010 в 03:09)   письмо автору
 
   для: ~AquaZ~   (05.01.2010 в 20:05)
 

Да, это так

  Ответить  
 
 автор: ~AquaZ~   (07.01.2010 в 23:27)   письмо автору
 
   для: Вурдалак   (06.01.2010 в 03:09)
 

Да иди ты...

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

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