Авторизация с использованием функции

B
На сайте с 31.03.2014
Offline
13
679

Здравствуйте. Не могу написать правильный код авторизации из двух частей, первая это функция с проверкой существования пользователя, вторая это блок с авторизацией в сессию:

function isUserExist() {

require_once 'dbconfig.php';

$login = $_POST['varr'];

$pass = $_POST['var'];

$file = "SELECT * FROM users WHERE login = \"$login\" and password = \"$pass\"";

$save = mysqli_query ($connection, $file);

$dese = mysqli_fetch_array($save);

mysqli_close($connection);

if (!empty($dese)) return true;

}

if (isUserExist($_POST['varr'], $_POST['var'])) {

if(isset($dese['login'], $dese['password'])) {

$_SESSION['name']=$dese['login'];

$_SESSION['pass']=$dese['password'];

}

Сразу напишу, что так работает:

function isUserExist() {

require_once 'dbconfig.php';

$login = $_POST['varr'];

$pass = $_POST['var'];

$filee = "SELECT * FROM users WHERE login = \"$login\" and password = \"$pass\"";

$save = mysqli_query ($connection, $filee);

$dese = mysqli_fetch_array($save);

if(isset($dese['login'], $dese['password'])) {

$_SESSION['name']=$dese['login'];

$_SESSION['pass']=$dese['password'];

}

}

if (isset($_POST['varr'], $_POST['var'])) {

isUserExist()

}

Но так не надо) Помогите пожалуйста

Оптимизайка
На сайте с 11.03.2012
Offline
396
#1
⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
Mad_Man
На сайте с 10.11.2008
Offline
162
#2

Bukwik, хранить пароли в открытом виде плохо. Точно также, как писать сегмент авторизации не имея в мозгах никаких знаний об инъекциях. Либо юзайте PDO, либо экранируйте данные на входе.

M
На сайте с 26.11.2008
Offline
51
#3

Вы везде по сайту в query добавляете не экранируемые данные? 😮

Живой проект? С такой скоростью скоро увидим вас в ветке - сайт заражен, что делать ))

Используйте хотя бы mysql_real_escape_string до передачи параметров в запрос.

<?php

function isUser($login = '', $pass = '') 

{
$login = mysql_real_escape_string($login, $link_to_db_connection);
$password = mysql_real_escape_string($pass, $link_to_db_connection);
$query = mysql_query("select id from users where login='".$login."' and password='".$password."'");
if(mysql_num_rows($query) > 0) return true;
else return false;
}

В коде

if(isUser) 

{
ваш код сессии, пишите в сессию ид и например хеш, а не пароль в чистом виде
}

В коде, что юзер авторизован проверка наличия хеша в сессии и его соответствие ид пользователя.

Как то так, если я правильно понял идею автора

Веб программирование, создание плагинов под любые CMS, разработка сайтов с нуля, помочь в настройке хостинга и переездах, очистка от вирусов и другие услуги для ваших проектов (http://www.maxgal.com)
K
На сайте с 03.06.2015
Offline
45
#4
maxgal:
$password = mysql_real_escape_string($pass, $link_to_db_connection);

И никто не зайдет потому что внутри функции нет переменной $link_to_db_connection

ТС, во-первых не авторизация, но аутентификация; во-вторых найдите и скачайте готовый класс, который и форму нарисует и проверит и покажет и сохранит и все такое. Сами вы ничего не напишите толком.

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

---------- Добавлено 11.08.2015 в 04:47 ----------

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

MYSQL PHP JS HTML CSS SEO TXT США СССР
B
На сайте с 31.03.2014
Offline
13
#5

Оптимизайка, Mad_Man, maxgal, kostyanet Спасибо вам большое. Я нахожусь на стадии обучения, пока слабое подобие, не живой проект)

kostyanet - с куками я вас понял, но сейчас мне необходимо сделать так)

maxgal - спасибо вам за код, но могли бы вы подправить мой код, чтобы сработал именно исходя из того, что там есть? Ещё скажите пожалуйста, для чего используется символ конкатенации здесь - '".$login."' .

B
На сайте с 31.03.2014
Offline
13
#6

Решил написать ответ, возможно кому-то пригодится:

$login = $_POST['varr'];

$pass = $_POST['var'];

function isUserExist($login, $pass) {

require_once 'dbconfig.php';

$login = mysqli_real_escape_string($connection,$login);

$pass = mysqli_real_escape_string($connection,$pass);

$filee ="SELECT * FROM users WHERE login = \"$login\" and password=\"$pass\"";

$save=mysqli_query($connection,$filee);

$dese = mysqli_fetch_array($save);

var_dump($dese);

mysqli_close($connection);

if(empty($dese)) {

return false;

} else{ return true;}

}

if (isUserExist($login, $pass)) {

$_SESSION['name'] = $login;

$_SESSION['pass'] = $pass;

}else{

echo "NET";

}

if (isset($_SESSION['name'], $_SESSION['pass'])) {

echo "<a href='logout.php'> Выход</a>";

echo " Вы успешно вошли ".$_SESSION['name'];

}else {

echo

"<a href=login.php> Вход</a>

<form method='POST' style='line-height:36px;'>

Login

<input type='text' name='varr'/>

<br>

Password

<input type='password' name='var'/><br>

<input type='submit' name=oki value=Woyti>

</form>";

}

B
На сайте с 31.03.2014
Offline
13
#7

Пропустил проверку на пустые поля в функции, после require_once 'dbconfig.php'; добавить if($login =="" and $pass=="") return false;

Mad_Man
На сайте с 10.11.2008
Offline
162
#8
Bukwik:
Пропустил проверку на пустые поля в функции, после require_once 'dbconfig.php'; добавить if($login =="" and $pass=="") return false;

А теперь настало время узнать о существовании объектов, глянуть где-нибудь как _действительно_ нужно писать на пыхе, делать проверки и лепить HTML. Под занавес можно выстрелить себе в ногу столько раз, сколько вызвано echo для вывода HTML.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий