Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Логика системы авторизации пользователя

Сообщения:  [1-10]   [11-14] 

 
 автор: tvv123456   (07.04.2011 в 23:30)   письмо автору
 
   для: Manwen   (07.04.2011 в 21:23)
 

>Да, точно. Я же базе данных не передаю значения из полей ввода.
> Хотя эта проверка не помешает, мало ли.
Ну, я написал какая пакость может быть от этого "мало ли", и вообще когда составляете запросы к базе лучше в этом запросе и обрабатывать все входящие данные(предварительно почистив от маг. кавычек)

<?
//чистим POST от маг. кавычек если такие включены
//так как ПОСТ чистый, то спокойно можем делать всякие проверки
$sql "SELECT * FROM table WHERE filed1=".(int)$_POST['integer']."
 OR filed2="
.mysql_real_escape_string($_POST["string"]);
$query mysql_query($sql);
//и дальше можем использовать ПОСТы так как они не захламлены экранирующими слешами

-и никогда не будет конфликта при сравнении(то что я выше написал)
>А какие замечания?
Несущественные:
mysql_escape_string уже вроде как устарел
Очень много else подряд: для меня привычней, если условие не выполняеться(сравнение логинов вернуло false), то просто формируем отчет об ошибочке и завершаем работу скрипта. И не будет ни одного else и проще логику проследить. Но это мое субъективное мнение

  Ответить  
 
 автор: Manwen   (07.04.2011 в 22:59)   письмо автору
 
   для: cheops   (07.04.2011 в 22:32)
 

Думал как лучше :)
Спасибо Игорь Вячеславович за помощь. Буду теперь дальше двигаться.

  Ответить  
 
 автор: cheops   (07.04.2011 в 22:32)   письмо автору
 
   для: Manwen   (07.04.2011 в 21:42)
 

А зачем такие сложности? Злоумышленники все-равно до значений внутри сессии добраться не смогут.

  Ответить  
 
 автор: Manwen   (07.04.2011 в 21:42)   письмо автору
 
   для: cheops   (07.04.2011 в 19:37)
 

Если я в таблице сделаю еще одно поле, например "code" и при успешной проверке я буду в $_SESSION['id'] загонять хеш поля "code", а в другом фале буду проверять: есть ли этот хеш в $_SESSION['id'].

Это будет глупо или можно прибегнуть даже к такому способу?

  Ответить  
 
 автор: Manwen   (07.04.2011 в 21:23)   письмо автору
 
   для: tvv123456   (07.04.2011 в 18:29)
 

Да, точно. Я же базе данных не передаю значения из полей ввода. Хотя эта проверка не помешает, мало ли.
А какие замечания?

  Ответить  
 
 автор: cheops   (07.04.2011 в 19:37)   письмо автору
 
   для: Manwen   (07.04.2011 в 19:17)
 

Константу нет, но можно использовать переменную. Присвойте ей любое значение, хотя бы тоже true и проверяйте.

  Ответить  
 
 автор: Manwen   (07.04.2011 в 19:17)   письмо автору
 
   для: cheops   (07.04.2011 в 17:08)
 

А можно в сессию константу загнать? Например, в этой статье http://www.softtime.ru/info/articlephp.php?id_article=34 используется константа define("IN_ADMIN", TRUE); и она проверяется в каждом файле.
Вот только как бы мне эту проверку "элегантней" реализовать.

  Ответить  
 
 автор: tvv123456   (07.04.2011 в 18:29)   письмо автору
 
   для: Manwen   (07.04.2011 в 15:20)
 

Вот этот блок я все-таки считаю лишним,


<?php

        
if (!get_magic_quotes_gpc())
        {
            
$_POST['login'] = mysql_escape_string($_POST['login']);
            
$_POST['passw'] = mysql_escape_string($_POST['passw']);
        }


так как вы в запросе не используете ни
$_POST['login'] ни $_POST['passw']
, более того если вы храните в базе какой-нибудь не стандартный логин(d'artanyan, допустим) и будете в форме указывать его, то в $_POST['login'] вы получите d\'artanyan, а из базы вытащите d'artanyan, и в итоге долго будете мучаться и думать почему не срабатывает условие
<?
 
if ($_POST['login'] == mysql_result($usr0'user')) 


Думаю это можно считать ошибкой в логике

Есть еще пару замечаний, но они не очень существенные

  Ответить  
 
 автор: cheops   (07.04.2011 в 17:08)   письмо автору
 
   для: Manwen   (07.04.2011 в 16:41)
 

Сессия только вам доступна для редактирования - поместите в неё флаг, просто цифру 1. Без авторизации этот флаг не получить и хэш храниться не будет, а то мало ли где выведется случайно.

  Ответить  
 
 автор: Manwen   (07.04.2011 в 16:41)   письмо автору
 
   для: cheops   (07.04.2011 в 16:22)
 

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

Я пробовал подставлять константу при успешной авторизации, к примеру так: if(!defined("IN_ADMIN")) die; , но другой файл не видит что я авторизовался и прерывает выполнение.

  Ответить  

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования