You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 99-archive/126-csrf/article.md
+8-7Lines changed: 8 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -38,14 +38,16 @@ archive:
38
38
39
39
Иначе говоря, куки не гарантируют, что форму создал именно Вася. Они только удостоверяют личность, но не данные.
40
40
41
-
Типичный способ защиты сайтов -- это "секретный ключ" (`secret`), специальное значение, которое генерируется случайным образом и сохраняется в сессии посетителя. Его знает только сервер, посетителю мы его даже не будем показывать.
41
+
Типичный способ защиты сайтов -- это "секретный ключ" (`secret`), специальное значение, которое генерируется случайным образом при авторизации и сохраняется в сессии посетителя. Его знает только сервер, посетителю мы его даже не будем показывать.
42
42
43
-
Затем на основе ключа генерируется "токен" (`token`). Токен делается так, чтобы с одной стороны он был отличен от ключа, в частности, может быть много токенов для одного ключа, с другой -- чтобы было легко проверить по токену, сгенерирован ли он на основе данного ключа или нет.
43
+
Разумеется, для разных посетителей `secret` будет разным.
44
44
45
-
Для каждого токена нужно дополнительное случайное значение, которое называют "соль" `salt`.
45
+
Затем на основе ключа генерируется "токен" (`token`). Токен делается так, чтобы с одной стороны он был отличен от ключа `secret`, в частности, может быть много токенов для одного ключа, с другой -- чтобы было легко проверить по токену, сгенерирован ли он на основе данного ключа или нет.
46
+
47
+
Для этого для каждого токена используется дополнительное случайное значение, которое называют "соль" `salt`.
Это значение -- с одной стороны, случайное, с другой -- имея такой `token`, мы можем взять его первую часть `1234` в качестве `salt` и, зная `secret`, проверить по формуле, верно ли он вычислен.
60
+
Это значение -- с одной стороны, случайное, с другой -- получив такой `token` от пользователя, мы можем его проверить: разбить по символу двоеточия, взять его левую часть `1234` в качестве `salt` и, зная `secret`, запустить вычисление по формуле выше. Если мы получили то же самое, то `token` правильный, это не хакер.
59
61
60
-
Не зная `secret`, невозможно сгенерировать token, который сервер воспримет как правильный.
62
+
Обратим внимание: не зная `secret`, невозможно сгенерировать `token`, который сервер воспримет как правильный.
61
63
62
64
Далее, токен добавляется в качестве скрытого поля к каждой форме, генерируемой на сервере.
- Для защиты от атаки формы, которые генерирует `mail.com`, подписываются специальным токеном. Можно подписывать не все формы, а только те, которые осуществляют действия от имени посетителя, то есть могут служить объектом атаки.
127
129
- Для подписи XMLHttpRequest токен дополнительно записывается в куку. Тогда JavaScript с домена `mail.com` сможет прочитать её и добавить в заголовок, а сервер -- проверить, что заголовок есть и содержит корректный токен.
128
130
- Динамически сгенерированные формы подписываются аналогично: токен из куки добавляется как URL-параметр или дополнительное поле.
0 commit comments