Помогите с систеемой авторизации
1.
‮PLATINUM (26.03.2012 / 11:00)
С сессиями надо. Р
По кукам.(чтоб если пользователь захотел,ставим куку(ну это легко осуществить))
С мускулом.
И почему пишет что заголовки уже отправлены?(session_start(); только в первой строке
2.
Николай (26.03.2012 / 12:01)
Что конкретно нужно?
Если пользователь при авторизации не ставит галочку запомнить меня - пишешь просто в сессию, если ставит - еще и в куки переменную. При авторизации потом ее просто проверяешь на существование.
Добавлено через 04:38 сек.
А насчет заголовков, попробуй буферизацию вывода включить. ob_start();
3.
‮PLATINUM (26.03.2012 / 12:29)
Ну в принципе я понимаю примерно так же. Буферизацию попробую.
4.
‮PLATINUM (26.03.2012 / 12:52)
Warming: session_start(); Cannot send send cache limiter - headers already sent by(output started at W:\home\maf\www\index.php:1) in ...(путь уже поняли) on line 2
И ещё начёт сессий: у меня выключен register globals, я могу только массив $_SESSION использовать?
5.
Николай (26.03.2012 / 13:01)
Ну что то выводится значит у тебя в самом начале страницы до старта сессии
6.
Андрюха (26.03.2012 / 13:03)
2. Ага,и поставлю я сам в куку значение. И под кем же я авторизируюсь? Уж лучше логин с паролем зашифрованным писать
7.
Николай (26.03.2012 / 13:04)
Еще бывает проблема, когда кодировка utf с bom сигнатурой. Попробуй без нее сохранить.
8.
‮PLATINUM (26.03.2012 / 13:05)
<?
session_start();
require('game/setup_html.php');//Диз и шапки
echo"Вход";
/*Тут форма и всякие ссылки*/
?>
9.
Николай (26.03.2012 / 13:05)
Wapruks (26 Марта 2012 / 15:03)
2. Ага,и поставлю я сам в куку значение. И под кем же я авторизируюсь? Уж лучше логин с паролем зашифрованным писать
Я же не сказал что просто значение типа var=1, значит авторизован
Разумеется логин нужен, пароль.
10.
Андрюха (26.03.2012 / 13:06)
Редактируй в UTF-8 без BOM. Тебе много глобальных переменных достпно. Просто не все твои переменные будут глобальными. Только если сам такой зделаешь
11.
‮PLATINUM (26.03.2012 / 13:06)
Колян 56, спасибо, с кодировкой помогло!!!
12.
Андрюха (26.03.2012 / 13:08)
Ну мало ли,сделает еще var=1
13.
‮PLATINUM (26.03.2012 / 13:09)
Ещё я читал, что md5 или sha1 мало. Что лучше? Я видел с солью md5(md5("это мой пароль").соль)
ну или sha1(md5("Тут мой пароль"))
Добавлено через 00:54 сек.
12.
Wapruks, насчёт вар=1
Я же кое-какие варианты видел. Понимаю что к чему.
14.
Андрюха (26.03.2012 / 13:10)
Да,мало. Зделай что-то типа md5(md5(pass.sha1(pass)));
15.
‮PLATINUM (26.03.2012 / 13:28)
А в $_SESSION достачно айди прописать? или тоже пароль нужен?
16.
Андрюха (26.03.2012 / 13:30)
Ну сессии доступны только со стороны сервера,поэтому хоть еденичку туда пиши
17.
Никто (26.03.2012 / 13:46)
16.
Wapruks, неправильно говоришь, если бы сессии 100 процентно гарантировано были доступны только со стороны сервера то зачем вообще хэширование нужно? хранили бы пароли как есть да и всё. хэширования достаточно и просто md5 одного, и при регистрации запрещать простые пароли, наличие заглавной и прописной буквы и цифры в пароле длиной минимум 8 символов, в этом случае у хацкеров стыривших базу с паролями уйдут месяцы на подбор соответствия хэшу пароля, как раз время нужное для предупреждения пользователей о смене пароля, функции хэширования кстати говоря довольно таки требовательны к памяти, поэтому не нужно ими злоупотреблять
18.
Андрюха (26.03.2012 / 13:50)
Ну приведи мне пример,как ты сессию то украсть сможешь? Если не выложить ее нигде. одного md5 мало. Нуу,не месяцы. Смотря какой комп,смотря какая база хешей. На счет памяти... У тебя 1000 регистраций в секунду будет проходить??? Еще скажу,что чем долше идет генерация хеша,тем дольше и хеш подбирать будут. Кстати хеш вообще не для этих целей придуман
19.
Никто (26.03.2012 / 13:55)
и кстати говоря можно быть хитрым, и варьировать с хэшированием, например substr(md4('text'),1,8) к примеру собъет с толку 90% кулхацкеров совершенно
Добавлено через 01:25 сек.
18.
Wapruks, ну просвяти нас для чего же придуман хэш?;) Если только смотреть контрольные суммы, ты совершенно ошибаешься.
Добавлено через 03:50 сек.
18.
Wapruks, а зачем мне тырить сессию? SELECT * INTO OUTFILE... никто не отменял
Добавлено через 07:43 сек.
да и вообще это маразм возиться с хэшированием на мелких pda проектах, кому нафиг нужны эти пароли, если только из баловства, понимаю вот порталы qip.ru, mail.ru вот там то можно похэшировать...
20.
Андрюха (26.03.2012 / 14:07)
впервые вижу такой запрос. Что он делает? При чем здесь сессии то?
21.
Николай (26.03.2012 / 14:08)
whatthefuck (26 Марта 2012 / 15:55)
да и вообще это маразм возиться с хэшированием на мелких pda проектах, кому нафиг нужны эти пароли, если только из баловства, понимаю вот порталы qip.ru, mail.ru вот там то можно похэшировать...
Если уж делать, то делать нужно нормально. А не абы как. Согласись. Не стоит так наплевательски относиться к безопасности.
22.
ramzes (26.03.2012 / 14:15)
Wapruks (26 Марта 2012 / 14:07)
впервые вижу такой запрос. Что он делает? При чем здесь сессии то?
Результат в файл
Добавлено через 02:17 сек.
whatthefuck (26 Марта 2012 / 13:55)
и кстати говоря можно быть хитрым, и варьировать с хэшированием, например substr(md4('text'),1,8) к примеру собъет с толку 90% кулхацкеров совершенно...
Идея правельная но недодуманная.
23.
Андрюха (26.03.2012 / 14:19)
22. Прям ждал,когда ты напишешь
Ну в файл и что даст то это? Это если уж не фильтровать данные,то можно получить. А сессии то причем?
24.
‮PLATINUM (26.03.2012 / 15:16)
Регистрация проходит нормально, но не получается войти, из базы логин не извлекает(а регистрирует норм.)
25.
Андрюха (26.03.2012 / 15:23)
Друзья,встаньте в круг,возьмитесь за руки и повторяйте "не извлекает из базы логин". Сейчас я скажу какая проблема
26.
‮PLATINUM (26.03.2012 / 15:26)
сейчас я дам код
27.
‮PLATINUM (26.03.2012 / 15:37)
Я изменял пример для изучения авторизации
<?
session_start();
include ('mysql.php');
if (isset($_GET['logout']))
{
if (isset($_SESSION['user_id']))
unset($_SESSION['user_id']);
setcookie('login', '', 0, "/");
setcookie('password', '', 0, "/");
// и переносим его на главную
header('Location: ../index.php');
exit;
}
if (isset($_SESSION['user_id']))
{
// юзер уже залогинен, перекидываем его отсюда на закрытую страницу
header('Location: index.php');
exit;
}
if (!empty($_POST))
{
$login = (isset($_POST['login'])) ? mysql_real_escape_string($_POST['login']) : '';
$query = "SELECT `salt`
FROM `users`
WHERE `login`='{$login}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql) == 1)
{
$row = mysql_fetch_assoc($sql);
// итак, вот она соль, соответствующая этому логину:
$salt = $row['salt'];
// теперь хешируем введенный пароль как надо и повторям шаги, которые были описаны выше:
$password = md5(md5($_POST['password']));
$query = "SELECT `id`
FROM `users`
WHERE `login`='{$login}' AND `password`='{$password}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
// если такой пользователь нашелся
if (mysql_num_rows($sql) == 1)
{
// то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)
$row = mysql_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
// если пользователь решил "запомнить себя"
// то ставим ему в куку логин с хешем пароля
$time = 86400; // ставим куку на 24 часа
if (isset($_POST['remember']))
{
setcookie('login', $login, time()+$time, "/");
setcookie('password', $password, time()+$time, "/");
}
// и перекидываем его на закрытую страницу
header('Location: index.php');
exit;
}
else
{
die('Такой логин с паролем не найдены в базе данных. И даём ссылку на повторную авторизацию. — <a href="../index.php">Авторизоваться</a>');
}
}
else
{
die('пользователь с таким логином не найден, даём ссылку на повторную авторизацию. — <a href="../index.php">Авторизоваться</a>');
}}
?>
28.
Андрюха (26.03.2012 / 15:42)
А ошибка какая?
29.
‮PLATINUM (26.03.2012 / 15:57)
28.
Wapruks, пишет нет такого логина, хотя он есть в базе и пароль верный
30.
Андрюха (26.03.2012 / 16:11)
`salt` это пароль или соль к паролю?
31.
ramzes (26.03.2012 / 16:28)
Данные не фильтруешь
32.
‮PLATINUM (26.03.2012 / 16:40)
31.
ramzes, та чё сложного то? парочку htmlspecialchars. Да и есть спец фильтр
Добавлено через 01:32 сек.
Спец фильтр это скрипт есть такой в амулете дракона, он улавливает пост и гет запросы.
Добавлено через 02:39 сек.
и если в них подозрительные букыы, то умирает запрос
33.
Никто (26.03.2012 / 17:33)
вижу что используется соль при хэшировании,видимо при регистрации в хэшировании она есть, а в схеме авторизации её нету, покажи еще код авторизации
34.
‮PLATINUM (26.03.2012 / 17:40)
33.
whatthefuck, это и есть авторизация. В реге соль есть, хеширование одного типа
35.
Никто (26.03.2012 / 17:44)
ой, ошибся, покажи код регистрации а не авторизации, у тебя всего лишь при авторизации соль не задействована, покажи как в регистрации она в хэше учавствует
Добавлено через 01:38 сек.
и ещё я не пойму стиля написания вот этого '{$login}', что за фигурные скобочки ещё, зачем они там нужны
Добавлено через 02:47 сек.
$query = 'SELECT `id`
FROM `users`
WHERE `login`="'.$login.'" AND `password`="'.$password.'"
LIMIT 1';
вот так уж
36.
‮PLATINUM (26.03.2012 / 17:50)
соль при авторизации используется
37.
Никто (26.03.2012 / 17:52)
а я говорю НЕ ИСПОЛЬЗУЕТСЯ))
// итак, вот она соль, соответствующая этому логину:
$salt = $row['salt'];
// теперь хешируем введенный пароль как надо и повторям шаги, которые были описаны выше:
$password = md5(md5($_POST['password']));
38.
‮PLATINUM (26.03.2012 / 17:53)
37.
whatthefuck, а ты прав.
39.
Никто (26.03.2012 / 17:53)
если бы она использовалась то она бы была вот так
$password = md5(md5($_POST['password'].$salt));
или так
$password = md5(md5($_POST['password']).$salt);
или так
$password = md5(md5($_POST['password'])).$salt;
40.
‮PLATINUM (26.03.2012 / 18:03)
39.
whatthefuck, а разные методы можно тут использовать? в смысле алгоритмы хеширования
41.
‮PLATINUM (26.03.2012 / 20:11)
Даже когда оставляю md5(parol) всё равно не работает
Добавлено через 03:37 сек.
http://code.wen.ru/oFg
тут код
42.
Никто (26.03.2012 / 22:38)
я ещё раз повторяю, зачем там фигурные скобки?
`password`='{$hashed_password}'
не будет код работать в них, это видимо стиль какого то шаблонизатора, но в любом случае не произойдет там интерполяция переменной, исправляй соответствено с примером что я привел в посту номер 35
43.
‮PLATINUM (26.03.2012 / 23:12)
Вобщем не знаю. Скобки убрал, всё равно не работает. Регает, а входить не входит
Добавлено через 03:08 сек.
Перепишу
44.
‮PLATINUM (27.03.2012 / 00:21)
Переписал и тоже самое. Регает, но не входит.
Добавлено через 05:52 сек.
Значит проблема с запросом MySQL
SELECT id
FROM users
WHERE login=$login and password=$password
LIMIT 1
Добавлено через 06:41 сек.
mysql_num_rows при правильных данных возвращает 0
45.
Никто (27.03.2012 / 06:51)
черт! я думал с утра зайду и тут уже всё решено! э тут FACEPALM, почитай первые 5 страниц любого справочника php в каких кавычках происходит интерполяция переменных,а в каких нет! я же написал в двойных кавычках запрос, и в одинарных обвод переменных, а ты пишешь совершенно другое.
46.
‮PLATINUM (27.03.2012 / 23:06)
45.
whatthefuck, да я знаю. Просто в Mysql не очень секу. Попутно спрошу, верно ли писать
echo"$array[index1][index2]"? А это с ассоц. массивами запутался
47.
‮PLATINUM (27.03.2012 / 23:17)
whatthefuck (26 Марта 2012 / 17:44)
ой, ошибся, покажи код регистрации а не авторизации, у тебя всего лишь при авторизации соль не задействована, покажи как в регистрации она в хэше учавствует
Добавлено через 01:38 сек.
и ещё я не пойму стиля написания вот этого '{$login}', что за фигурные скобочки ещё, зачем они там нужны
Добавлено через 02:47 сек.
$query = 'SELECT `id`
FROM `users`
WHERE `login`="'.$login.'" AND `password`="'.$password.'"
LIMIT 1';
вот так уж
Чё за символ?
`
48.
Никто (28.03.2012 / 06:21)
46.
BezBoya, верно, но только зачем тебе многомерные массивы, редкая и неповоротливая штука
Добавлено через 00:34 сек.
47.
BezBoya, символ` служит для выделения названий полей, таблиц и тд
49.
‮PLATINUM (29.03.2012 / 23:00)
http://code.wen.ru/Ahbwp
ссылка на код авторизации
URL:
https://visavi.net/topics/30812