Сессии и авторизация

14
Сессии и авторизация Web Артём Картасов

Upload: noveo

Post on 14-Apr-2017

38 views

Category:

Education


3 download

TRANSCRIPT

Page 1: Сессии и авторизация

Сессии и авторизацияWeb

Артём Картасов

Page 2: Сессии и авторизация

Ключевые понятия

• Идентификация - это заявление о том, кем вы являетесь;

• Аутентификация - предоставление доказательств, что вы на самом деле есть тот, кем идентифицировались;

• Авторизация - проверка, что вам разрешен доступ к запрашиваемому ресурсу;

Page 3: Сессии и авторизация

Аутентификация по паролю:

• HTTP Basic authentication :• username и password передаются в незашифрованном виде;• относительно безопасен при https;

• HTTP Digest authentication:• используются хэшированные username, password + nonce;• уязвима к man-in-the-middle атакам;

• Forms authentication:• нет стандарта, реализации специфичны для конкретных систем

Page 4: Сессии и авторизация

Пример Basic HTTP-аутентификации

<?phpif (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="My Realm"'); header('HTTP/1.0 401 Unauthorized'); echo 'Текст, отправляемый в том случае, если пользователь нажал Cancel'; exit;} else { echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>"; echo "<p>Вы ввели пароль {$_SERVER['PHP_AUTH_PW']}.</p>";}

Page 5: Сессии и авторизация

Способы передачи username и password:

1. URL query — небезопасный вариант, т. к. строки URL могут запоминаться браузерами, в логах, прокси и веб-серверами.

2. Request body — безопасный вариант, но он применим только для запросов, содержащих тело сообщения (такие как POST, PUT, PATCH).

3. HTTP header —оптимальный вариант, при этом могут использоваться и стандартный заголовок Authorization (например, с Basic-схемой), и другие произвольные заголовки.

Page 6: Сессии и авторизация

Сессии• Хранятся на сервере;

• Доступ к данным через суперглобальный массив $_SESSION;

• По умолчанию сессии работают в файловой системе;

• Запускаются session_start(), либо автоматически(php.ini) session.auto_start = 1

• Сессия завершает свою работу в конце php-скрипта,

• может быть завершена и вручную session_write_close();• Идентификатор сессии (session id):

• хранится в cookies;• передается через URL (не рекомендуется);

Page 7: Сессии и авторизация

Сессии. Пример

Регистрация переменной в сессии:

<?phpsession_start();if (!isset($_SESSION['count'])) { $_SESSION['count'] = 0;} else { $_SESSION['count']++;}

Отмена объявления переменной:

<?phpsession_start();unset($_SESSION['count']);?>

Page 8: Сессии и авторизация

Cookies

• Хранятся на клиенте;• Cookies являются частью HTTP-заголовка;• Cookies, отправленные серверу браузером клиента, будут включены в

суперглобальный массив $_COOKIE;

Page 9: Сессии и авторизация

Cookies. ПримерыУстановка cookies:

<?php$value = 'test';

setcookie("TestCookie", $value);/* срок действия 1 час */setcookie("TestCookie", $value, time()+3600);

Чтение cookies:

<?phpecho $_COOKIE["TestCookie"];// все cookiesprint_r($_COOKIE);

Удаление cookies:

<?php// установка даты истечения срока действия на час назадsetcookie ("TestCookie", "", time() - 3600);

Page 10: Сессии и авторизация

Безопасность. Сессии:

• Используйте только cookie. В php.ini:• session.use_cookies = 1• session.use_only_cookies = 1• session_cookie_httponly = 1

• Регенерируйте ID сессии при помощи session_regenerate_id(true) после логина или смены прав:

Page 11: Сессии и авторизация

Пароли. Пример

$hashed_password = crypt('mypassword'); // соль будет сгенерирована автоматически

if (hash_equals($hashed_password, crypt($user_input, $hashed_password))) { echo "Пароль верен!";}

Page 12: Сессии и авторизация

Пароли. Пример

<?php$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';if (password_verify('rasmuslerdorf', $hash)) { echo 'Password is valid!';} else { echo 'Invalid password.';}

<?phppassword_hash("rasmuslerdorf", PASSWORD_DEFAULT); // $2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq

Page 13: Сессии и авторизация

Безопасность. Пароли:• Запретите создавать простые пароли;• Защита от перебора паролей:

• ограничение попыток ввода (10 в минуту с одного IP достаточно); • CAPTCHA;

• Не храните пароль в явном виде - только хэш;• Используйте стойкие алгоритмы шифрования, например, bcrypt:

• bcrypt - не панацея, а лишь даёт вам время;• md5, sha1 и т.д. - не вариант, даже с солью;

Page 14: Сессии и авторизация

Альтернативные способы аутентификации

• Аутентификация по ключам доступа (access key, API key)• обязательно использовать защищенное соединение;

• Аутентификация по токенам:• “Активный” клиент (iOS/Android приложения)• “Пассивный” клиент (браузер. Пример: OAuth, OAuth2)