С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
 Аватар для caesarnn
57 / 57 / 18
Регистрация: 22.05.2015
Сообщений: 607

Странно работает авторизация на PHP

13.01.2017, 17:27. Показов 644. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! У меня есть скрипт авторизации, основанный на COOKIE:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<form id="sign_in" method="POST">
                    <div class="msg">Вход в панель управления</div>
                    <div class="input-group">
                        <span class="input-group-addon">
                            <i class="material-icons">person</i>
                        </span>
                        <div class="form-line">
                            <input type="text" class="form-control" name="login" placeholder="Имя пользователя" required autofocus>
                        </div>
                    </div>
                    <div class="input-group">
                        <span class="input-group-addon">
                            <i class="material-icons">lock</i>
                        </span>
                        <div class="form-line">
                            <input type="password" class="form-control" name="pass" placeholder="Пароль" required>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-xs-8 p-t-5">
                            
                        </div>
                        <div class="col-xs-4">
                            <button class="btn btn-block bg-pink waves-effect" type="submit">Войти</button>
                        </div>
                    </div>
                    <div class="row m-t-15 m-b--20">
                        
                    </div>
                </form>
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
//запускаем сессию, где будут храниться данные о статусе авторизации пользователя: авторизован, или нет
if (isset($_COOKIE['pass']))
{
     echo "<script>document.location.href='****';</script>";
}
function validfilter($value,$regexp,$flags='usi') {
  if (preg_match('/'.$regexp.'/'.$flags, $value,$result) && $result[0]==$value) return $value;  
  else return false;
}
//получаем логин из формы
$login= validfilter($_POST['login'],'^([A-Za-z0-9-_]){3,20}$');
//получаем уже захэшированный пароль из формы
$pass = $_POST['pass'];
if ($pass) $pass=md5($pass);
//если обе переменные выбраны, то
if (isset ($login,$pass)) {
//подключаемся к базе данных, где хранятся логины пользователей и хэши их паролей
$link = mysqli_connect('localhost', '***', '***', '***') or die ("Не удаётся подключиться к базе данных");
//получаем хэш пароля пользователя из БД
$check = mysqli_query ($link, "SELECT login FROM *** WHERE login = '$login' AND  pass = '$pass'") or die ("Ошибка выполнения запроса");
//создаём ассоциативный массив из этого запроса
$checkarr = mysqli_fetch_array ($check);
//выводим хэш пароля в переменную
$userlogin = $checkarr['login'];
// если хэши пароля из БД и введённого в форме пароля совпадают, то
 
if ($userlogin==$login)  {
$link = mysqli_connect('localhost', '***', '***', '***') or die ("Не удаётся подключиться к базе данных");
    $unstr = md5(uniqid());
    $pass_salted = $unstr.$pass;
  setcookie ('pass', $pass_salted, time()+14400);
    $sethash = mysqli_query($link, "UPDATE *** SET hash = '$pass_salted' WHERE login = '$login'") or die ("Не удалось выполнить запрос");
 echo "<script>document.location.href='http://****';</script>";
}
 
}
?>
На "секретной странице" стоит проверка :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$conn = mysqli_connect('localhost', '***', '***', '***') or die ("Не удаётся подключиться к базе данных");
session_start();
if (isset($_COOKIE['pass'])) {
$pass = $_COOKIE['pass'];
$query = mysqli_query ($conn, "SELECT login FROM *** WHERE hash = '$pass'");
$check = mysqli_fetch_array($query);
$login = $check['login'];
}
else{
 echo "<script>document.location.href='http://***';</script>";
  exit;
}
Такой вопрос: если я авторизовываюсь на сайте в двух браузерах одновременно, то в одном из них пропадает переменная login (хотя меня никуда не переадресовывает). С чем это может быть связано?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.01.2017, 17:27
Ответы с готовыми решениями:

Не работает авторизация php, javascript. Что не так в коде?
Вот собственно код. При нажатии заполнении логина и пароля и нажатии на ВХОД. Форма пропадает, но авторизация с текстом...

Авторизация не работает, login.php
Решил я написать самодельный файловый хостинг,где у людей будет свой личный кабинет (после регистрации и авторизации,кочечно), и они в нём...

Php странно реагирует на ошибки
Здрасте все! Еще вчера сообщения об ошибках в коде пхп отображались прямо на экране. Сегодня я сделал ошибку...

5
Заблокирован
15.01.2017, 12:23
Цитата Сообщение от caesarnn Посмотреть сообщение
пропадает переменная login
Переменную браузер в любом случае не видит и видеть не должен. Он только может отобразить её значение.
Цитата Сообщение от caesarnn Посмотреть сообщение
есть скрипт авторизации, основанный на COOKIE:
Такое не бывает. Скрипт основан на логике и уникальном коде. Куки Вы устанавливаете в процессе обработки введенных значений.

Цитата Сообщение от caesarnn Посмотреть сообщение

PHP
1
2
3
4
if (isset($_COOKIE['pass']))
{
* * *echo "<script>document.location.href='****';</script>";
}
Что за ерунда? Переадресацию ява-скриптом делают только при крайней необходимости и только тогда, когда уже появляется вывод в браузер. На пыхе это делается так:
PHP
1
2
3
4
if (isset($_COOKIE['pass']))
{
* * header('Refresh: 1; URL=***.php');
}
Можно и так
PHP
1
header('Location: http://***.com');
Цитата Сообщение от caesarnn Посмотреть сообщение
(хотя меня никуда не переадресовывает). С чем это может быть связано?
Это связано с браузером, но никак не с кодом. Или не включены ява-скрипты или уже браузеру достала постоянная переадресация и он отключил эту возможность. Поймите, что так не делается. Вы делаете тормазнутые велосипеды. А в итоге, как обычно, говносайт. Где, блин, Ваша логика? Какая-то секретная страница. Что это вообще такое? Секретная для кого? Гугл один хрен вычислит. Ха-ха)
0
 Аватар для caesarnn
57 / 57 / 18
Регистрация: 22.05.2015
Сообщений: 607
15.01.2017, 14:43  [ТС]
Цитата Сообщение от valet_ Посмотреть сообщение
Какая-то секретная страница. Что это вообще такое? Секретная для кого? Гугл один хрен вычислит.
Не придирайтесь к словам. Страница, для отображения которой требуется авторизация.
Цитата Сообщение от valet_ Посмотреть сообщение
Такое не бывает. Скрипт основан на логике и уникальном коде. Куки Вы устанавливаете в процессе обработки введенных значений.
Да, возможно, не совсем правильно выразился. Скрипт использует файлы COOKIE для авторизации.
Проблему я уже увидел - у меня генерируется соль, которая уникальна для каждой авторизации. Вот она-то и глючит.
Цитата Сообщение от valet_ Посмотреть сообщение
Где, блин, Ваша логика?
Я находил множество примеров скриптов для авторизации в интернете, и на основе них написал свой велосипед. Если можете, то покажите, пожалуйста, какой должна быть, по Вашему мнению, правильная авторизация?

Добавлено через 7 минут
Цитата Сообщение от valet_ Посмотреть сообщение
Это связано с браузером, но никак не с кодом.
PHP
1
2
3
4
5
6
7
8
9
// соль пароля уникальна для каждой авторизации
 $unstr = md5(uniqid());
//и "солёный" пароль тоже
    $pass_salted = $unstr.$pass;
//я записываю в COOKIE хэшированный солёный пароль
setcookie ('pass', $pass_salted, time()+14400);
// и записываю его в БД
    $sethash = mysqli_query($link, "UPDATE *** SET hash = '$pass_salted' WHERE login = '$login'") or die ("Не удалось выполнить запрос");
 echo "<script>document.location.href='http://****';</script>";
Если я кладу в БД уникальный пароль, и авторизовываюсь ещё раз через другой браузер, то соль (и,следовательно, переменная pass_salted) будут другими. На странице, для доступа к которой требуется авторизация, стоит проверка
PHP
1
2
3
4
$pass = $_COOKIE['pass'];
$query = mysqli_query ($conn, "SELECT login FROM *** WHERE hash = '$pass'");
$check = mysqli_fetch_array($query);
$login = $check['login'];
Записанное в COOKIE значение не совпадёт со значением из БД, ведь хэш уже другой, а "старый" браузер об этом не знает!
Т.к. мы повторно авторизовались через другой браузер и "соль" пароля поменялась (в COOKIE браузера, через который мы авторизовались повторно и в базе данных тоже).
В "старом" браузере (где мы авторизовались изначально) в COOKIE записан совсем другой хэш, и поэтому, переменная $login не определена, т.к. MySQL запрос возвращает 0 строк.

Добавлено через 6 минут
Вы могли бы найти проблему, а не сказать, что код говно. Это я и без Вас знаю.
0
Заблокирован
15.01.2017, 18:56
caesarnn, я знаю, что такое соль, но у себя никогда не использовал. Считаю, что этого не требуется. Вы делаете хэш пароля по md5. Обратно получить пароль по хэшу невозможно. Я, например, у себя на сайтах хеширую пароль вместе с какой-нибудь хренью, которую никто не знает. Ну, типа, на всякий случай.
Например:
PHP
1
2
 #устанавливаем куку для безопасности
       setcookie ("hesh", md5($login.'бе-бе') ,time()+ $time_cookies ,'/');
Потом при проверке на каждой странице проверяем эту куку и сравниваем с хэшем в базе. В базу тоже заносим логин вместе с этим бе-бе по md5. Можно ку-ку или ха-ха... без разницы. Уверен, что вообще этого не надо... ну на всякий случай). Если кука не установлена - предлагаем зарегиться или еще что. Можно не куку, а сессию. Вот только кука удалиться, когда Вы это установите. А с сессиями бывает непонятка, если неправильно настроен сервер.

Добавлено через 10 минут
Вероятно, для Вас не логин, а пароль. Это я слил код дополнительной проверки. Но, принцип тот-же.
0
 Аватар для caesarnn
57 / 57 / 18
Регистрация: 22.05.2015
Сообщений: 607
15.01.2017, 20:16  [ТС]
Цитата Сообщение от valet_ Посмотреть сообщение
Обратно получить пароль по хэшу невозможно.
Можно получить по MD5-хэшу исходную строку, но это довольно-таки сложно.

Добавлено через 3 минуты
Цитата Сообщение от valet_ Посмотреть сообщение
Я, например, у себя на сайтах хеширую пароль вместе с какой-нибудь хренью, которую никто не знает.
Эту строку, которую Вы добавляете к логину, тоже можно вычислить.
Всё это делается с помощью т.н. радужных таблиц
0
Заблокирован
15.01.2017, 20:42
Цитата Сообщение от caesarnn Посмотреть сообщение
Эту строку, которую Вы добавляете к логину, тоже можно вычислить.
Всё это делается с помощью т.н. радужных таблиц
Это мало вероятно и возникновение такой возможности будет в процентном отношении вероятности меньше, чем взломают мой пароль на хостинге. Можно всё... даже пальчик в попу. Будем надеяться, что наши сайты - это не сайты демократов у пендосов и они ни кому и нахрен не усрались. А взломать можно любой сайт... было бы желание)

Добавлено через 17 минут
caesarnn, вот подумай сам. Кому приспичет ломать данные какого-то никчёмного юзера у тебя на сайте? Для админов и модераторов устанавливаются дополнительные проверки.
Я вот, например, подключаюсь к серверу по SSH протоколу. Есть прога для Винды (вероятно и для Линукса есть) putty.exe
Писалась она походу на плюсах или может на чистом Си. Но, это не важно. Дело в том, что любой мало-мало знающий прогер сможет такую же написать. Коннектимся к серверу. Логин обычно root и потом подбирай пароль сколько душе угодно. Вероятность небольшая, но возможность есть. А взлом акка какого-то сраного юзера никому и никогда не будет нужен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2017, 20:42
Помогаю со студенческими работами здесь

SQL в php странно себя ведет
$y = mysql_query(&quot;SELECT * FROM `itemsNal` WHERE `id_item` = &quot;. $item . &quot; and `color` = '$color_one' and `size` = '$size_one'&quot;); вот...

if, else if работает странно.
Написал программу html&gt; &lt;head&gt; &lt;title&gt;Roll Em!&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;div align=&quot;center&quot;&gt; &lt;h1&gt;Roll Em!&lt;/h1&gt; &lt;?php ...

Странно работает цикл while
есть цикл для ajax. раньше он выдавал нормальный результат в зависимости от введенного логина. может я несу бред, но он резко перестал...

Не работает PHP код. Файлы .php не обрабатываются, хотя, если занести в html, всё работает.
не могу разобраться с проблемой. установила денвер, вроде все работает, но как только начала заниматься выяснилось что файлы php не...

$_SERVER['HTTP_REFERER'] странно работает
У меня 2 файла - sender.php и to.php to.php: &lt;? echo $_SERVER; ?&gt; &lt;input type='button' onclick=&quot;location='sender.php'&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru