Авторизация php

123
-
На сайте с 07.12.2005
Offline
97
-K-
#11
chemax:
$sql = @mysql_query("SELECT * FROM `users` WHERE `password` = '$_POST[password]' AND name='$_POST[name]'");

Еще неплохо для начала почитать про фильтрацию входящих данных и SQL инъекции

denex
На сайте с 29.04.2009
Offline
7
#12

chemax,

$sql = @mysql_query("SELECT * FROM `users` WHERE `password` = '$_POST[password]' AND name='$_POST[name]'");

искренне советую заменить на:

$sql = @mysql_query("SELECT * FROM `users` WHERE `users`.`password` =  '". mysql_real_escape_string($_POST['password']) ."' AND `users`.`name` = '". mysql_real_escape_string($_POST['name']) ."' ");

Весьма надежная и проверенная схема запроса.

denex добавил 03.07.2009 в 14:52

Конкретнее советую почитать на:

http://php.net/mysql_real_escape_string

denex добавил 03.07.2009 в 14:53

Опять же, дабы не нагружать сервер.

Если много полей в таблице юзеров, советую, не вытягивать запросом все из таблицы, а только нужное, например: логин, пароль, мыло, id и т.п.

denex добавил 03.07.2009 в 14:55

Например:

$sql = @mysql_query("SELECT `users`.`name`, `users`.`password`, `users`.`id` FROM `users` WHERE `users`.`password` =  '". mysql_real_escape_string($_POST['password']) ."' AND `users`.`name` = '". mysql_real_escape_string($_POST['name']) ."' ");  

Ну, это я образно, если не понятно :-)

Создание Интернет-проектов любой сложности (социальные сети, медиа-порталы, сайты-визитки, Интернет-магазины, CMS и т.д.) (http://www.tyurin.net)
B
На сайте с 05.05.2009
Offline
11
#13

chemax, что-то у тебя все запутано. Ты передаешь данные через сессию в Форму входа, т. е. пользователь уже проходил авторизацию, а это вход куда-нибудь еще? Вот простая авторизация.

Форма входа:


<?php
if(isset($_SESSION['user']))
{
echo $login='Здравствуйте, '.$_SESSION['user'].'!';
}
else
{
?>
<form action="'.$_SERVER['PHP_SELF'].'?do=login" method="post">
Имя посетителя:<br/>
<input type=text name="name" value=""><br/>
Пароль:<br/>
<input type=password name="password" value="'"><br/>
<input type=submit value="Отправить">
</form>
<?php
}
?>

Обработка:


<?php
$name = $_POST['name'];
$password = md5($_POST['password']);

$checkU = mysql_query("SELECT
*
FROM
users
WHERE
name = '$name' AND password = '$password'");
if (mysql_num_rows($checkU) != 1)
{
echo "Вы ввели неправильные данные";
}
else
{
$_SESSION['user'] = $name;
$_SESSION['password'] = $password;
header('Location:../index.php');
}
?>
LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#14
P.S. Прочитал не мало статей, но не знаю какая из них поможет сделать безопаснее.

вранье, ни одной вы не читали. Читали бы, вообще бы топика не было.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
chemax
На сайте с 07.01.2009
Offline
206
#15
B3nder:
chemax, что-то у тебя все запутано. Ты передаешь данные через сессию в Форму входа, т. е. пользователь уже проходил авторизацию, а это вход куда-нибудь еще? Вот простая авторизация.

Форма входа:


<?php
if(isset($_SESSION['user']))
{
echo $login='Здравствуйте, '.$_SESSION['user'].'!';
}
else
{
?>
<form action="'.$_SERVER['PHP_SELF'].'?do=login" method="post">
Имя посетителя:<br/>
<input type=text name="name" value=""><br/>
Пароль:<br/>
<input type=password name="password" value="'"><br/>
<input type=submit value="Отправить">
</form>
<?php
}
?>


Обработка:

<?php
$name = $_POST['name'];
$password = md5($_POST['password']);

$checkU = mysql_query("SELECT
*
FROM
users
WHERE
name = '$name' AND password = '$password'");
if (mysql_num_rows($checkU) != 1)
{
echo "Вы ввели неправильные данные";
}
else
{
$_SESSION['user'] = $name;
$_SESSION['password'] = $password;
header('Location:../index.php');
}
?>

да, в форме затупил я. спасибо. но мне кажется что мой вариант просто более обрабатывает ошибки)

chemax добавил 03.07.2009 в 16:05

denex:
chemax,
$sql = @mysql_query("SELECT * FROM `users` WHERE `password` = '$_POST[password]' AND name='$_POST[name]'");

искренне советую заменить на:
$sql = @mysql_query("SELECT * FROM `users` WHERE `users`.`password` =  '". mysql_real_escape_string($_POST['password']) ."' AND `users`.`name` = '". mysql_real_escape_string($_POST['name']) ."' ");

ну это то естественно все закроется(даже уже закрылось)

chemax добавил 03.07.2009 в 16:06

LEOnidUKG:
вранье, ни одной вы не читали. Читали бы, вообще бы топика не было.

поищите статьи на хабрахабре. там далеко не для моего ума все писанное. одна есть не плохая, но там через куки только.

Качественный хостинг, VPS и сервера. (http://ihc.ru/?ref=569)
Николай В.
На сайте с 07.09.2006
Offline
62
#16

Я же вам предложил взять Zend_Auth.

Будет у вас красивый и секурный код вроде:


function _authenticate($identity, $credential)
{
$adapter = new Zend_Auth_Adapter_DbTable(Zend_Registry::get('db'), 'users', 'username', 'password', 'MD5(?)');
$adapter->setIdentity($identity);
$adapter->setCredential($credential);
$auth = Zend_Auth::getInstance();
if ($result = $auth->authenticate($adapter)->isValid()) {
$auth->getStorage()->write($adapter->getResultRowObject(null, 'password'));
}

return $result;
}
adrin02
На сайте с 12.04.2006
Offline
85
#17

Я использую куки и сеесию. Так чтоб каждый раз не вводить пароли. При первом заходе выборка данных из кук сверка с базой если совпало то создаем сессию и по сессии работаем. Сессию взломать как говорят не возможно а вот куки без проблем можно подменить

Хостинг изображений (http://likepic.net) SpeedTest (http://speed-tester.info)
[Удален]
#18
adrin02:
Сессию взломать как говорят не возможно а вот куки без проблем можно подменить

Зависит от хостера. Я у двух своих предыдущих хостеров имел доступ к общей папке /tmp, где хранились файлы сессий всех пользователей. Было интересно читать что туда пихается ;)

По теме как делаю я. Данные в сессии (я сам себе хостер и посторонних пользователей на моей машине нет). В куках только признак сессии, соответствие которому хранится в таблице вместе с данными типа ip, браузер. Для авторизации по куке необходимо полное совпадение юзерагента и частичное (2 верхних сегмента) ip. Если что-то из этого нарушается, значит либо пользователь юзает несколько операторов (тогда пусть под каждый авторизуется и ставит галку "запомнить меня"), либо это не пользователь вовсе. Была идея ещё генерить куку на основе уникальных данных пользователя, но это геморой и паранойя для всех сторон.

Dreammaker
На сайте с 20.04.2006
Offline
569
#19
kxk:
pasha220992, Дерьмовый пример нет защиты от брута и проверки входящих данных

первое ладно, а второе то зачем? Что вы будете проверять? Разве что длину логина...

kxk
На сайте с 30.01.2005
Offline
990
kxk
#20

Dreammaker, На sql инъекции я имелл ввиду :)

Ваш DEVOPS
123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий