Skip to content

Commit 1158bbd

Browse files
committed
minor fixes
1 parent d9e9b3b commit 1158bbd

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

99-archive/126-csrf/article.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,16 @@ archive:
3838

3939
Иначе говоря, куки не гарантируют, что форму создал именно Вася. Они только удостоверяют личность, но не данные.
4040

41-
Типичный способ защиты сайтов -- это "секретный ключ" (`secret`), специальное значение, которое генерируется случайным образом и сохраняется в сессии посетителя. Его знает только сервер, посетителю мы его даже не будем показывать.
41+
Типичный способ защиты сайтов -- это "секретный ключ" (`secret`), специальное значение, которое генерируется случайным образом при авторизации и сохраняется в сессии посетителя. Его знает только сервер, посетителю мы его даже не будем показывать.
4242

43-
Затем на основе ключа генерируется "токен" (`token`). Токен делается так, чтобы с одной стороны он был отличен от ключа, в частности, может быть много токенов для одного ключа, с другой -- чтобы было легко проверить по токену, сгенерирован ли он на основе данного ключа или нет.
43+
Разумеется, для разных посетителей `secret` будет разным.
4444

45-
Для каждого токена нужно дополнительное случайное значение, которое называют "соль" `salt`.
45+
Затем на основе ключа генерируется "токен" (`token`). Токен делается так, чтобы с одной стороны он был отличен от ключа `secret`, в частности, может быть много токенов для одного ключа, с другой -- чтобы было легко проверить по токену, сгенерирован ли он на основе данного ключа или нет.
46+
47+
Для этого для каждого токена используется дополнительное случайное значение, которое называют "соль" `salt`.
4648

4749
Формула вычисления токена:
48-
```
50+
```js
4951
token = salt + ":" + MD5(salt + ":" + secret)
5052
```
5153

@@ -55,9 +57,9 @@ token = salt + ":" + MD5(salt + ":" + secret)
5557
2. Для нового токена сгенерируем `salt`, например пусть `salt="1234"`.
5658
3. `token = "1234" + ":" + MD5("1234" + ":" + "abcdef") = "1234:5ad02792a3285252e524ccadeeda3401"`.
5759

58-
Это значение -- с одной стороны, случайное, с другой -- имея такой `token`, мы можем взять его первую часть `1234` в качестве `salt` и, зная `secret`, проверить по формуле, верно ли он вычислен.
60+
Это значение -- с одной стороны, случайное, с другой -- получив такой `token` от пользователя, мы можем его проверить: разбить по символу двоеточия, взять его левую часть `1234` в качестве `salt` и, зная `secret`, запустить вычисление по формуле выше. Если мы получили то же самое, то `token` правильный, это не хакер.
5961

60-
Не зная `secret`, невозможно сгенерировать token, который сервер воспримет как правильный.
62+
Обратим внимание: не зная `secret`, невозможно сгенерировать `token`, который сервер воспримет как правильный.
6163

6264
Далее, токен добавляется в качестве скрытого поля к каждой форме, генерируемой на сервере.
6365

@@ -126,4 +128,3 @@ token = salt + ":" + MD5(salt + ":" + secret + ":" + fields.money)
126128
- Для защиты от атаки формы, которые генерирует `mail.com`, подписываются специальным токеном. Можно подписывать не все формы, а только те, которые осуществляют действия от имени посетителя, то есть могут служить объектом атаки.
127129
- Для подписи XMLHttpRequest токен дополнительно записывается в куку. Тогда JavaScript с домена `mail.com` сможет прочитать её и добавить в заголовок, а сервер -- проверить, что заголовок есть и содержит корректный токен.
128130
- Динамически сгенерированные формы подписываются аналогично: токен из куки добавляется как URL-параметр или дополнительное поле.
129-

0 commit comments

Comments
 (0)