@bernex

Как подписать и защитить данные запроса?

Стоит задача защитить запрос вида, от:
1. Перебора $ORDERID
2. Видимости $ORDERID
3. Знать что запрос пришел оттуда, где его создали, а не "вручную"

/payment/$ORDERID/
/payment/$USERID/

Вначале была идея: /payment/$ORDERID/$SIGN, где
$SIGN = hash( 'sha256', $orderID . $this->salt)
Но думаю этого недостаточно. Хочется не светить $ORDERID и $USERID

Есть ли смысл использовать:
$nonceSize = openssl_cipher_iv_length($METHOD);
        $nonce = openssl_random_pseudo_bytes($nonceSize);

        $ciphertext = openssl_encrypt(
            $message,
            $METHOD,
            $key,
            OPENSSL_RAW_DATA,
            $nonce
        );

        return base64_encode($nonce.$ciphertext);


Чтобы получить просто запрос, без подписи: /payment/$CRYPTEDDATA
$CRYPTEDDATA = crypt($ORDERID);

Или нужно еще добавлять хэш? Или шифрования достаточно? Не хочется усложнять до уровня бреда.
  • Вопрос задан
  • 344 просмотра
Решения вопроса 1
elevenelven
@elevenelven
Php Dev @ Amadeus
Не хочется усложнять до уровня бреда.

К сожалению, вам придется написать некоторую обертку для шифрования\дешифрования защищаемых сегментов. Если вы сможете это сделать так, чтобы код был гибкий и реиспользуемый, то это не будет бредом.

В частности, вы сможете сменить алгоритм шифрования на менее затратный по процессорному времени.

Я бы отказался от return base64_encode($nonce.$ciphertext); в пользу транслирования каждого байта шифртекста в hex (например), или вообще в какую-то 25-тиричную систему (англ. алфавит).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
MetaDone
@MetaDone
Хорошо сформулированный вопрос - 50% решения
https://tech.yandex.ru/money/doc/dg/reference/noti...
не очень понятно что вы хотите, но кажется схема как у яндекс-денег подойдет
Ответ написан
e_svirsky
@e_svirsky
Web Developer
Можно использовать шифрование aes 256 с секретом. от подбора защита и не видны данные userId и orderId.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы