[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Хочу критики на такой код авторизации
Oggy
Здравствуйте. Уделите пожалуйста немного времени...взгляните на "ето" и скажыте нормально ли сделано...
форма

$login = isset($_POST['login']) ? htmlspecialchars($_POST['login']) : null;
$password = isset($_POST['password']) ? htmlspecialchars($_POST['password']) : null;


<form action='adm.php' method='post'>
Логин:<input type='text' name='login' value="<?php echo $login ?>">
Пароль:<input type='password' name='password' value="<?php $password ?>">
<input
type='submit' name='check' value='Вход'>
<br>
</form>


проверка

public function check_password()
{

if(strlen($_POST['login']) > 2 && strlen($_POST['login']) < 10 && strlen($_POST['password']) > 2 && strlen($_POST['password']) < 10)
{

if(preg_match('#^[a-z]+$#u', $_POST['login']) || preg_match('#^[a-z]+$#u', $_POST['password']))
{
$this->connect_bd();
$result = mysql_query("SELECT `login`,`password` FROM `adm` WHERE `login` = '".mysql_real_escape_string($_POST['login'])."' and `password` = '".mysql_real_escape_string($_POST['password'])."'");

if($result)
{

if(mysql_num_rows($result) > 0)
{
echo "<script type='text/javascript'>
window.location = 'adm/index.html'
</script>"
;
unset($_POST['login']);
unset($_POST['password']);
}
else
{
echo "нету такой комбинацыи";
unset($_POST['login']);
unset($_POST['password']);
}
}
}

else
{
echo "Запретные символы";
}
}

else
{
echo "логин или пароль должен состоять от 3 и до 10 символов <br>";
}
}





Спустя 6 минут, 47 секунд (21.07.2012 - 23:36) Winston написал(а):
А пароли в открытом виде в базе лежат шоле? blink.gif

Спустя 8 минут, 5 секунд (21.07.2012 - 23:44) Oggy написал(а):
Цитата (Winston @ 21.07.2012 - 20:36)
А пароли в открытом виде в базе лежат шоле? blink.gif

опа...про мд5 забыл...ща буду делать
есть ещё лаги в коде ?

Спустя 1 час, 46 минут, 32 секунды (22.07.2012 - 01:31) phz написал(а):
есть.. что это:

echo "<script type='text/javascript'>
window.location = 'adm/index.html'
</script>"


а если js отключен... всё?

Спустя 6 часов, 59 минут, 32 секунды (22.07.2012 - 08:30) Oggy написал(а):
Цитата (phz @ 21.07.2012 - 22:31)
есть.. что это:

echo "<script type='text/javascript'>
window.location = 'adm/index.html'
</script>"


а если js отключен... всё?

а если монитор отключён ? smile.gif

Спустя 2 часа, 10 минут, 17 секунд (22.07.2012 - 10:41) phz написал(а):
Цитата (Oggy @ 22.07.2012 - 05:30)
Цитата (phz @ 21.07.2012 - 22:31)

а если монитор отключён ? smile.gif


смешно... я считаю что в таких скриптах нужно применять header, а не как переадресацию на js

Спустя 14 минут, 33 секунды (22.07.2012 - 10:55) Oggy написал(а):
Цитата (phz @ 22.07.2012 - 07:41)
Цитата (Oggy @ 22.07.2012 - 05:30)
Цитата (phz @ 21.07.2012 - 22:31)

а если монитор отключён ? smile.gif


смешно... я считаю что в таких скриптах нужно применять header, а не как переадресацию на js

если чесно я сначала недерами и делал
но потом он начал писать ошыбку Warning: Cannot modify header information - headers already sent by
и я нашол решение через js
Кстати когда писал ето попробывал опять через хедер зделать - Заработало smile.gif
Об*ясните пожалуйста что ето за ошыбка ?Warning: Cannot modify header information - headers already sent by

Спустя 4 часа, 9 минут, 12 секунд (22.07.2012 - 15:05) alexbel2404 написал(а):
Не люблю, когда в методах напрямую работают с $_POST, $_GET и т.д.

Спустя 3 часа, 28 минут, 28 секунд (22.07.2012 - 18:33) kamanch написал(а):
Цитата
Об*ясните пожалуйста что ето за ошыбка ?Warning: Cannot modify header information - headers already sent by

Там же написано английским по белому.
Ладно, английского не знаем, но куча онлайн переводчиков же есть.

Все заголовки должны быть отправлены ДО того, как скрипт начнет вывод текста.

Спустя 2 часа, 10 минут, 33 секунды (22.07.2012 - 20:44) alex12060 написал(а):
полная белеберда. Применение ООП в данном контексте является ненужным.

Спустя 46 минут, 4 секунды (22.07.2012 - 21:30) Oggy написал(а):
Цитата (alex12060 @ 22.07.2012 - 17:44)
полная белеберда. Применение ООП в данном контексте является ненужным.

почему ?

Спустя 6 минут, 3 секунды (22.07.2012 - 21:36) Oggy написал(а):
Цитата (h.n.81 @ 22.07.2012 - 15:33)
Цитата
Об*ясните пожалуйста что ето за ошыбка ?Warning: Cannot modify header information - headers already sent by

Там же написано английским по белому.
Ладно, английского не знаем, но куча онлайн переводчиков же есть.

Все заголовки должны быть отправлены ДО того, как скрипт начнет вывод текста.

да и ещё пишет что недолжно быть пробелов до начала пхп кода <?php
паходу так...

Спустя 3 минуты, 13 секунд (22.07.2012 - 21:39) kamanch написал(а):
В общем-то, это дело каждого - ОПП или нет. Ну хоцца так автору smile.gif

Oggy
Почему?
Как обычно проходит авторизация?
Смотрим сессию, если установлина, то контент на выдачу, если не установленна, то редирект на login.php, в котором 10 строк кода.
С точки зрения минимизации кода, можно и без ОПП

Цитата
да и ещё пишет что недолжно быть пробелов до начала пхп кода <?php
паходу так...

И скрипт сохраняй NO BOM

Спустя 6 минут, 13 секунд (22.07.2012 - 21:45) Oggy написал(а):
Цитата (h.n.81 @ 22.07.2012 - 18:39)
В общем-то, это дело каждого - ОПП или нет. Ну хоцца так автору smile.gif

Oggy
Почему?
Как обычно проходит авторизация?
Смотрим сессию, если установлина, то контент на выдачу, если не установленна, то редирект на login.php, в котором 10 строк кода.
С точки зрения минимизации кода, можно и без ОПП

Цитата
да и ещё пишет что недолжно быть пробелов до начала пхп кода <?php
паходу так...

И скрипт сохраняй NO BOM

согласен.
но ето невесь код.
если условие удовлитворительно то мы переходим к N странице .... проверка сессии там. Сделал так чтобы по УРЛУ немогли зайтию
Если пользователь по урлу мимо авторизацыи заходит на страницу то его кидает на начальную через хедер локейшен.

Спустя 3 минуты, 51 секунда (22.07.2012 - 21:49) kamanch написал(а):
Это делается в каком-нибудь header.php, который подключается в начале каждой страницы и там смотрим: если не авторизирован, то редирект на login.php

Спустя 14 минут, 3 секунды (22.07.2012 - 22:03) Oggy написал(а):
Цитата (h.n.81 @ 22.07.2012 - 18:49)
Это делается в каком-нибудь header.php, который подключается в начале каждой страницы и там смотрим: если не авторизирован, то редирект на login.php

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

Спустя 7 часов, 41 минута, 48 секунд (23.07.2012 - 05:45) alex12060 написал(а):
Oggy

Почему? Да потому,что я не вижу смысла в одном методе делать все это. Если уж писать ООП рассово верный код, то там как минимум должны быть такие методы, которые заменят всю эту чепуху.

Почему пароль должен быть меньше 10 символов?? Что за фигня?


$this->connect_bd();


Я более чем уверен, что до этого, у тебя где-то открывается соединение с базой.


$result = mysql_query("SELECT `login`,`password` FROM `adm` WHERE `login` = '".mysql_real_escape_string($_POST['login'])."' and `password` = '".mysql_real_escape_string($_POST['password'])."'");


Хранить в базе открытые пароли, без шифрования - самое последнее дело. За такие дела и под суд попасть можно.


preg_match('#^[a-z]+$#u', $_POST['password'])


За грань разумного. Ты специально делаешь, чтобы твоих пользователей взламывали по счету раз? Да и зачем здесь модификатор u? Ты просто так его влепил, не подумав? :)


echo "логин или пароль должен состоять от 3 и до 10 символов <br>";


Ввести 10-и символьный пароль при твоей проверке не получится.

В общем, что я скажу - тебе рано еще заниматься ООП. почитай лучше о том, что это за зверь такой, тут миллиард страниц с холиваром на эту тему, поищи в инете различные библиотеки с авторизацией, посмотри как там реализовано и старайся заняться уже по другому.

Спустя 2 часа, 44 минуты, 5 секунд (23.07.2012 - 08:29) Oggy написал(а):
Цитата (alex12060 @ 23.07.2012 - 02:45)
Oggy

Почему? Да потому,что я не вижу смысла в одном методе делать все это. Если уж писать ООП рассово верный код, то там как минимум должны быть такие методы, которые заменят всю эту чепуху.

Почему пароль должен быть меньше 10 символов?? Что за фигня?


$this->connect_bd();


Я более чем уверен, что до этого, у тебя где-то открывается соединение с базой.


$result = mysql_query("SELECT `login`,`password` FROM `adm` WHERE `login` = '".mysql_real_escape_string($_POST['login'])."' and `password` = '".mysql_real_escape_string($_POST['password'])."'");


Хранить в базе открытые пароли, без шифрования - самое последнее дело. За такие дела и под суд попасть можно.


preg_match('#^[a-z]+$#u', $_POST['password'])


За грань разумного. Ты специально делаешь, чтобы твоих пользователей взламывали по счету раз? Да и зачем здесь модификатор u? Ты просто так его влепил, не подумав? :)


echo "логин или пароль должен состоять от 3 и до 10 символов <br>";


Ввести 10-и символьный пароль при твоей проверке не получится.

В общем, что я скажу - тебе рано еще заниматься ООП. почитай лучше о том, что это за зверь такой, тут миллиард страниц с холиваром на эту тему, поищи в инете различные библиотеки с авторизацией, посмотри как там реализовано и старайся заняться уже по другому.

$this->connect_bd();
ты правильно сказал...вызывается заранее.
Чтобы сто раз непрописывать подключение воспользовался ООП и сделал отдельную функцыю.
Пароли в открытом виде - уже нет уже в мд5
пароль от 3 до 10 потомучто я так захотел ето тестовый сайт....переделаю )

Цитата

Да потому,что я не вижу смысла в одном методе делать все это. Если уж писать ООП рассово верный код, то там как минимум должны быть такие методы, которые заменят всю эту чепуху


согласен....можно было ето параскидать по разным функцыям а в етой проверке пароля их вызывать....ну такой я извращенец )
ООП доконца неосвоил -стараюсь

Цитата

Да и зачем здесь модификатор u? Ты просто так его влепил, не подумав? smile.gif

у меня проблемы с письмом нарусскому...необижайтесь)
u - хотел поставить ё

Спустя 9 часов, 37 минут, 42 секунды (23.07.2012 - 18:07) kamanch написал(а):
Цитата (Oggy @ 22.07.2012 - 19:03)
Цитата (h.n.81 @ 22.07.2012 - 18:49)
Это делается в каком-нибудь header.php, который подключается в начале каждой страницы и там смотрим: если не авторизирован, то редирект на login.php

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

Естественно.
Видимо, я плохо обяснил, а ты плохо понял smile.gif
Аксиома такова: Перед выводом любых данных, доступ к которым ограничен, необходимо в обязательном порядке проверять права на чтение / получение этих данных.

Теперь по пунктам:
У нас есть некий index.php
Он состоит из:
header.php - различные начальные установки, проверка авторизации и прочее, что необходимо каждой странице.
contetn.php собственно, сам контент
futer.php - копирайт и прочее в поддоне.

В header.php ты проверяешь, авторизирован ли пользователь? Нет? Значит редирект на авторизацию.

В contetn.php перед выводом контента для пользователя, ты проверяешь, имеет ли он к этому контенту доступ?

contetn.php никого не отправляет никуда, он просто или выводит контент, или, если какойто умник зашел к тебе на сайт не по index.php, а прямо в url вбил contetn.php, он и получил шиш с маслом. Хотя, конечно, ты можешь проявить благородство и написать "Уважаемый хакер, откуда вы знаете про существование страницы contetn.php? Мы предлагаем пройти вам по ссылке и зарегистрироваться" Но мне это лень делать. Так придется для каждого файла с классом такой цирк устраивать smile.gif

Спустя 3 часа, 5 минут, 16 секунд (23.07.2012 - 21:12) Oggy написал(а):
Цитата (h.n.81 @ 23.07.2012 - 15:07)
Цитата (Oggy @ 22.07.2012 - 19:03)
Цитата (h.n.81 @ 22.07.2012 - 18:49)
Это делается в каком-нибудь header.php, который подключается в начале каждой страницы и там смотрим: если не авторизирован, то редирект на login.php

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

Естественно.
Видимо, я плохо обяснил, а ты плохо понял :)
Аксиома такова: Перед выводом любых данных, доступ к которым ограничен, необходимо в обязательном порядке проверять права на чтение / получение этих данных.

Теперь по пунктам:
У нас есть некий index.php
Он состоит из:
header.php - различные начальные установки, проверка авторизации и прочее, что необходимо каждой странице.
contetn.php собственно, сам контент
futer.php - копирайт и прочее в поддоне.

В header.php ты проверяешь, авторизирован ли пользователь? Нет? Значит редирект на авторизацию.

В contetn.php перед выводом контента для пользователя, ты проверяешь, имеет ли он к этому контенту доступ?

contetn.php никого не отправляет никуда, он просто или выводит контент, или, если какойто умник зашел к тебе на сайт не по index.php, а прямо в url вбил contetn.php, он и получил шиш с маслом. Хотя, конечно, ты можешь проявить благородство и написать "Уважаемый хакер, откуда вы знаете про существование страницы contetn.php? Мы предлагаем пройти вам по ссылке и зарегистрироваться" Но мне это лень делать. Так придется для каждого файла с классом такой цирк устраивать :)

тоисть индекс.пхп строится ПРИМЕРНО так:

<body>

[php]
$obj_header=new class file_header();
$obj_header->header();

$content=new class file_content();
$content->content();

$footer=new class file_footer();
$footer->footer();
[/php]



правильно ?...

Спустя 26 минут, 20 секунд (23.07.2012 - 21:38) kamanch написал(а):
неа :)
require_once 'header.php';
require_once 'content.php';
require_once 'footer.php';

Спустя 8 минут, 54 секунды (23.07.2012 - 21:47) Oggy написал(а):
Цитата (h.n.81 @ 23.07.2012 - 18:38)
неа :)
require_once 'header.php';
require_once 'content.php';
require_once 'footer.php';

а если я захочу в наш "контент" передать параметр...например язык на котором он будет выводится.....мне ведь будет удобнее об*эктами делать а не рек*юре...правильно ?.....
$obj-new class hz()
obj->hz($name_lang);

Спустя 15 минут, 46 секунд (23.07.2012 - 22:03) kamanch написал(а):
Почитай про require, include
Только прочувствуй, что они делают smile.gif

Это не функция, а конструкция языка.
Когда php встречает require_once 'header.php', то вместо него он подставляет весь текст из header.php

И, если у тебя имеется index.php?id=123 , то этот $_GET['id'] доступен всему коду из header.php

Ты можешь написать include 'text.txt';
А в text.txt у тебя будет что угодно, вообще не код, а белеберда любая. Вот эту белеберду php и вставит вместо include 'text.txt';

Вот тут хорошо написано: http://www.php.su/functions/?include

Спустя 18 часов, 20 минут, 34 секунды (24.07.2012 - 16:23) Oggy написал(а):
Цитата (h.n.81 @ 23.07.2012 - 19:03)
Почитай про require, include
Только прочувствуй, что они делают smile.gif

Это не функция, а конструкция языка.
Когда php встречает require_once 'header.php', то вместо него он подставляет весь текст из header.php

И, если у тебя имеется index.php?id=123 , то этот $_GET['id'] доступен всему коду из header.php

Ты можешь написать include 'text.txt';
А в text.txt у тебя будет что угодно, вообще не код, а белеберда любая. Вот эту белеберду php и вставит вместо include 'text.txt';

Вот тут хорошо написано: http://www.php.su/functions/?include

как спомощь*ю require или require_once или unclude я смогу в свою контент передать параметр по которому будет он отображаться ?
параметр - ид языка , настройки доступа....

Спустя 2 часа, 55 минут, 14 секунд (24.07.2012 - 19:19) kamanch написал(а):
Ну ты чего это? :blink:
Я же вверху разжевал все.

в url имеем index.php?id=123

в header.php

$id = $_GET['id'];
Быстрый ответ:

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