Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2014, 21:51   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию Оптимизация PHP-скрипта

Доброго времени суток! На сколько сильно данный код будет грузить сервер? На сколько велика вероятность того, что может отобразиться сразу несколько echo? Можно данный код сделать ещё компактнее?
PHP код:
<?php
include "db_connect.php";

$login $_POST['autlog']; // Получим логин
$password $_POST['autpas']; // Получим пароль
$mac $_POST['autmac']; // Получим MAC
// Проверка логина, пароля, MAC на пустоту
if (empty($login) || empty($password) || empty($mac)) {
    die;
}
$query "SELECT `login` FROM `autoriz` WHERE `login` = '".$login."'";
$result mysql_query($query);
$slogin mysql_fetch_array($result);
// Проверяем логин
if ($login == $slogin['login']) {
    
$query "SELECT `passw` FROM `autoriz` WHERE `login` = '".$login."'";
    
$result mysql_query($query);
    
$spassword mysql_fetch_array($result);
    
// Проверяем пароль
    
if ($password == $spassword['passw']) {
        
$query "SELECT `mac` FROM `autoriz` WHERE `login` = '".$login."'";
        
$result mysql_query($query);
        
$smac mysql_fetch_array($result);
        
// Проверяем MAC в таблице на пустоту
        
if (strlen($smac['mac'] <= 2)) {
            
// Первое подключения пользователя и MAC ещё нет в таблице. Запишем MAC в таблицу
            
$query "UPDATE autoriz SET mac = '".$mac."' WHERE `login` = '".$login."'";
            
$result mysql_query($query);
            echo 
"Login OK";
            die;
        }
        
// Проверяем MAC
        
if ($mac == $smac['mac']) {
            echo 
"Login OK";
        } else {
            echo 
"Login FAIL"// MAC неверен
        
}
    } else {
        echo 
"Login FAIL"// Пароль неверен
    
}
} else {
    echo 
"Login FAIL"// Логин неверен
}
?>

Последний раз редактировалось Shouldercannon; 31.07.2014 в 22:00.
Shouldercannon вне форума Ответить с цитированием
Старый 31.07.2014, 23:04   #2
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Проверять одним запросом логин и пароль. Если все ок, то записали в сессию, например, логин пользователя. После чего можно эту сессию детектить и выводить надпись "Привет, Вася Пупкин" Если нет, то выводите "Вы неверно ввели логин или пароль. Повторите или зарегистрируйтесь". Чтобы не грузили подбором паролей сервер, давайте 5 попыток, если кол-во попыток исчерпано, то отправляете в бан на 10-15 минут. Это тоже можно сделать с помощью сессий.
Какую функциональную нагрузку несет Мас, не понял. Что-то на@уиверчено непонятное.
Я бы переписал все, а не делал мутанта аторизация-регистрация. Каждый модуль должен решать свою задачу.

Последний раз редактировалось Gorychev; 31.07.2014 в 23:07.
Gorychev вне форума Ответить с цитированием
Старый 31.07.2014, 23:06   #3
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Если есть желание сделать скрипт компактнее – не нужно создавать лишние переменные, можно просто работать с переменными $_POST:
Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
PHP код:
$login $_POST['autlog']; // Получим логин
$password $_POST['autpas']; // Получим пароль
$mac $_POST['autmac']; // Получим MAC 
Вместо трёх запросов – выполняем один:
PHP код:
$query "SELECT * FROM `autoriz` WHERE `login` = '" mysql_real_escape_string($login) . "'"
Какой в этом смысл – если выводится одна и та же фраза:
Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
PHP код:
} else {
            echo 
"Login FAIL"// MAC неверен
        
}
    } else {
        echo 
"Login FAIL"// Пароль неверен
    
}
} else {
    echo 
"Login FAIL"// Логин неверен
}
?> 
Как вот юзер поймет, что именно он ввёл неправильно – если в любом случае ему выводит "Login FAIL" ?

Вместо вереницы "Login FAIL" в коде – проще и правильнее использовать переменную-флаг.
Ну и забыть пора про mysql_... уже – PDO или mysqli.
Andkorol вне форума Ответить с цитированием
Старый 07.08.2014, 20:34   #4
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
По умолчанию

это
Цитата:
$query = "SELECT `login` FROM `autoriz` WHERE `login` = '".$login."'";
ГК ибо взломать легко читай про mysql инъекции ну или через pdo делай
вот так
$this->upduser_stmt=$this->db->prepare("UPDATE siteuser
SET
siteuser_name=:name,
siteuser_age= : age,
siteuser_sex=:sex,
siteuser_phone=hone,
siteuser_email=:email,
siteuser_birth=:birth,
siteuser_activated=:activated
WHERE siteuser_id=:siteuserid");

$this->upduser_stmt->bindValue(':name',$user->name,PDO::PARAM_STR);
$this->upduser_stmt->bindValue(':sex',$user->sex,PDO::PARAM_INT);
$this->upduser_stmt->bindValue(':age',($user->age==''?'':$user->age),PDO::PARAM_INT);
$this->upduser_stmt->bindValue('hone',$user->phone,PDO::PARAM_STR);
$this->upduser_stmt->bindValue(':email',$user->email,PDO::PARAM_STR);
$this->upduser_stmt->bindValue(':siteuserid',$user->id,PDO::PARAM_INT);
$this->upduser_stmt->bindValue(':birth',$user->birth,PDO::PARAM_STR);
$this->upduser_stmt->bindValue(':activated',intval($use r->activated)>0?1:0,PDO::PARAM_INT) ;
$this->upduser_stmt->execute();

тогда инъекция не пройдет дай мне url я докажу
wanes101 вне форума Ответить с цитированием
Старый 11.08.2014, 08:48   #5
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Цитата:
дай мне url я докажу
Доказывать можете здесь каждый день: http://testasp.vulnweb.com/
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 11.08.2014, 11:56   #6
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
По умолчанию

да вот пожалуйста 10 минут и готово

если бы я сразу знал что там ms mysql а не просто mysql то быстрей бы сделал

Последний раз редактировалось wanes101; 11.08.2014 в 12:32.
wanes101 вне форума Ответить с цитированием
Старый 11.08.2014, 13:07   #7
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
По умолчанию

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

Последний раз редактировалось wanes101; 11.08.2014 в 16:57.
wanes101 вне форума Ответить с цитированием
Старый 11.08.2014, 21:20   #8
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Вау, да вы действительно круты! А чего ж не потрудились зайти на вкладку "about" и почитать пару абзацев там?
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможна ли оптимизация скрипта? Vadim39 Microsoft Office Word 4 27.06.2013 02:29
Запуск PHP скрипта Terikon JavaScript, Ajax 5 12.08.2012 16:39
Поиск PHP скрипта rf_projects Помощь студентам 2 13.07.2011 14:31
Оптимизация скрипта календаря Андрей Дмитренко JavaScript, Ajax 1 22.09.2010 09:11
Оптимизация PHP-скрипта: Что быстрее function или include? Виталий Желтяков PHP 18 08.07.2010 22:35