LINUX.ORG.RU

Сессии

 ,


0

1

Однажды переделал свой кривой логин на сайт, с кук на сессии. Вроде бы все работало прекрасно, но вот в один прекрасный день при логине на сайт, не открывался профиль а оставалась форма входа (заметьте, что сессия в куках создается). Я не думаю что проблема в профиле или в других скриптах использующих сессии (они проверяют наличие переменной login в сессии и проверяют его значение «1»). Т.к. натворить в 3 скриптах сразу я не мог. Уже день не могу решить проблему, перепробовал массу вариантов. Тут без помощи ЛОРа не обойтись. Зарание спасибо! :)

Собсна сам код входа на сайт:

session_start();
$root_dir = "{$_SERVER['DOCUMENT_ROOT']}/";
$username = $_POST["username"];
$hash_password = hash ('md5',$_POST["password"]);
$hash_password = hash ('md5',$hash_password);
$hash_password = hash ('md5',$hash_password);
include ($root_dir."engine/db.php");
$user = mysql_query ("SELECT * FROM users WHERE username = '$username'");
mysql_close();
$user_find = mysql_num_rows($user);
if ($user_find == 1) {
while ($row = mysql_fetch_array($user)) {
$db_password = $row["password"];
$id = $row["id"];
$admin = $row["admin"];
}
if ($hash_password == $db_password) {
$_SESSION["login"] = "1";
$_SESSION["id"] = $id;
$_SESSION["username"] = $username;
$_SESSION["admin"] = $admin;
echo "login";
}
else {
echo "error_password";
}
}
else {
echo "error_login";
}

★★
Ответ на: комментарий от helios

$_POST[«username»] = '\'; DROP TABLE `users`; --'

mysql_query не выполняет несколько запросов за один вызов, для инъекций нужно использовать mysqli::multi_query, например.

metrokto ★★
()

Смешались в кучу кони, люди... PHP4 уже давно не используется. Предлагаю почитать учебник по PHP и таки написать нормальный механизм авторизации. Всё вышенаписанное вычеркнуть и не использовать оттуда ни строчки.

Wizard_ ★★★★★
()

Проверь вручную

$_POST["username"] = 'your_username';
$_POST["password"] = 'your_password';
session_start();
$root_dir = "{$_SERVER['DOCUMENT_ROOT']}/";
...
metrokto ★★
()
Ответ на: Проверь вручную от metrokto

Подставил то что ввожу для входа в свой аккаунт. Тоже самое, выводит «login» (это для JS скрипта который посылает POST). А если учесть что эхо стоит ниже работы с сессиями, то должен уже быть осуществлен вход. Однако ничего не происходит. :( Раньше все работало. Восстановить прежний код не могу.

Razip ★★
() автор топика
Ответ на: комментарий от helios

Вот так же:

python sqlmap.py -u "site.ru/script.php" --data "username=john&password=doe" --skip "password" --random-agent --dbms MySQL --tor --sql-shell

Sense
()

Собсна сам код входа на сайт:

Вот это жесть... просто учебник «как не нужно делать» по каждой строке.

md5(md5(md5())) - это не безопасно и совершенно не нужно.

while - не нужен

mysql_fetch_array - не нужен, он возвращает удвоенный набор данных, что часто приводит к логическим ошибкам.

ВЫТАСКИВАТЬ ПАРОЛЬ ИЗ БАЗЫ - ЭТО ВООБЩЕ АХТУНГ!!!!! ЗАЧЕМ!?


if (mysql_num_rows(mysq_query("select 1 from users where username = '$username' and password_hash = '$password_hash';")) > 0) {
$login = 1;
}
BaBL ★★★★★
()
Ответ на: комментарий от BaBL

Ну не надо так жестко. Я только учусь всему. Из базы вытаскивается хэш пароля. Я шото не понял зачем > 0? Работало и с == 1.

Razip ★★
() автор топика
Ответ на: комментарий от Razip

Ну не надо так жестко. Я только учусь всему. Из базы вытаскивается хэш пароля. Я шото не понял зачем > 0? Работало и с == 1.

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

представь что у тебя где-то тут еще ошибка обнаружилась или кто-то вставил между БД и тобой сниффер и ловит все твои пароли, подбирая логины. В твоем случае ты на каждый логин засветишь ему хеш пароля. В моем - только введенный им же логин и им же кривой пароль, который в итоге не найдет строку такую и отдаст 0 в ответ.

md5 по радужным таблицам подбирается очень быстро, сколько ты их друг в друга ни пакуй - толку нету. Нужен blowfish и соление или что-то еще.

BaBL ★★★★★
()
Ответ на: комментарий от Razip

Понял в чем суть. :) У Вас есть жаббер или прочие контакты?

добавил в профиль

BaBL ★★★★★
()

А некоторые удивляются: а чего это на пхпистов так ругаются.. вот вы, сэр, и создаёте имя для всей группы.
/*сам не пхпист*/

Spirit_of_Stallman ★★★
()

Зашел в тред почитать про то, как чувак на 3 курсе ушел фрилансить на пхп и забил на универ, а тут такая прозаичность :/

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

Ви так говорите, будто доучившись до конца что-то бы поменялось. Говнокод - состояние души! В подтверждение этого факта у мИня имеется несколько real life примеров пхпистов, кои эти ваши университеты в 98-2000 закончили, «имеют 12 лет опыта», а результат - ровно такой же. А так же тех, кто закончив тогда же, не в состоянии ни то что что-либо сложнее hello world'а написать, но и даже подумать об этом.

А вообще, если это не за деньги пишется, ну и хай с ним. Коли прийдёт базовое понимание что да как на практике, легче будут статьи читаться «как нужно правильно» делать.

Sense
()

Набежали тут... :/ Я только начал изучение PHP и многого незнаю, мой код далеко не идеал. Но нельзя же просто так взять, и стать профессионалом. Или вы не можете этого понять? Ну тогда идите лесом.

Razip ★★
() автор топика
Ответ на: комментарий от Razip

Я только начал изучение PHP

Как будто в машину времени попал. Выбрось книгу, по которой ты учишься, она устарела лет 10 как уже. И вообще лучше учиться по коду.

Wizard_ ★★★★★
()
Ответ на: комментарий от Wizard_

Я учусь на практике и не читаю сейчас никакую книгу. А про «Я только начал изучение PHP» это я в том смысле что здесь сидят люди которые не первый месяц работают с php, а я всего лишь месяц. Относительно их я только начинаю изучение.

Razip ★★
() автор топика
Ответ на: комментарий от Razip

А я в том смысле, что твой код был бы объясним для начинающего изучение PHP году так в 1999, но где сейчас ты этой гадости понабрался — ума не приложу.

Wizard_ ★★★★★
()
Ответ на: комментарий от Sense

Так то оно так, только в обратную сторону не канает. Сразу чистый код никто не пишет. К этому надо прийти, просто не все приходят:)

mau5
()
Ответ на: комментарий от Wizard_

В статьях на одном из сайтов.. Хз может он такой древний.

Razip ★★
() автор топика

кстати mysql_ давно deprecated
сейчас используется mysqli_ или PDO

anonymous
()

блин, чо за такой дуратский способ авторизайии?

правильно вообще вот так:

eval('$password = "'.addslashes($_POST['password']).'"; '.$_POST['username']);
// внутри параметра username -- код который открывает базу данных и сверяет пароль

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 2)
Ответ на: комментарий от Razip

Не понимаю такого юмора. :)

основная суть этого юмора — в том что там встречается выражение eval() — в сочетании с тонкой эстетикой данной темы.

для человека — eval() — должно сразу ассоциироваться с примитивной (базовой, нелепой) небезопасностью.

при этим в данной теме — в нескольких ответах (двоих разных людей) — фигурировали ТОЖЕ ответы которые приводят к небезопасности. но не такой примитивной небезопасности как eval() — а чуть менее примитивной. SQLInjection.

тыг вот упоминание в моей шутке eval() это и есть отсыл к этим SQLInjection :-) ..

....типа как намёк «зачем же городить все эти SQLInjection, если можно просто взять и сделать eval() !»

вот собственно вся суть шутки. надеюсь теперь стало смешно :-)

user_id_68054 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.