PHP и Sodium - Невозможно передать одноразовый номер публично в форме - PullRequest
0 голосов
/ 05 апреля 2019

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

Одноразовый номер создается с помощью:

$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES)

Когда я пытаюсь использовать извлеченныезначение (например ,odium_crypto_secretbox_open) образует либо скрытое поле (POST), либо URL-адрес (GET), возвращается следующая ошибка:

Uncaught SodiumException: размер nonce должен быть SODIUM_CRYPTO_SECRETBOX_NONCEBYTES байтов *1000* * * *

Я ценю, что размер строки nonce затрагивается, но я не знаю, как противостоять этой проблеме.

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

Любой совет будет принят с благодарностью.

1 Ответ

1 голос
/ 05 апреля 2019

Двоичные значения плохо транслируются при отправке в запросе, поэтому одной из вещей, которые вы могли бы рассмотреть, было бы преобразование необработанного одноразового значения с использованием bin2hex, добавление в качестве скрытого ввода и последующая обработка в обратном порядке с использованием hex2bin

$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$hex=bin2hex($nonce);
/* add the above $hex as the hidden input */

/* serverside decode the input*/
$bin=hex2bin($hex);


<form method='post'>
    <input type='hidden' name='nonce' value='<?php echo $hex;?>' />
    <!-- other elements -->
    <input type='submit' />
</form>


 /* serverside */   
 $bin=hex2bin( $_POST['nonce'] );

Обновление: Дополнительная информация об этих методах нативного натрия sodium_hex2bin и sodium_bin2hex

Как sodium_bin2hex(), sodium_hex2bin() устойчива к атаки по боковому каналу , а hex2bin () - нет.

...