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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Вход в систему(авторизация пользователя)
 
 автор: half.shade   (28.03.2007 в 01:43)   письмо автору
 
 

Посмотрите пожалуйста код авторизации и все ли здесь правильно?
Спасибо!
login_form- html форма авторизации

<?php
session_start
();
require_once(
"db_fns.php");
$get_login=$HTTP_POST_VARS["login"];
$get_passwd=$HTTP_POST_VARS["password"];
if(!isset(
$get_login)||!isset($get_passwd))
{
login_form("Sorry enter your login and password");
exit;
}
 if(isset(
$get_login)&& isset($get_passwd)){

        if(!
db_connect()){
    
login_form("Извините возникли технические неполадки <br>попробуйте зайти позже");    
    exit;
    }
    else{
        
$query="select * from users where login='$get_login' and passwd=password('$get_passwd')";
        
$results=mysql_query($query);
        if (
mysql_numrows($results)>0){
    list(
$id_user$first_name$second_name)=mysql_fetch_row($results);
            
$_SESSION['valid_user']=$first_name;
        
dispaly_index_page($header_1,$main_menu,$footer);
                }
                else {
                    
login_form("Извините но пользователь с таким именем и паролем не существует");
                }

    
    }
}
else 
login_form("Could not log you in"); 
?>

   
 
 автор: bronenos   (28.03.2007 в 05:13)   письмо автору
 
   для: half.shade   (28.03.2007 в 01:43)
 

1. когда вы присваиваете переменным значения из ПОСТ, то лучше их проверять не на isset, а на empty...
2. почему бы вам не воспользоваться $_POST
3. не надо делать два условия, одно из которых проверяет, если какое нибудь пустое, а второе, если оба заполнены
ставьте просто else
4. if плохое соединение else делаем запрос
можно без else - если выполнится exit, то сценарий дальше и не пойдет
4. у вас там опечатка [dispaly]

   
 
 автор: Trianon   (28.03.2007 в 09:48)   письмо автору
 
   для: bronenos   (28.03.2007 в 05:13)
 

К этому ожно добавить еще такие пункты.
6. deprecated mysql_numrows
7. запрос SELECT * вместо SELECT COUNT(*)
8. Отсутствие проверки magic quotes и экранирования спецсимволов, и как следствие -
9. Отсутствие хеширования паролей
возможная SQL-инъекция.
7,8,9 вкупе с выборкой по mysql_fetch_row при открытой возможности инъекции, вероятно, допускает атаку, при которой можно не только авторизоваться кем угодно, но и вытащить наружу из базы пароль любого пользователя.

Кака, короче....

   
 
 автор: zerocool   (28.03.2007 в 08:47)   письмо автору
 
   для: half.shade   (28.03.2007 в 01:43)
 

Еще одна опечатка

mysql_numrows($results)>0){ 

а надо

mysql_num_rows($results)>0){ 

   
 
 автор: bronenos   (28.03.2007 в 08:52)   письмо автору
 
   для: zerocool   (28.03.2007 в 08:47)
 

нет, numrows второе название этой же функции

   
 
 автор: Trianon   (28.03.2007 в 09:40)   письмо автору
 
   для: bronenos   (28.03.2007 в 08:52)
 

устаревшее и нерекомендованное к применению.

   
Rambler's Top100
вверх

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