Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> авторизация пользователей, [решение] 
V
    Опции темы
olegop
Дата 27.12.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 2.10.2007
Где: ПМР, Тирасполь

Репутация: нет
Всего: нет



XOTABIH, Тоже столкнулся с проблемой авторизации пользователей, полазил по инету, натолкнулся на статейку, там используется логин и пароль из текст-файла, я не много видоизменил, вот выложу, может поможет ... 

файлик авторизации (auth.php)
Код

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Авторизация</title>
</head>
<body>
<?php 
if(!defined("IN_ADMIN")) die;  // эта строчка запрещает прямое открытие файлов из закрытой зоны, надо прописывать в каждом файле закрытой зоны
function EchoForm()
{
return '
<center>
<div style="border:4px solid #666666; width:400px; padding-top:85px; padding-bottom:85px; background:#CCCCCC; margin-top:200px">
<table style="border:1px solid #666666; background:#EEEEEE; margin-top:10px">
<form action="index.php?auth=ok" method="post">
<tr>
     <td align="right"><font face="Verdana, Arial, Helvetica, sans-serif" style="font-size:12px">Логин:</font></td>
     <td><input style="border:1px solid #1F41B6" type="text" class="input" name="login"></td>
</tr>
<tr>
     <td><font face="Verdana, Arial, Helvetica, sans-serif" style="font-size:12px">Пароль:</font></td>
     <td><input style="border:1px solid #1F41B6" type="password" class="input" name="passw"></td>
</tr>
<tr>
     <td colspan="2" align="right">
     <input type="hidden" name="enter" value="yes"> 
     <input style="border:1px solid #1F41B6; font-family:Verdana, Arial, Helvetica, sans-serif; font-weight:bold; height:20; width:80px" class="button" type="submit" value="Вход">     </td>
</tr>
</form>
</table>
</div>
</center>
';
}

include_once($_SERVER['DOCUMENT_ROOT']."/includes/connect.php"); // эти три строчки 
$connect = new Connection(); // отвечают за 
$connect->Open(); // подключение к базе (поменяете сами)
session_start();  

if(!empty($_POST['enter'])) {
    $loginpost = @$_POST['login'];
    $passpost = @$_POST['passw'];
    $result = mysql_query("SELECT * FROM users WHERE login='$loginpost' AND passw='$passpost';");
    $row = mysql_fetch_array($result, MYSQL_ASSOC);
    $_SESSION['LoginForm'] = $row['login'];
    $_SESSION['PassForm'] = $row['passw'];
    $_SESSION['r'] = $row['r']; // эти две строки не обязательны, отвечают за права пользователя
    $_SESSION['rw'] = $row['rw'];
}
     
if(!empty($_POST['enter'])) {
    $_SESSION['login'] = $_POST['login'];
    $_SESSION['passw'] = $_POST['passw']; 
}

if(empty($_SESSION['login']) || $_SESSION['LoginForm'] != $_SESSION['login'] || $_SESSION['PassForm'] != $_SESSION['passw']) {
echo EchoForm();
die;
}
?>
</body>
</html>


индексная страница (index.php) через нее и будут подключаться файлы из закрытой зоны
Код

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>АдминкО</title>
</head>
<body>
<?php
define("IN_ADMIN", TRUE);  

include "auth.php";  

$auth = @$_GET['auth'];  

switch ($auth)  
{  
        case 'form' : include "form.php"; break;  
        case 'compile' : include "compile.php"; break;  
        case 'admin' : include "admin.php"; break;
        case 'clients': include("clients.php"); break;
        case 'exit' :
        unset($_SESSION['login']);
        unset($_SESSION['passw']);
        session_destroy();
        echo ':)';
        echo '<script language="Javascript">
        function reload() {location = "index.php"}; setTimeout("reload()", 1500)</script>';
        break;    
        default: include "admin.php";  
}  
?>
</body>
</html>

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

Добавлено через 9 минут и 22 секунды
В название не вчитался, Вы про регистрацию, Я про авторизацию )) ну ничего бывает ) 
PM MAIL   Вверх
skyboy
Дата 27.12.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260




M
skyboy
выделил из темы про написание скрипта регистрации

PM MAIL   Вверх
PrivateRayan
Дата 27.12.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 26.12.2007

Репутация: 1
Всего: 2



Несколько замечаний

Цитата(olegop @  27.12.2007,  11:15 Найти цитируемый пост)
$passpost = @$_POST['passw'];
    $result = mysql_query("SELECT * FROM users WHERE login='$loginpost' AND passw='$passpost';");

уж сколько раз твердили миру: ?passpost=' or 1=1
но но воз тот и поныне там...

session_start(); на большинстве нормальных систем будет выдавать ошибку

и я не смог постичь глубокий дзен конструкции
Цитата(olegop @  27.12.2007,  11:15 Найти цитируемый пост)
if(!empty($_POST['enter'])) {
    $_SESSION['login'] = $_POST['login'];
    $_SESSION['passw'] = $_POST['passw']; 
}
if(empty($_SESSION['login']) || $_SESSION['LoginForm'] != $_SESSION['login'] || $_SESSION['PassForm'] != $_SESSION['passw']) {
echo EchoForm();
die;
}

то есть, интуитивно я догазываюсь, что она связана с проверкой правильности пароля, но таким загадочным образом...
PM MAIL   Вверх
olegop
Дата 27.12.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 2.10.2007
Где: ПМР, Тирасполь

Репутация: нет
Всего: нет



Цитата(PrivateRayan @  27.12.2007,  13:13 Найти цитируемый пост)
Несколько замечаний


Цитата(olegop @  27.12.2007,  11:15 )
$passpost = @$_POST['passw'];
    $result = mysql_query("SELECT * FROM users WHERE login='$loginpost' AND passw='$passpost';");


уж сколько раз твердили миру: ?passpost=' or 1=1
но но воз тот и поныне там...


Ну тогда так 
Код

if(!empty($_POST['enter'])) {
    if (isset($_POST['login']) && isset($_POST['passw'])) {
      $loginpost = $_POST['login'];
      $passpost = $_POST['passw'];
    } else {
      $loginpost = '';
      $passpost = '';
    }
    $result = mysql_query("SELECT * FROM users WHERE login='$loginpost' AND passw='$passpost';");
    $row = mysql_fetch_array($result, MYSQL_ASSOC);
    $_SESSION['LoginForm'] = $row['login'];
    $_SESSION['PassForm'] = $row['passw'];
    $_SESSION['r'] = $row['r']; // эти две строки не обязательны, отвечают за права пользователя
    $_SESSION['rw'] = $row['rw'];
}


Цитата(PrivateRayan @  27.12.2007,  13:13 Найти цитируемый пост)

и я не смог постичь глубокий дзен конструкции

Цитата(olegop @  27.12.2007,  11:15 ) 
if(!empty($_POST['enter'])) {
    $_SESSION['login'] = $_POST['login'];
    $_SESSION['passw'] = $_POST['passw']; 
}
if(empty($_SESSION['login']) || $_SESSION['LoginForm'] != $_SESSION['login'] || $_SESSION['PassForm'] != $_SESSION['passw']) {
echo EchoForm();
die;



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

$_SESSION['login'] и $_SESSION['passw'] переменные содержащие значения переданные формой, которые сравниваются с $_SESSION['LoginForm'] и $_SESSION['PassForm'] значениями взятыми из таблицы пользователей, согласен не удобочитаемо, но я посчитал лишним их переприсваивать переменным в удобочитаемом виде )) впринципе много еще можно придумать вариантов условия сравнения, но у меня этот работает на ура ...
на на счет сессион_старт(); не знаю на юних системе (фрихе) все вполне работает как и на винде если ты имел ввиду платформы под системами ... а может я не правильно понял 
PM MAIL   Вверх
PrivateRayan
Дата 27.12.2007, 15:02 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 26.12.2007

Репутация: 1
Всего: 2



Первое ты не понял. Читай здесь: http://phpfaq.ru/slashes

Второе тоже. Все эти шаманские пляски, которые я процитировал, просто не нужны.
Надо всего лишь добавить после $row = mysql_fetch_array($result, MYSQL_ASSOC); один if. который будет проверять - есть в $row что-то, или нет. И если есть - то писать в сессию, а если нет - выдавать форму.

Добавлено через 1 минуту и 51 секунду
А session_start должна вызываться до всякого вывода в браузер. до всех этих <html>, <head> и <meta
Которые у тебя, кстати, два раза выдаются. W3C обрыдается просто, глядя на такую страничку =)
PM MAIL   Вверх
MoLeX
Дата 27.12.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



olegop, что бы не было такого
Цитата(PrivateRayan @  27.12.2007,  13:13 Найти цитируемый пост)
уж сколько раз твердили миру: ?passpost=' or 1=1


необходимо использовать md5(), тогда пусть хоть запишутся фсякой ерундой не чего не произойдет.

Код

....
$result = mysql_query("SELECT * FROM users WHERE login='".$loginpost."' AND passw='".md5($passpost)."'");
....

т.е. пусть злой дяди хакер подставить вот такую строчку passpost=' or 1=1 то после пропуска через md5() получится лабуда которая не как не сможет повредить твой скрипт


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
skyboy
Дата 27.12.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(MoLeX @  27.12.2007,  15:34 Найти цитируемый пост)
необходимо использовать md5()

оригинальная защита.
чем не устраивает mysql_real_escape_string
PM MAIL   Вверх
MoLeX
Дата 27.12.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



skyboy почему не устраивает, очень даже устраивает)))) просто через md5() - тоже способ решит проблему, а тем более если пассы хранятся в мд5 то почему бы и не использовать так?!


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1308 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.