Система авторизации. Нужна помощь.

Local

Новичок
Система авторизации. Нужна помощь.

Здравствуйте дорогие программисты. Я начал изучать php пару недель назад и сразу стал практиковаться на создании cms основной целью для меня является безопасность скриптов. Поэтому мне очень нужен ваш совет. Меня интересует следующее:
Насколько надежен этот вариант авторизации администратора со стороны безопасности:
Файл index.php:
PHP:
<?php
if($act=="")
{
?>
---------Форма запроса--------------
<?php
}
if($act==login){
include ("config.php");
$login=((!isset($_POST["login"]))?"":$_POST["login"]);
$password=((!isset($_POST["password"]))?"":$_POST["password"]);


	$login = htmlspecialchars($login);
	$password = htmlspecialchars($password);
	$password=md5($password);
	$user_dat=mysql_query("SELECT login, password FROM admin where login='$login' and password='$password'");
	$a=mysql_fetch_array($user_dat);
	if (($login == "".$a['login']."") and ($password == "".$a['password']."")){
	$member = base64_encode("$login:$password");
	setcookie("member_login", "$member");
	header("Location: main.php");
	exit();
	}else{
	$error = "Одно из полей заполненно неверно!";
	}
?>
Файл main.php это сама панель администратора. Туда инклудится файл auth.php со следующим содержанием:
PHP:
<?php
 function authUser($member_login)
{
	$member_login = base64_decode($_COOKIE['member_login']);
	$member_login = explode(":", $member_login);
	$login = $member_login['0'];
	$password = $member_login['1'];
	$user_data=mysql_query("SELECT login, password FROM admin where login='$login' and password='$password'");
	while ($b=mysql_fetch_array($user_data))
	if (($login == "".$b['login']."") && ($password == "".$b['password'].""))
		return 1;
	else
		return 0;
}
if (!isset($_COOKIE["member_login"])) {
	$member_login = "";
} else {
	$member_login = $_COOKIE["member_login"];
}

if (!authUser($member_login)) 
{
	header("Location: index.php");
	exit();
}
?>
 

Demiurg

Guest
ты думаешь кому то захочется разбираться в этой куче кода ?
 

physh

поедатель запятых
ЕПРСТ в форуме есть функция поиска. данный вопрос задавался много раз и уже лежат готовенькие скриптики.

ЗЫ: base64_encode("$login:$password"); и все?
 

Local

Новичок
Я хочу написать все это сам. Готовые варианты брать нехочу. И ненадо говорить "зачем изобретать велосипед"... это для меня практика...
Насчет поиска, извините я тут первый раз. В следующий раз буду знать.

p.s
ЗЫ: base64_encode("$login:$password"); и все?
А что? В этом и вопрос... как этот скрипт со стороны безопасности? Заметь, я php изучаю всего 2 недели. Я много незнаю...
 

Фанат

oncle terrible
Команда форума
$login = htmlspecialchars($login);
$password = htmlspecialchars($password);
бред
читай в мане про эту функцию а потом ответь себе на вопрос, на кой она тебе здесь нужна
SELECT login, password FROM admin where login='$login' and password='$password'"
дыра. читай здесь: PHP FAQ: \"Кавычки \". Cоставление запросов mysql, слеши, экранирование кавычек.
очень, очень оригинальная конструкция. Не пояснишь её смысл?
if (($login == "".$a['login']."") and ($password == "".$a['password']."")){
включи режим отображения всех ошибок и посмотри, что тебе скрипт напишет при неверных данных.
а потом подумай - какой смысл в этой проверке вообще.

пока хватит
 

Local

Новичок
Автор оригинала: Фанат
бред
читай в мане про эту функцию а потом ответь себе на вопрос, на кой она тебе здесь нужна
Действительно, спасибо...
Непойму я что-то. Уже 2 часа сижу над этой проблемой. Нужно проверить данные посылаемые в запрос функцией stripslashes или addslashes? Или я вообще нечего не понимаю :(
очень, очень оригинальная конструкция. Не пояснишь её смысл?
Извиняюсь :)
включи режим отображения всех ошибок и посмотри, что тебе скрипт напишет при неверных данных.
а потом подумай - какой смысл в этой проверке вообще.
Смысл? Хм, если без нее то скрипт при любых даннных сунет куки(хоть и неверные) и перейдет к main.php. Или я что-то непонимаю?
 

Фанат

oncle terrible
Команда форума
Уже 2 часа сижу над этой проблемой
Слушай, ну ты первый, кого эта проблема ставит в тупик.
прочти ещё раз, не торопясь.
Там всё просто. Даже примеры есть.
может, просто выспаться надо?

ВпрочеМ, если тебе то0-то конкретно непонятно, какой-то кусок текста - копируй его сюда, я тебе объясню.

Смысл? Хм, если без нее то скрипт при любых даннных сунет куки(хоть и неверные) и перейдет к main.php. Или я что-то непонимаю?
не понимаешь.
во-первых, сделай так, как я сказал. лезу отшибки.
Значит, ты сто-то делаешь неправильно.
во-вторых, соответствие логина и пароля ты уже проверил. в запросе.
так что теперь тебе достаточно проверить всего лишь - вернул запрос что-то, или нет.
 

Local

Новичок
Почти все переделал, ошибок вроде невижу, но при отправки POST запроса в скрипт(через форму) пишет "Call to undefined function: sql_num_rows() in ...... on line 23". Немогу понять в чем дело:(
Вот код:
-----------------------
p.s изменил на mysql_num_rows. Теперь "Cannot modify header information - headers already sent by on line 31"
Думаю стоит мне еще раз перечитать учебник.:(
 

dorfey

Guest
[не успел]

-~{}~ 10.10.05 15:18:

$login = $_POST['login'];
$password = $_POST['password'];
$password = md5($password);
$result = mysql_query("SELECT * FROM admin where login = '".addslashes($login)."' and password='".addslashes($password)."'");
PHP:
$result = mysql_query("SELECT * FROM admin where login = '".addslashes($_POST['login'])."' and password='".addslashes(md5($_POST['password']))."'");
и возвращаемся к
а где ты про addslashes вычитал?
;)

-~{}~ 10.10.05 15:22:

--------форма--------
переносим в конец скрипта
 

Local

Новичок
Спасибо большое за ссылку. При неудачной авторизации просто переменной $error подставил сообщение об ошибке и, вставил переменную в форму. Осталось помойму последняя проблема. Если ввести в форму данные на русском вылетает "mysql_num_rows(): supplied argument is not a valid MySQL result resource in ... on line 10".


p.s про addslashes вычитал - http://dklab.ru/lib/Database_Placeholder/ тут.
 

Фанат

oncle terrible
Команда форума
ну раз ты там вычитал, то решай свои проблемы на форуме dklab.ru.
чего ты сюда-то припёрся?
 

Фанат

oncle terrible
Команда форума
"mysql_escape_string(stripslashes($object))".
какая прелесть.
и в каком учебнике ты нашёл этот идиотизм? Не лаура ли томпсон его написала?
У вас замечательный сайт. Много полезной информации
А ЧТО Ж ты эту информацию НЕ ЧИТАЕШЬ-то? Какой смысл в том, что она есть, если её не читать?
Ну если на dklab объясняют понятнее, то почему бы тебе не пойти на тамошний форум? Где логика?
Ты сам -то понимаешь, что пишешь? Тут объясняют непонятно, но информация полезная и форум хороший. А как ты узнал, что информация полезная, если она непонятно написана?
Там объясняют понятно, но ты туда не хочешь - всё равно здесь пасёшься, хоть здесь и непонятно. Определись уже, а?

Если тебе здесь дают ссылку, это значит, что в ней написана СОВРЕМЕННАЯ инормация. В отличие от книжки, которую написали в прошлом веке, потом российское издательство дождалось, пока она подешевеет, заплатило студенту за перевод и издало.

Скажи, вот какой в этом смысл - я не понимаю.
Тебе дали ссылку, где написано - что и как делать. Ты ссылку не читал. Ну зачем тогда спрашивать-то было?
 

Local

Новичок
Ладно, извини. Меня непоняли.....
Всем спасибо...
Пошел перечитывать...
 

Фанат

oncle terrible
Команда форума
если тебе что-то конкретно непонятно, какой-то кусок текста - копируй его сюда, я тебе объясню.
я тебе это написал ещё вчера.
Объясни - какая проблема уж В ЭТОМ? Скопировать сюда непонятный кусок и попросить объяснить?
или просто своими словами сказать, что непонятно?

-~{}~ 10.10.05 16:56:

Если ввести в форму данные на русском вылетает "mysql_num_rows(): supplied argument is not a valid MySQL result resource in ... on line 10".
если выводится такое сообщение, значит в запросе была ошибка.
Чтобы её увидеть, выводи на экран запрос и mysql_error()
Если сам не разберёшься - пиши их сюда.
 
Сверху