[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помоги написать скрипт авторизации
Genekolog
Вообщем что я зделал, наверное это очень мало, я написал файл avt.php в нем у меня пользователь вводит логин и пароль. По нажатию вход переходим в autten.php где то что ввел пользователь сравнивается с даннми в БД. Если сходится, то в этом же фалу выполняется следующее, создается таблиза состоящая из 2х частей в одной include грузится меню, в другой отображаются данные по выбранному пункту меню.
ПРОБЛЕМА:
Ввожу данные жму ок, проходит авторизация, зупускаюсь параметры заданные поумолчанию т.е. запускается один из пунктов меню.
выбираю другой или этот же пункт мею, и все неверная авторизация.
Я так понимаю данные которые мы вводим теряются после нажатия какого либо пунка меню да и вообще впринципе


содержимое файла aut.php
<?
Error_Reporting(E_ALL & ~E_NOTICE);
Print '<form method="post" action="autten.php">';
Print '&nbsp;Ëîãèí&nbsp;<br><input type="text" name="login" maxlength="15" size="15"><br>';
Print 'Ïàðîëü&nbsp;<br><input type="password" name="pass" size="15" maxlength="15"><br>';
Print '<input type="submit" value="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîéòè&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" >';
?>


содержимое файла autten.php
<?
Error_Reporting(E_ALL & ~E_NOTICE);
$menu=0;
$login=$login;
$pass=$pass;
$link = mysql_connect("localhost", "root", "") or die("Could not connect");
mysql_select_db("developsite7") or die("Could not select database");
$query = "SELECT nikname,pas FROM user";
$result = mysql_query($query);
while ($line = mysql_fetch_array($result,MYSQL_ASSOC))
if ($login==$line[nikname]) {
if ($pass==$line[pas]){
$menu=4;
include("ndef.php");
if ($nkont==""){
$nkont=$def_kont;};
print '<table>';
print '<tr>';
print '<td>';
Error_Reporting(E_ALL & ~E_NOTICE);
include("nmenu.php");
print '</td>';
print '<td>';
Error_Reporting(E_ALL & ~E_NOTICE);
include("$nkont.php");
print '</td>';
print '</tr>';
print '</table>';
} else {
Print 'Íå ïðàâèëüíàÿ àóòåíòèôèêàöèÿ';
}
}else{
Print 'Íå ïðàâèëüíàÿ àóòåíòèôèêàöèÿ';
}
?>

подгружаемые файлы nmenu.php

<table>
<tr>
<td><B>ÍÎÂÎÑÒÈ</b></td>
</tr>
<tr>
<td><a href="autten.php?nkont=addnews">- Äîáàâèòü</a></td>
</tr>
<tr>
<td><a href="autten.php?nkont=delnews">- Óäàëèòü</a></td>
</tr>
<tr>
<td><a href="autten.php?nkont=Show_news">- Ïðîñìîòð</a></td>
</tr>
</table>

и последний ndef.php
<?
Error_Reporting(E_ALL & ~E_NOTICE);
$def_kont=show_news;
?>

ПОМОГИТЕ ПОЖАЛУЙСТО СКАЧИВАТЬ ГОТОВЫЕ СКРИПТЫ НЕ ХОЧУ Т.К ХОЧУ САМ НАУЧИТСЯ






Спустя 3 часа, 26 минут, 27 секунд (5.01.2008 - 16:27) Kolin написал(а):
попробуйте воспользоваться сессиями или кукисами, в кукисах все хранится на стороне клиента, да их и отключить можно в браузере, а при использовании сессий у клиента хранится только ее идентификатор... Кстати вместо паролей в куки или сессии лучше сувать их хэши, например md5 smile.gif

Спустя 1 день, 17 часов, 52 минуты, 12 секунд (7.01.2008 - 10:19) md5 написал(а):

Спустя 4 дня, 56 минут, 11 секунд (11.01.2008 - 11:16) mechanic написал(а):
ой-вэй.. и это в ветке для профи?? acute.gif
ладно, простите, собсна к делу:
Цитата(Kolin @ 5.1.2008, 13:27) [snapback]31341[/snapback]
Кстати вместо паролей в куки или сессии лучше сувать их хэши, например md5 smile.gif

т.е., если я верно понял, сохранять в куках md5('pass'), а можно поинтересоваться, зачем? как потом можно использовать этот хэш?
ведь при переходе на след.страницу будет срабатывать ф-ция авторизации, которой потребуется пароль в чистом виде, для сравнения его хэша с тем, что лежит в базе (здесь я предполагаю, что пароли в базе в чистом виде не хранятся, а лежат в md5 например), и как же быть? smile.gif

Спустя 19 минут, 8 секунд (11.01.2008 - 11:35) lenich написал(а):
Код
и как же быть

Сразу сравнить хеши? )

Спустя 6 минут, 15 секунд (11.01.2008 - 11:41) mechanic написал(а):
Цитата(lenich @ 11.1.2008, 8:35) [snapback]31645[/snapback]
Сразу сравнить хеши? )

этого ответа я и ждал smile.gif
т.е. хеш берется из куки и сравнивается с хэшем из базы, а чем это отличается от сравнения открытого пароля из куки с открытым паролем в базе? smile.gif))
этот способ как раз таки сильно ослабляет защиту сайта, ведь куки можно украсть и сэмулировать запрос через сокет с использованием украденного хэша.. может хакер и не будет знать исходного пароля, но нафиг он ему, если система авторизует хакера по хэшу.. главное ведь получить доступ wink.gif

Спустя 17 минут, 28 секунд (11.01.2008 - 11:58) lenich написал(а):
Код
этого ответа я и ждал

Типа поймали меня?)
Код
т.е. хеш берется из куки и сравнивается с хэшем из базы, а чем это отличается от сравнения открытого пароля из куки с открытым паролем в базе? smile.gif

Тем, что зная хеш, хакер может зайти только через куки, а зная сам пароль он может зайти и через авторизацию и через куки - сам пароль может использоваться чтобы сломать другие сервисы пользователя т.к. у меня например один и тотже пароль к 3 или 4 десяткам сайтов).
Код
этот способ как раз таки сильно ослабляет защиту сайта

А какой не ослабляет? А если мне в лом каждый раз вводить пароль и на хакеров мне вообщем-то параллельно т.к. у меня не сервер а персоналка и мои куки никакому хакеру не сдались?
PS Надо кстати юзать не md5($pass) а md5(md5($pass)) - говорят эффективность сильно увеличивается

Спустя 18 минут, 37 секунд (11.01.2008 - 12:17) mechanic написал(а):
Цитата(lenich @ 11.1.2008, 11:58) [snapback]31649[/snapback]
Тем, что зная хеш, хакер может зайти только через куки, а зная сам пароль он может зайти и через авторизацию и через куки - ну и сам пароль может использоваться чтобы сломать другие сервисы пользователя т.к. у меня например один и тотже пароль к 3 десяткам сайтов).

вывод один: конфиденц.инфу хранить надо в сессии, и желательно всеми способами уменьшить риск ее кражи, а вообще конечно это отдельная большая тема - защита web-приложений smile.gif

Цитата(lenich @ 11.1.2008, 11:58) [snapback]31649[/snapback]
А какой не ослабляет? А если мне в лом каждый раз вводить пароль и на хакеров мне вообщем-то параллельно т.к. у меня не сервер а персоналка и мои куки никакому хакеру не сдались?

ну это у тебя персоналка, а большинство сайтов все же на хостингах располагаются smile.gif и раз уж здесь обсуждается метод авторизации "от профи", считаю своим долгом указать на имеющийся риск

Код
$login=$login;
$pass=$pass;

а вот это в посте порадовало, сразу вспоминаю индийских программистов laugh.gif

Спустя 15 минут, 23 секунды (11.01.2008 - 12:32) lenich написал(а):
Код
$login=$login;
$pass=$pass;

Да это генеколог отжег)
Код
ну это у тебя персоналка, а большинство сайтов все же на хостингах располагаются

Ну так куки то мы на клиенте держим причем тут хостинг?).
Код
большая тема - защита web-приложений

Которая как-то в основном сводилась у меня к md5, aes, ssl и проверке приходящих данных )

Спустя 13 минут, 59 секунд (11.01.2008 - 12:46) mechanic написал(а):
Цитата(lenich @ 11.1.2008, 12:32) [snapback]31653[/snapback]
Ну так куки то мы на клиенте держим причем тут хостинг?).

эт я к вопросу о "лени вбивать пароли" и "параллельности хакеров" smile.gif
все тему пора уж закрывать..

Спустя 7 дней, 18 часов, 40 минут, 24 секунды (19.01.2008 - 07:27) Feiton написал(а):
Обработка формы aut.php
<?
session_start();
if (isset($_POST['(навание )'])){
$login = $_POST['login'];
$pasw = md5($_POST['pasw']);
$status = $_POST['status'];
$result = mysql_query("select * from user where login='$login' and pasw='$pasw'");
$row=mysql_fetch_array($result);
if ($row['login']!=="$login" || $row['pasw']!=="$pasw")
{
print "&lt;script language='Javascript'>function reload() {location = \"http://$_SERVER[SERVER_NAME]\"}; setTimeout('reload()', 0);</script>";
}
else {
$_SESSION['login']=$login;
$_SESSION['pasw']=$pasw;
print "&lt;script language='Javascript'>function reload() {location = \"(страница куда надо перейти).php?action=(форма для открытия)\"}; setTimeout('reload()', 0);</script>";}
}
?>

Файл autten.php проверка пользователя в базе данных
<?php session_start();
if (isset($_SESSION['login']) and ($_SESSION['pasw']) and ($_SESSION['status'])){
$login=$_SESSION['login'];
$pasw=$_SESSION['pasw'];
$result = mysql_query("select * from user where login='$login' and pasw='$pasw'");
$row=mysql_fetch_array($result);
if ($row['pasw']!=="$pasw")
{print "&lt;script language='Javascript'>function reload() {location = \"http://$_SERVER[SERVER_NAME]\"}; setTimeout('reload()', 0);</script>";}
else
{
print"(содержание станицы)";



//-----------Выход-----------------
if($_GET['action']=="exit")
{
session_destroy();
print "&lt;script language='Javascript'>function reload() {location = \"http://$_SERVER[SERVER_NAME]\"}; setTimeout('reload()', 0);</script>";
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.