|
|
|
|
|
для: Loki
(13.03.2006 в 20:23)
| | Вы правы. Это я сморозил.
Значение из куки вообще нельзя применять как чистый ключ для входа. Его надо использовать в комбинации с данными из логина, REMOTE_IP, FORWARDED_FOR и USER_AGENT для поиска в таблице уже созданных сессий. Таблицу такую - само собой - надо создать. И строки в нее вносить при опознавании пароля из POST-параметров (в этот же момент и прописывать кукис). А удалять - при появлении несогласованной комбинации. | |
|
|
|
|
|
|
|
для: Trianon
(13.03.2006 в 17:55)
| | по 4 пункту: если из куки вынут данные, то кто мешает просто подставить их в свою куку? Тогда что пароль, что хеш - все едино. Или я не прав? | |
|
|
|
|
|
|
|
для: Trianon
(13.03.2006 в 17:55)
| | Спасибо за подробное объяснение | |
|
|
|
|
|
|
|
для: dina
(13.03.2006 в 17:02)
| | Насчет того, что ".$user["id_user"].")"; написан неверно, я наврал, прошу прощения. Если это число, то там все в порядке.
> Первый раз делаю систему авторизации. Скажите, что ни так.
>Учусь здесь на softtime.
Что не так?
1. register_globals нужно отключить. Хотя бы на собственной машине, где Вы это тестируете.
Хотя лучше бы и на боевом сервере тоже. Совпадение имен сессионной и локальной переменной, и вызванный этим конфликт, лучшее тому подтверждение. И сейчас это случайность. А потом такие вещи будут использовать в качестве дыр.
Неоднократно слышал - новичкам лучше работать с включенными register_globals. Ерунда. С ними могут работать только матерые профессионалы, которые весь код насквозь видят, и каждую переменную помнят. И то, скорее всего, они то как раз отключат.
2. Целочисленные данные из полей ввода надо проверять, перед тем как отправлять еще куда-то, например в MySQL-запрос. Строковые данные из полей ввода надо грамотно экранировать.
Строка
$query = "SELECT password FROM users WHERE name='".$_POST['name']."'";
- типичный объект для sql-injection-атаки . Может быть Вас спасут magic_quoets, может оказаться и наоборот. Даже скоррее всего так.
3. В базе нужно хранить не пароли, а только хеши паролей. По хешу невозможно было определить пароль. Сами пароли хранить нельзя. А чего не хранишь - того не украдут.
4. Нельзя пароли запихивать в кукисы. Они оттуда вынимаются в два счета. Хочется удерживать сессию, за счет кукисов - запихивайте туда хеш пароля. И крайне желательно, не тот, который в базе лежит, а другой. Иначе хеш в базе станет фактически открытым паролем.
5. Нельзя писать пользователю "пароль не подошел". Только "неизвестный логин-пароль". Вообще нельзя проверять пароль отдельно, а логин отдельно. Только вместе - одним SQL-запросом. Иначе это будет прямым предложением устроить перебор, пока не подойдет. Соответственно, запрос следует строить не так:
$query = "select password from users where name= '$input_name'"
а, например, так:
$session_pwd = isset($_SESSION['pwd'])?$_SESSION['pwd']: md5($input_login.$input_pwd);
$query = "select user_id from users
where pwd_hash = md5('$session_pwd')
and name = '".mysql_escape_chars($input_name)."'"
$res = mysql_query($query);
if(mysql_num_rows($res) == 1)
$_SESSION['pwd'] = $session_pwd;
else unset($_SESSION['pwd']);
|
И так далее и тому подобное... | |
|
|
|
|
|
|
|
для: Trianon
(13.03.2006 в 16:40)
| | когда три строчки были закоментированы все работает
$query1 = "select * from users where name='".$_SESSION['user']."'";
$result1 = mysql_query($query1);
$user=mysql_fetch_array($result1);
$query="insert into addcar(car_id, tip_kuz, ves, v, length, width, heigth, tir, ekmt, adr, ot, do, data, addday, min, curs, note, kontakt, time, id_user ) values('',
'$tip_kuz',
'$ves',
'$v',
'$length',
'$width',
'$heigth',
'$tir',
'$ekmt',
'$adr',
'$ot',
'$do',
'$data',
'$addday',
'$min',
'$curs',
'$note',
'$kontakt',
now(),
".$user["id_user"].")";
|
теперь написала вот так, как подсказали ниже($user убрала) и заработало
$query1 = "select id_user from users where name='".$_SESSION['user']."'";
$result1 = mysql_query($query1);
$us=mysql_fetch_array($result1);
|
>>Но дело даже не в этом. Весь код дыряв до невозможности. А
>ведь это, как я понимаю, система авторизации. Вас же ломать
>будут... :(
Первый раз делаю систему авторизации. Скажите, что ни так. Учусь здесь на softtime. | |
|
|
|
|
|
|
|
для: XPraptor
(13.03.2006 в 16:40)
| | Да... про register globals я как-то не подумал... | |
|
|
|
|
|
|
|
для: Loki
(13.03.2006 в 16:27)
| | У вас register_global в on и пременная $user пересекается с сессионной переменной user а вы вкоде, который закоментировали, ей массив сплитите. Вот он потом и отображается в сессионой переменой. | |
|
|
|
|
|
|
|
для: dina
(13.03.2006 в 16:22)
| | Не ,а
'".$user["id_user"].'")";
|
Но дело даже не в этом. Вы явно пытаетесь вставить поле ($user["id_user"]), которое только что вытаскивали Select'ом из БД. А сам Select (верхние три строки) у Вас закоментрирован.
Но дело даже не в этом. Весь код дыряв до невозможности. А ведь это, как я понимаю, система авторизации. Вас же ломать будут... :( | |
|
|
|
|
|
|
|
для: dina
(13.03.2006 в 16:11)
| | Как я понимаю, handler.php используется для всех файлов один, а значение теряется только на одной из страниц, вот в коде формирующем тут страницу я бы и стал искать где используется эта переменная. | |
|
|
|
|
|
|
|
для: dina
(13.03.2006 в 16:11)
| | когда я удаляю
в коде
//$query1 = "select * from users where name='".$_SESSION['user']."'";
// $result1 = mysql_query($query1);
// $user=mysql_fetch_array($result1);
$query="insert into addcar(car_id, tip_kuz, ves, v, length, width, heigth, tir, ekmt, adr, ot, do, data, addday, min, curs, note, kontakt, time, id_user ) values('',
'$tip_kuz',
'$ves',
'$v',
'$length',
'$width',
'$heigth',
'$tir',
'$ekmt',
'$adr',
'$ot',
'$do',
'$data',
'$addday',
'$min',
'$curs',
'$note',
'$kontakt',
now(),
".$user["id_user"].")";
|
выделенное жирном тоже удаляю. Все работает и user везде на всех страницах приветствуется и определяется | |
|
|
| |
|