Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2010, 17:04   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
Лампочка базовая аутентификация

Файл config.php
Код:
<?php
	//Адрес сервера MySQL
	$dblocation = 'localhost';
	//Имя базы на хостигше или локальной машине
	$dbname = 'users';
	//имя пользователя базы данных
	$dbuser = 'root';
	//и его пароль
	$dbpassword = "";
	
	//Устанавливаем соединение с базой нанных
	$dbcnx = @mysql_connect($dblocation, $dbuser, $dbpassword);
	if(! $dbcnx)
		exit("<P>В настоящий момент сервер базы данных недоступен, 
		поэтому корректное отображение страницы невозможно</P>");		
	
	//Выбираем базу данных
	if(! @mysql_select_db($dbname, $dbcnx))
		exit("<P>В настоящий момент сервер базы данных недоступен, 
		поэтому корректное отображение страницы невозможно</P>");
	
	/*Устанавливаем кодировку соединения. Следует выбрать
	ту кодировку, в которой данные будут отправляться MySQL-серверу*/
	mysql_query("SET NAMES 'cp1251'");
?>
Файл config.php sequrity_mod.php
Код:
<?php
	//Устанавливаем соединение с базой данных
	require_once("config.php");
	//Если пользователь не авторизовался - авторизуемся
	if(!isset($_SERVER['PHP_AUTH_USER']))
	{
		header("WWW-Authenticate: Basic realm=\"Admin Page\"");
		header("HTTP/ 1.0 401 Unathorized");
		exit("1");
	}
	else
	{
		//Проверяем переменные $_SERVER['PHP_AUTH_USER']
		//и $_SERVER['PHP_AUTH_PW'], чтобы предотвратиться SQL-инъекцию
		if(!get_magic_quotes_gpc())
		{
			$_SERVER['PHP_AUTH_USER'] = mysql_real_escape_string($_SERVER['PHP_AUTH_USER']);
			$_SERVER['PHP_AUTH_PW'] = mysql_real_escape_string($_SERVER['PHP_AUTH_PW']);
		}
	}
	$query = "SELECT pass FROM userlist WHERE name='{_SERVER[PHP_AUTH_USER]}'";
	$list = @mysql_query($query);
	if (! $list)
	{
		header("WWW-Authenticate: Basic realm=\"Admin Page\"");
		header("HTTP/ 1.0 401 Unathorized");
		exit("2");
	}
	//Если такого пользователя нет - открываем окно ввода пароля
	if(mysql_numrows($list) == 0)
	{
		header("WWW-Authenticate: Basic realm=\"Admin Page\"");
		header("HTTP/ 1.0 401 Unathorized");
		exit("3");
	}
	//Если все проверки пройдены, сравниваем хэши паролей
	$pass = @mysql_fetch_array($list);
	if(md5($_SERVER['PHP_AUTH_PW']) != $pass['pass'])
	{
		header("WWW-Authenticate: Basic realm=\"Admin Page\"");
		header("HTTP/ 1.0 401 Unathorized");
		exit("4");
	}
?>
файл: info.php
Код:
<?php
	require_once("sequrity_mod.php");
	phpinfo();
?>

Результат: останавливается на этом месте exit("1");
а по идее должно было выскочить окошко с просьбой ввести пароль. я этот пример разбираю из книгиКузнецова.
и ещё хотел спросить.
if(!get_magic_quotes_gpc())
{
$_SERVER['PHP_AUTH_USER'] = mysql_real_escape_string($_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = mysql_real_escape_string($_SERVER['PHP_AUTH_PW']);
}
что написано в условии?
Если не трудно, объясните пожалуйста код файла sequrity_php, а то я что-то логику не могу понять
Dimarik вне форума Ответить с цитированием
Старый 16.07.2010, 17:34   #2
werewolf999
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 46
По умолчанию "

чтобы заработало нужно поменять заголовки местами
PHP код:
header("HTTP/ 1.0 401 Unathorized");
header("WWW-Authenticate: Basic realm=\"Admin Page\""); 
в условии проверяется включено ли автоматическое экранирование входящих данных и если не включена - данные экранируются вручную

в принципе код откомментирован неплохо - что тебе в нем именно не понятно?
werewolf999 вне форума Ответить с цитированием
Старый 16.07.2010, 17:37   #3
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

Цитата:
и ещё хотел спросить.
if(!get_magic_quotes_gpc())
{
$_SERVER['PHP_AUTH_USER'] = mysql_real_escape_string($_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = mysql_real_escape_string($_SERVER['PHP_AUTH_PW']);
}
что написано в условии?
mysql_real_escape_string - функция, которая частично может помочь в борьбе с mysql инъекциями. Она экранирует спецсимволы. Что касается get_magic_quotes_gpc(), то существует уже встроеная защита от инъекций, которая работает по аналогии с mysql_real_escape_string (т.е. экранирует символы). Так вот, в условии проверяется, включена ли эта самая "защита". Если нет, то экранируем с помощью mysql_real_escape_string, иначе не экранируем (т.к. 2 раза мы не хотим)

werewolf999, опередил =)
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 16.07.2010, 18:16   #4
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

вот сама таблица, где хранятся логины и пароли
mysql> DESCRIBE userlist;
+---------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+----------------+
| id_user | int(11) | NO | PRI | NULL | auto_increment |
| name | tinytext | NO | | NULL | |
| pass | tinytext | NO | | NULL | |
+---------+----------+------+-----+---------+----------------+

почему когда я удаляю запись, допустим с номером 2, удаляю последнюю запись и потом пишу mysql> INSERT INTO userlist (NULL, 'root', MD5('root'));
у меня делает не 1++, а 2++???? Ведь по идее auto_increment должен прибавлять к последнему значению единицу.
и ещё. теперь у меня появляется окошко с авторизацией, но почему-то когда я ввожу в качестве имени пользователя и пароля root, я не могу пройти авторизацию..... Может у меня 'root' сравнивает с его хешем и поэтому, естественно не проходит?
и ещё. в окошке красными буквами пишет ПАРОЛЬ БУДЕТ ПЕРЕДАН НЕЗАШИФРОВАННЫМ. а я ведь использовал МД5. или не правильно использовал?

mysql> SELECT * FROM userlist;
+---------+------+----------------------------------+
| id_user | name | pass |
+---------+------+----------------------------------+
| 1 | root | 63a9f0ea7bb98050796b649e85481845 |
| 4 | root | 63a9f0ea7bb98050796b649e85481845 |
+---------+------+----------------------------------+
Dimarik вне форума Ответить с цитированием
Старый 16.07.2010, 19:59   #5
werewolf999
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 46
По умолчанию

auto_increment "хранится" отдельно и соответственно он делает +1 не к последней записи а к сохраненному значению, что позволяет начать нумерацию не с 1

а на каком exit у тебя прерывается авторизация?

пароль передается незашифрованым от клиента к серверу, а хранится он уже у тебя зашифрованым

имхо скрипт можно упростить - в select выбирать пользователя сразу с проверкой пароля
werewolf999 вне форума Ответить с цитированием
Старый 16.07.2010, 20:15   #6
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

exit("3");
Dimarik вне форума Ответить с цитированием
Старый 16.07.2010, 20:16   #7
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

а как сделать чтобы +1 прибавлялся к последнему значению?
Dimarik вне форума Ответить с цитированием
Старый 16.07.2010, 20:33   #8
werewolf999
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 46
По умолчанию

у тебя в запросе ошибка - там должно быть $_SERVER
Цитата:
а как сделать чтобы +1 прибавлялся к последнему значению?
только указывая id руками
werewolf999 вне форума Ответить с цитированием
Старый 16.07.2010, 20:56   #9
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

THANK YOU!!!
Dimarik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SOAP Аутентификация rdama PHP 0 16.07.2010 09:37
Аутентификация репозитория Freemaks Операционные системы общие вопросы 5 04.07.2010 20:21
[C++] Аутентификация. Ветер Фриланс 4 25.05.2010 11:03
Аутентификация пользователя didar_ Общие вопросы Delphi 18 10.11.2009 17:11
http аутентификация strug PHP 8 30.08.2009 18:38