Real article, but still for testing
This commit is contained in:
parent
defb9bd34b
commit
97c46c0c03
2 changed files with 91 additions and 178 deletions
|
@ -1,178 +0,0 @@
|
||||||
# H1
|
|
||||||
## H2
|
|
||||||
### H3
|
|
||||||
#### H4
|
|
||||||
##### H5
|
|
||||||
###### H6
|
|
||||||
|
|
||||||
_Hello_
|
|
||||||
**world**
|
|
||||||
|
|
||||||
This is just a text for test, i.e. testing text,
|
|
||||||
so there should be no meaning, no colorful diagrams
|
|
||||||
with statistics that lie you.
|
|
||||||
|
|
||||||
Maybe I'd better use _"Lorem ipsum"_, but it is already
|
|
||||||
written in the another sample post.
|
|
||||||
But... hey, why not?
|
|
||||||
|
|
||||||
Lorem ipsum dolor sit amet, consequeter adipiscing elit
|
|
||||||
I forgot what's next
|
|
||||||
|
|
||||||
1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456
|
|
||||||
|
|
||||||
|Col1|Col2|Col3|
|
|
||||||
|:--:|:---|---:|
|
|
||||||
|Some|cool|data|
|
|
||||||
|12345678|11|00|
|
|
||||||
|
|
||||||
```js
|
|
||||||
console.log(Object.keys({a:'a',b:'b'}))
|
|
||||||
```
|
|
||||||
|
|
||||||
> Quotation
|
|
||||||
|
|
||||||
![Forest](/assets/forest.jpg)
|
|
||||||
|
|
||||||
1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456 1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456
|
|
||||||
|
|
||||||
1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456 1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456
|
|
||||||
|
|
||||||
1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456 1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456
|
|
||||||
|
|
||||||
1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456 1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456
|
|
||||||
|
|
||||||
1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456 1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456
|
|
||||||
|
|
||||||
1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456 1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456
|
|
||||||
|
|
||||||
1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456 1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456
|
|
||||||
|
|
||||||
1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456 1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789
|
|
||||||
|
|
||||||
## 123456
|
|
||||||
|
|
||||||
![Picture1](https://img2.goodfon.com/original/1920x1080/5/bb/river-forest-trees-water-rocks-mountains-snow-landscape-natu.jpg)
|
|
||||||
|
|
||||||
1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456 1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456
|
|
||||||
|
|
||||||
1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456 1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456
|
|
||||||
|
|
||||||
1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789 123456 1234567890 123456789012345678 90123456789012345678 901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890 123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789
|
|
||||||
12345678901234567 89012345678901234 56789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
||||||
1234567890123456789012 345678901234567890123456789012345 67890123456789012345678901234567890123456789
|
|
||||||
123456789
|
|
||||||
|
|
||||||
![Picture2](https://img4.goodfon.com/original/1920x1080/b/ba/kanada-ozero-les-kamni-reka-peizazh-luchi-kamen-priroda.jpg)
|
|
91
src/content/blog/20230725-crypto-auth.md
Normal file
91
src/content/blog/20230725-crypto-auth.md
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
# Способы аутентификации и TOTP
|
||||||
|
|
||||||
|
Доступ к любым конфиденциальным (и не очень) данным предоставляется определённому лицу. Для их получения, редактирования, удаления необходимо пройти аутентификацию -- дать понять системе разграничения доступа, что вы имеете право читать и изменять эти данные.
|
||||||
|
|
||||||
|
## Логин и пароль
|
||||||
|
Самый простой и распространённый вариант -- это связка "логин + пароль".
|
||||||
|
В качестве логина выбирается либо почта, либо никнейм, либо набор символов, но обязательно что-то уникальное.
|
||||||
|
Основная проблема такого метода -- аккаунт легко взломать, если использован слабый пароль. Поэтому в формах регистрации обычно устанавливается ограничение по минимальной длине и набору символов.
|
||||||
|
|
||||||
|
Небезопасно хранить пароли в открытом виде, их принято хэшировать. При запросе на вход сервер сопоставляет хэш из базы данных с хэшем введённого пользователем пароля. Совпадает? Возвращаем юзеру токен сессии, сгенерированный CSPRNG (криптобезопасным генератором псевдослучайных чисел), и связываем этот токен с IDшником аккаунта на бэкенде. Затем при выполнении любой операции проверяем токен и, если надо, получаем по айдишнику строку пользователя из БД (если надо узнать какие-то привилегии пользователя, например).
|
||||||
|
|
||||||
|
Однако, пароль "12345" или слабый алгоритм хэширования обеспечивает взлом подбором. Ещё проще, когда утекает база данных вместе с хэшами, которые можно ломать локально, на своём ПК.
|
||||||
|
Про соль и алгоритмы когда-нибудь потом, в другой статье. Да и соль не всегда спасает.
|
||||||
|
|
||||||
|
Код на PHP для понимания:
|
||||||
|
(Регистрацию делают примерно так же.)
|
||||||
|
```php
|
||||||
|
<?
|
||||||
|
// login.php
|
||||||
|
|
||||||
|
// Проверяем, что в данных POST
|
||||||
|
// есть необходимые параметры
|
||||||
|
if (isset($_POST, 'user') and isset($_POST, 'pswd')) {
|
||||||
|
echo('Not all parameters were passed in the request');
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = $_POST['user'];
|
||||||
|
$pswd = $_POST['pswd'];
|
||||||
|
|
||||||
|
// Подключение к БД
|
||||||
|
$db = new mysqli(
|
||||||
|
$_ENV['db_host'],
|
||||||
|
$_ENV['db_user'],
|
||||||
|
$_ENV['db_pswd'],
|
||||||
|
$_ENV['database'],
|
||||||
|
);
|
||||||
|
|
||||||
|
// Создание запроса через mysqli_stmt
|
||||||
|
$stmt = $db->stmt_init();
|
||||||
|
$stmt->prepare('SELECT Id, Hash FROM users WHERE Name = ?');
|
||||||
|
$stmt->bind_param('s', $user);
|
||||||
|
$stmt->execute();
|
||||||
|
|
||||||
|
// Нет строк с таким юзернеймом --
|
||||||
|
// следовательно, незарегистрирован
|
||||||
|
$stmt->store_result();
|
||||||
|
if ($stmt->num_rows < 1) {
|
||||||
|
echo('User is not registered');
|
||||||
|
$stmt->close();
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Вытаскиваем из результата столбцы
|
||||||
|
// Id => $uid (айдишник юзера)
|
||||||
|
// Hash => $hash (хэш пароля)
|
||||||
|
$stmt->bind_result($uid, $hash);
|
||||||
|
$stmt->fetch();
|
||||||
|
|
||||||
|
$stmt->close();
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
// Сопоставление
|
||||||
|
// введённого пароля -- $pswd
|
||||||
|
// и хэша из БД -- $hash
|
||||||
|
if (!password_verify($pswd, $hash)) {
|
||||||
|
echo('Incorrect password');
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Записываем в сессию айдишник,
|
||||||
|
// в дальнейшем можно будет по нему
|
||||||
|
// получать данные о юзере из БД
|
||||||
|
$_SESSION['uid'] = $uid;
|
||||||
|
echo('Your ID: ' . $uid);
|
||||||
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Одноразовый код (OTP)
|
||||||
|
Интернет-магазины и операторы связи сейчас продвигают более безопасный метод: аутентификация по одноразовой ссылке/коду, который приходит на почту или по SMS.
|
||||||
|
Для генерации одноразового кода используют различные алгоритмы, о них позже.
|
||||||
|
|
||||||
|
Можно создавать секретный ключ, с помощью которого будут генерироваться коды, при этом придётся его хранить в БД. Утечка = взлом, если известен алгоритм генерации.
|
||||||
|
|
||||||
|
А можно создать токен *входа*, связать его с ID юзера и положить в Redis или оперативную память.
|
||||||
|
Затем выслать ссылку с токеном на почту (по СМС проблематичнее, там дешевле будут короткие коды). Если прошло некоторое время и юзер так и не использовал ссылку, удаляем токен, через него зайти больше не получится. При первом же использовании токен тоже удаляем -- для идентификации лучше создавать токен *сессии*, обычно такой функционал автоматически предоставляют фреймворки.
|
||||||
|
|
||||||
|
Скомбинированный вариант: временный секретный ключ, на основе которого генерируется одноразовый код, отправляемый по E-Mail/SMS. Ключ не хранится в БД, плюс он временный, взлом почти невозможен.
|
||||||
|
|
||||||
|
## 2FA
|
||||||
|
Двухфакторная аутентификация, она же 2FA, -- мощный механизм защиты учётной записи.
|
Loading…
Add table
Reference in a new issue