Объяснение системы — проверка подписи интерфейса PHP

PHP API

Обзор

На работе мы всегда имеем дело с интерфейсами, кто-то вызывает чужие интерфейсы, а кто-то предоставляет интерфейсы для других.В этом процессе проверка подписи определенно неотделима.

При проектировании проверки подписи обязательно соблюдайте следующие пункты:

  • Изменяемость: подпись каждый раз должна быть разной.

  • Своевременность: своевременность каждого запроса, недействительного по истечении срока действия.

  • Уникальность: Каждая подпись уникальна.

  • Целостность: входящие данные могут быть проверены для предотвращения несанкционированного доступа.

Ниже в основном представлены некоторые часто используемые в работе методы шифрования и дешифрования.

Общая проверка

Пример: /api/login?username=xxx&password=xxx&sign=xxx

Отправитель и получатель согласовывают зашифрованное значение соли для создания подписи.

Образец кода:

Метод MD5 используется выше, и MD5 относится к одностороннему хеш-шифрованию.

Одностороннее хэш-шифрование

определение

Произвольная длинная входная строка преобразуется в выходную строку фиксированной длины, а получить входную строку из выходной строки сложно.Этот метод называется хеш-шифрованием с одним элементом.

Общие алгоритмы

  • MD5

  • SHA

  • MAC

  • CRC

преимущество

Возьмите MD5 в качестве примера.

  • Удобное хранение: после шифрования все они представляют собой строки фиксированного размера (32-разрядные), которым можно выделить место фиксированного размера для хранения.

  • Низкие потери: шифрование/шифрование имеет минимальные потери производительности.

  • Шифрование файлов: для проверки целостности огромного файла требуется только 32-битная строка.

  • Необратимый: необратимый в большинстве случаев, с хорошей безопасностью.

недостаток

  • Существует вероятность взлома методом грубой силы, и лучше всего повысить безопасность, добавив соль.

Сценарии применения

  • Для конфиденциальных данных, таких как пароли пользователей, параметры запроса, шифрование файлов и т. д.

Рекомендуемый способ хранения паролей

password_hash()Создайте хэш пароля, используя алгоритм одностороннего хеширования достаточной надежности.

Образец кода:

Ручной адрес PHP:

http://php.net/manual/zh/function.password-hash.php

Симметричное шифрование

определение

Один и тот же ключ можно использовать как для шифрования, так и для расшифровки данных, этот метод называется симметричным шифрованием.

Общие алгоритмы

  • DES

  • AES

AES — это обновленная версия DES с большей длиной ключа, большим количеством опций, большей гибкостью, более высокой безопасностью и более высокой скоростью.

преимущество

Алгоритм открытый, объем вычислений небольшой, скорость шифрования высокая, эффективность шифрования высокая.

недостаток

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

Сценарии применения

Шифрование относительно больших объемов данных или критически важных данных.

AES

Библиотеку классов шифрования AES легко найти в Интернете, обратите внимание наmcrypt_encryptиmcrypt_decryptметод!

Он устарел в версии PHP7.2, используется в новой версии.openssl_encryptиopenssl_decryptдва метода.

Пример кода (библиотека классов):

Образец кода:

результат операции:

Асимметричное шифрование

определение

Для шифрования и дешифрования требуются два ключа.Двумя ключами являются открытый ключ и закрытый ключ.Этот метод называется асимметричным шифрованием.

Общие алгоритмы

  • RSA

преимущество

По сравнению с симметричным шифрованием безопасность выше.Шифрование и дешифрование требуют разных ключей, и как открытый, так и закрытый ключи могут быть зашифрованы и расшифрованы друг с другом.

недостаток

Шифрование и дешифрование отнимают много времени и медленны, и подходят только для шифрования небольшого объема данных.

Сценарии применения

Он подходит для сценариев с высокими требованиями к безопасности, подходит для шифрования небольшого объема данных, таких как платежные данные, данные для входа и т. д.

RSA и RSA2

Имя алгоритма стандартное имя Примечание
RSA2 SHA256WithRSA Обеспечьте длину ключей RSA не менее 2048
RSA SHA1WithRSA Длина ключа RSA не ограничена, рекомендуется использовать более 2048 бит.

RSA2 обладает более сильными возможностями безопасности, чем RSA.

Ant Financial и Sina Weibo используют алгоритм RSA2.

Создайте открытый и закрытый ключи:

    openssl genrsa -out private_key.pem 2048

    openssl rsa -in private_key.pem -pubout -out public_key.pem

скопировать код

Выполните приведенную выше команду, она сгенерируетprivate_key.pemиpublic_key.pemдва файла.

Пример кода (библиотека классов):

Образец кода:

результат операции:

Некоторые скриншоты данных выглядят следующим образом:

JS-RSA

JSEncrypt: библиотека Javascript для выполнения шифрования, расшифровки и генерации ключей OpenSSL RSA.

Источник Git: https://github.com/travist/jsencrypt

Сценарии применения:

Когда мы выполняем функцию входа в WEB, мы обычно отправляем ее на сервер для проверки с помощью отправки формы или Ajax.

Чтобы предотвратить перехват пакетов, пароль для входа в систему необходимо один раз зашифровать (RSA), а затем отправить на сервер для проверки.

Его используют некоторые крупные компании, такие как Taobao, JD.com, Sina и т. д.

Образец кода не предоставляется, код, представленный в Git, очень полный.

Управление безопасностью ключей

Предпосылкой этих технологий шифрования для достижения безопасного эффекта шифрования являетсяКонфиденциальность ключей.

На практике ключи для разных сред должны быть разными (среда разработки, предрелизная среда, официальная среда).

Итак, как надежно хранить ключ?

переменная среды

Установите ключ в переменную среды и загружайте из переменной среды каждый раз.

Центр конфигурации

Храните ключи в центре конфигурации для унифицированного управления.

Политика истечения срока действия ключа

Установите срок действия ключа, например, сбрасывайте его раз в месяц.

Здесь я надеюсь, что большие ребята могут предложить новые идеи~

Инструмент отладки интерфейса

Postman

Мощный плагин Chrome для отладки веб-страниц и отправки HTTP-запросов на веб-страницы.

Этот не нуждается в представлении, все, должно быть, использовали его.

SocketLog

Источник Git: https://github.com/luofei614/SocketLog

Решены болевые точки:

  • В работающем API есть ошибка, и var_dump нельзя использовать для отладки в файле, потому что это повлияет на вызов клиента. Запись лога в файл не очень удобно просматривать.

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

SocketLog может решить вышеуказанные проблемы, вывод лога отладки в консоль браузера через WebSocket.

инструкции

  1. Установите и настройте плагины Chrome

  2. Установка сервера SocketLog

  3. Отладка с помощью SocketLog в PHP

  4. Настройка типов журналов и связанных параметров

Документация по онлайн-интерфейсу

После того, как интерфейс разработан, заказчику необходимо предоставить документацию по интерфейсу.Большая часть документации теперь написана в формате Markdown.

Есть также некоторые системы с открытым исходным кодом, которые вы можете скачать и установить на свой сервер.

Есть также некоторые онлайн-системы, которые можно использовать в Интернете, а также поддерживать экспорт в автономном режиме.

В зависимости от вашей ситуации выберите подходящую платформу для документов.

Часто используемые платформы документации интерфейса:

  • eolinker

  • Apizza

  • Yapi

  • RAP2

  • DOClever

расширять

1. Могут возникнуть сомнения в выборе HTTP и RPC.Конфигурация RPC framework сложнее.Почему следует выбирать RPC, когда очевидно, что можно использовать HTTP?

Ниже приводится краткое введение в разницу между HTTP и RPC.

Протокол передачи:

  • HTTP основан на протоколе HTTP.

  • RPC может быть как протоколом HTTP, так и протоколом TCP.

HTTP также является способом реализации RPC.

Расход производительности:

  • HTTP в основном реализован на основе JSON, а сериализация требует времени и производительности.

  • RPC может передаваться на основе двоичного кода, который потребляет меньше производительности.

Рекомендовать новую библиотеку сериализации, такую ​​как JSON, но более быструю и менее затратную, чем JSON.MessagePack.

Адрес официального сайта: https://msgpack.org/

Существуют также некоторые различия в управлении службами и настройке балансировки нагрузки.

используемые сцены:

Например, рекомендуется использовать интерфейс браузера, интерфейс приложения и сторонний интерфейс, HTTP.

Например, для вызовов службы внутри группы рекомендуется RPC.

У RPC меньшее потребление производительности, чем у HTTP, высокая эффективность передачи и удобное управление услугами.

Рекомендуемые RPC-фреймворки:Thrift.

2. Динамические токены

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

OTP: Одноразовый пароль Одноразовый пароль.

HOTP: одноразовый пароль на основе HMAC — это одноразовый пароль, зашифрованный на основе алгоритма HMAC.

TOTP: Одноразовый пароль на основе времени Одноразовый пароль на основе алгоритма отметки времени.

используемые сцены:

  • Корпоративный VPN-вход Двухфакторная аутентификация

  • Динамическая проверка пароля для входа на сервер

  • Динамический токен сущности для онлайн-банкинга и онлайн-игр

  • Динамический пароль банковского перевода

  • ...

резюме

В этой статье рассказывается о некоторых условиях, которые необходимо выполнить при проектировании проверки подписи: вариативность, своевременность, уникальность и целостность.

Также рассказали о некоторых методах шифрования: одностороннем хэш-шифровании, симметричном шифровании, асимметричном шифровании и проанализировали преимущества и недостатки различных методов шифрования,Вы можете свободно выбирать в соответствии с особенностями вашего бизнеса.

Предоставляются примеры кода, связанные с Aes, Rsa.

Общая онлайн-система, в которой можно писать документацию по интерфейсу.

Инструменты отладки интерфейса, используемые в процессе разработки, являются общими.

Расширение анализирует разницу между HTTP и RPC, введение динамических токенов и т.д.

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

Рекомендуемое чтение

Эту статью можно переслать, пожалуйста, укажите автора и источник для пересылки, спасибо!