проверка данных и сравнение при авторизации

Fake

Guest
проверка данных и сравнение при авторизации

привет всем...

перечитал множество тем по поводу авторизации но ответа на свои чет не нашел...

имеется вот такой скрипт
данные в функцию передаются из ПОСТа, достаточно ли такой проверки данных(и вообще нормальная ли она)? и какая на ваш счет проверка соответствия введеного и имеющегося(из базы)? $DB - класс конекта к мускулу где db запрос его посылка...
PHP:
function auth($name, $paswd) {
global $DB;
$name = htmlspecialchars($name);
$name = substr($name, 0, 30);
$pwd = htmlspecialchars($paswd);
$paswd = substr($paswd, 0, 35);
$z = $DB->db("SELECT * FROM `admins_site` WHERE `name`='$name' AND `pwd`='$pwd'");
$c = mysql_fetch_array($z);
if(!$c["name"] == $name && !$c["pwd"] == $paswd) :
die("<h1>Access denied</h1>");
elseif($c["name"] === $name && $c["pwd"] === $paswd) :
die("<h1>Access granted!</h1>");
//session_start();
//$auth = 1;
//session_register("auth");
endif;
}
}
везде стоят die т.к. сначала хочу точно быть уверен что остальное в порядке
 

Фанат

oncle terrible
Команда форума
достаточно.
ненормальная.

во-первых, обязательно к прочтению PHP FAQ: \"Кавычки \". Cоставление запросов mysql, слеши, экранирование кавычек.
во-вторых, по мелочи
- зачем htmlspecialchars?
- зачем код оформлен в виде функции?
- сравнение полученных из базы данных не имеет смысла. сравнение уже было в запросе. достаточно проверить, сколько строк вернул запрос
- смысл хитрой фишки с двумя проверками
if(!$c["name"] == $name && !$c["pwd"] == $paswd) :
elseif($c["name"] === $name && $c["pwd"] === $paswd) :
остался для меня загадкой.
- session_register("auth"); сотри, пока никто не видел, и беги в ман читать, как работать с сессиями.
 

Fake

Guest
ок... переписал...
Чтоб не плодить темы хочу спросить... есть функции mysql_connect() и mysql_pconnect() последняя открывает постоянный конект... какие между ними есть + и - ? и если открыть коннект в начале индексной страницы(т.к. с моим классом конекта к дб затруднительно использовать mysql_real_escape_string()), не каких "плохих" последствий не будет ?
 

Фанат

oncle terrible
Команда форума
какие между ними есть + и -
mysql_pconnect() - хуже. ей вообще пользоваться не нужно.
и если открыть коннект в начале индексной страницы(т.к. с моим классом конекта к дб затруднительно использовать mysql_real_escape_string()), не каких "плохих" последствий не будет ?
какую-то ты здесь фигню написал.
какая связь между соединением к базе и mysql_real_escape_string())?!
при чём здесь начало индексой страницы?
 

Fake

Guest
дело в том, что запрос к базе у меня идут через класс:
PHP:
$DB->db("SELECT ... ");
и при использовании mysql_real_escape_string()
PHP:
$DB->db("SELECT ...".mysql_real_escape_string($in)."...");
пхп мне естесно грит, что конекта к базе еще нет и поентому не могу использовать mysql_real_escape_string, поентому я и подумал в самом начале главной страници(весь контент у меня подгружается в главную) открыть постоянный конект к мускулу...
 

Фанат

oncle terrible
Команда форума
не понял.
у тебя класс при выполнеии каждого запроса открывает, выполняет, а потом ЗАКРЫВАЕТ соединение, что ли?
ну так не закрывай его просто!
 

Fake

Guest
даже если его не закрывать, когда я захожу на скрипт, всеравно пишет что нет соединения... выбраться из ситуации можно с добавлением еще сточки кода, но весь запрос(с конектом) мне больше нравился в одну строчку =)
 

Фанат

oncle terrible
Команда форума
не "даже если его не закрывать" а его ВООБЩЕ НИ В КОЕМ СЛУЧАЕ ЗАКРЫВАТЬ НЕЛЬЗЯ.
мне больше нравился в одну строчку
ну так инкапсулируй mysql_real_escape_string в свой супер-пупер-однострочно-гениальный мегакласс и будет тебе щастье.

только непонятно, почему советы, как тебе быть с твоим классом, ты спрашиваешь у посторонних.
 
Сверху