Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (3) [1] 2 3  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Как принудительно разавторизировать пользователя?, Уязвимость сессий
Ri_Silentium  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 42528
На форуме: 1 год, 5 месяцев, 15 дней
Карма:




Здравствуйте! Мне дали задание уничтожить сессию пользователя принудительно, т.е. я являюсь администратором сайта и мне нужно изменить код так, чтобы не только пользователь мог самостоятельно выйти, но и я могла бы уничтожить его сессию в любой момент... Подскажите как изменить код? user posted image
  
<?php header('Content-type: text/html; charset=utf-8')?>
<?
session_start();?>
<html>
<link
href="css/style.css" rel="stylesheet">
<?php
include "menu.php";?>
<br><br><br>
<?php

include "config.php";
echo "Авторизация";
if(isset($_POST[enter]))
{
$e_login=$_POST[e_mail];
$e_password=md5($_POST[e_password]);
$query=mysql_query("SELECT * FROM aftorization WHERE mail='$e_login'");
$user_data=mysql_fetch_array($query);
if($user_data[password]==$e_password)
{
$_SESSION[name]=$e_login;
}
else
{ echo "Неверный логин";
}
}

if(isset($_POST[logout]))
{
unset($_SESSION[name]);
session_destroy();
}
?>
<?php

if(isset($_SESSION[name]))
{
echo 'Вам разрешён доступ в админ.панель<br>
<a href="admin/site.php">Нажмите, чтобы перейти</a>
<form method="post" action="aftorization.php">
<input type="submit" name="logout" value="logout" required /><br>'
;
}
else
{
echo '<form method="post" action="aftorization.php">
<input type="text" name="e_mail" required /><br>
<input type="password" name="e_password" required /><br>
<input type="submit" name="enter" value="Вход"/>

</form>'
;
}
?>

</html>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2381
Пользователь №: 27172
На форуме: 6 лет, 3 месяца, 26 дней
Карма: 76




Нужно хранить id сессии всех пользователей, потом уже по id удалять когда надо.
Или генерировать какой нибудь ключ и хранить его в базе и в сессии пользователя, делать проверку что $_SESSION['key'] == $dbKey;
Если нужно выкинуть, просто генерируешь в базе другой ключ, а когда пользователь заходит на сайт со своей сессией, ключи не сходятся и его выкидывает.


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ri_Silentium  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 42528
На форуме: 1 год, 5 месяцев, 15 дней
Карма:




Цитата (Arh @ 2.03.2016 - 16:50)
Нужно хранить id сессии всех пользователей, потом уже по id удалять когда надо.
Или генерировать какой нибудь ключ и хранить его в базе и в сессии пользователя, делать проверку что $_SESSION['key'] == $dbKey;
Если нужно выкинуть, просто генерируешь в базе другой ключ.

Спасибо за ответ, а как это реализовать?((
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2381
Пользователь №: 27172
На форуме: 6 лет, 3 месяца, 26 дней
Карма: 76




Для начала создай поле "hash" в таблице с пользователями.
Потом добавить его сюда
if($user_data['password'] == $e_password) {

$_SESSION['name'] = $e_login;
$_SESSION['hash'] = $user_data['hash'];

}


Получается при авторизации через форму, пользователи получат hash.
Потом тебе надо в проверку добавить.

if(isset($_SESSION['hash']) && $_SESSION['hash'] == $user_data['hash']) {

echo 'Вам разрешён доступ в админ.панель<br>
<a href="admin/site.php">Нажмите, чтобы перейти</a>
<form method="post" action="aftorization.php">
<input type="submit" name="logout" value="logout" required /><br>'
;

} else {

echo '<form method="post" action="aftorization.php">
<input type="text" name="e_mail" required /><br>
<input type="password" name="e_password" required /><br>
<input type="submit" name="enter" value="Вход"/>
</form>'
;

}


Сверять hash пользователя с hash который лежит в базе.
Сейчас они у всех пустые будут, потом когда захочешь выкинуть пользователя, делаешь UPDATE запрос для поля hash, меняешь его на любое значение, на NOW() например.
Получается в базе будет новое значение, а у пользователя старое, соответственно условие не сработает и ему придётся заполнять форму.


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22932
Пользователь №: 20039
На форуме: 7 лет, 7 месяцев, 20 дней
Карма: 608




Ri_Silentium
if(user == 1) {
session_unset();
session_destroy();
}

Под "user" твой идентификатор ID пользователя, а под 1 ставь кого надо выбить.

С тобой стороны у тебя не ID, а name, значит по name сделай. Убить сессию у тебя есть в ВЫХОДЕ, вот добавь туда ещё одно условие:
if(нажали кнопку выхода ИЛИ пользователь == логин такой-то) {


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11966
Пользователь №: 23195
На форуме: 7 лет, 4 дня
Карма: 435

Трезвый :
7 лет, 11 месяцев, 3 дня


Цитата (Ri_Silentium @ 2.03.2016 - 16:20)
Уязвимость сессий

у тебя там есть кое-что поинтересней

Цитата (Ri_Silentium @ 2.03.2016 - 16:20)
$e_login=$_POST[e_mail];
// ...
$query=mysql_query("SELECT * FROM aftorization WHERE mail='$e_login'");


Свернутый текст
user posted image


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ri_Silentium  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 42528
На форуме: 1 год, 5 месяцев, 15 дней
Карма:




Цитата (Invis1ble @ 2.03.2016 - 19:06)
Цитата (Ri_Silentium @ 2.03.2016 - 16:20)
Уязвимость сессий

у тебя там есть кое-что поинтересней

Цитата (Ri_Silentium @ 2.03.2016 - 16:20)
$e_login=$_POST[e_mail];
// ...
$query=mysql_query("SELECT * FROM aftorization WHERE mail='$e_login'");


Свернутый текст
user posted image

Простите, я только начала изучать php и много не знаю... Стесняюсь спросить, но что означает ваше "кое-что поинтересней":)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11966
Пользователь №: 23195
На форуме: 7 лет, 4 дня
Карма: 435

Трезвый :
7 лет, 11 месяцев, 3 дня


Цитата (Ri_Silentium @ 2.03.2016 - 19:20)
Стесняюсь спросить, но что означает ваше "кое-что поинтересней":)
Цитата (Ri_Silentium @ 2.03.2016 - 19:20)
Простите, я только начала изучать php и много не знаю...

тогда вдогонку советую в начале скрипта поставить:
error_reporting(E_ALL);
ini_set('display_errors', 'On');


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 1 год, 5 месяцев, 16 дней
Карма: 7




Ri_Silentium
по поводу
Цитата
$e_login=$_POST[e_mail];
-----
$query=mysql_query("SELECT * FROM aftorization WHERE mail='$e_login'");


Я думаю что тебе как минимум надо сделать вот так
$e_login=htmlspecialchars(trim($_POST[e_mail]));
-----
$query=mysql_query("SELECT * FROM aftorization WHERE mail='".$e_login."'");
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ri_Silentium  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 42528
На форуме: 1 год, 5 месяцев, 15 дней
Карма:




Цитата (Astin @ 3.03.2016 - 06:47)
Ri_Silentium
по поводу
Цитата
$e_login=$_POST[e_mail];
-----
$query=mysql_query("SELECT * FROM aftorization WHERE mail='$e_login'");


Я думаю что тебе как минимум надо сделать вот так
$e_login=htmlspecialchars(trim($_POST[e_mail]));
-----
$query=mysql_query("SELECT * FROM aftorization WHERE mail='".$e_login."'");

Спасибо, а по поводу принудительной разавторизации что сможете подсказать?smile.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 1 год, 5 месяцев, 16 дней
Карма: 7




Цитата
Спасибо, а по поводу принудительной разавторизации что сможете подсказать?smile.gif


Вот не могу, я сам только начинающий. Советую побольше читать мануал и
всегда подготавливать запросы.

А так вообще-то Arh тебе же привел пример с ключом в сессии, так вот и реализуй его

Это сообщение отредактировал Astin - 3.03.2016 - 07:00
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kaww  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1788
Пользователь №: 20757
На форуме: 7 лет, 5 месяцев, 25 дней
Карма: 187




Цитата (Astin @ 3.03.2016 - 02:47)
Я думаю что тебе как минимум надо сделать вот так

Не пиши ерунды. Это никак не защитит от инъекции. В документации указано как правильно эскейпить данные.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 1 год, 5 месяцев, 16 дней
Карма: 7




Цитата (kaww @ 3.03.2016 - 07:01)
Цитата (Astin @ 3.03.2016 - 02:47)
Я думаю что тебе как минимум надо сделать вот так

Не пиши ерунды. Это никак не защитит от инъекции. В документации указано как правильно эскейпить данные.

Ну так он же выбирает таблицу, а не записывает данные в нее.

Тогда если неправильно написал, напиши как надо.

ТС, привел же код авторизации, а не код с помощью которого он записывает данные в таблицу
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11966
Пользователь №: 23195
На форуме: 7 лет, 4 дня
Карма: 435

Трезвый :
7 лет, 11 месяцев, 3 дня


Astin
чтобы не писать ерунду - прочти хотя бы статью, ссылку на которую я давал выше


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 1 год, 5 месяцев, 16 дней
Карма: 7




Хорошо, больше не буду писать ерунды
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (3) [1] 2 3  Закрытая темаСоздание новой темыСоздание опроса