Méthodes communes de vérification de signature API (implémentation PHP)

安安杰尼
Libérer: 2023-04-08 15:12:02
original
198686 Les gens l'ont consulté

Scénarios d'utilisation

De plus en plus de projets utilisent désormais le modèle de séparation front-end et back-end pour le développement. Les développeurs back-end utilisent des interfaces API pour transférer des données aux développeurs front-end à des fins de traitement et d'affichage. Dans certaines modifications plus importantes des interfaces de données, impliquant de l'argent, des informations utilisateur, etc., si les interfaces ne sont pas protégées et vérifiées, il est souvent facile pour quelqu'un de glisser l'interface de manière malveillante, ce qui entraîne d'énormes pertes.

Vérification de signature API

Nous introduisons ici une vérification de signature plus courante dans l'industrie pour crypter les paramètres de l'interface, qui présente les avantages suivants.

  • Unicité demandée : La signature calculée est unique et peut être utilisée à des fins de vérification.

  • Variabilité du paramètre : Le paramètre contient le paramètre timestamp, qui garantit que la signature calculée pour chaque requête est différente.

  • Actualité de la requête : Puisque la requête contient le paramètre d'horodatage de la requête en cours, le serveur peut vérifier l'horodatage et filtrer les requêtes qui dépassent l'actualité.

  • Sécurité : Même si la requête est capturée de manière malveillante et que les paramètres sont falsifiés de manière malveillante, la signature sera erronée et les paramètres ne pourront pas être modifiés.

La pratique rend la vérité réalité

1 Trier les données à signer de type carte (c'est-à-dire un ensemble de paires clé-valeur) en fonction de la taille de. la clé. Les paramètres de la carte sont triés par ordre alphabétique. Si les premières lettres sont identiques, ils sont triés par la deuxième lettre, et ainsi de suite. Par exemple,

{
    "timestamp": "2017-06-08 09:38:00",
    "format": "xml",
    "app_id": "aabbc",
    "cp_extend_info": "",
    "sign_type": "HMAC-SHA1",
    "sign": "abc"
}
Copier après la connexion

puis, après tri, cela devient

{
    "app_id": "aabbc",
    "cp_extend_info": "",
    "format": "xml",
    "sign_type": "HMAC-SHA1",
    "timestamp": "2017-06-08 09:38:00"
}
Copier après la connexion

Remarque : Si la carte contient un paramètre de signature (signe), la valeur clé de le paramètre doit être filtré. Participez à la signature. Veuillez ne pas participer à la signature des paramètres sans valeurs

2 Sérialisez la carte triée dans une chaîne à signer. être signé est

app_id=aabbc&format=xml&sign_type=HMAC-SHA1&timestamp=2017-06-08 09:38:00
Copier après la connexion

3. Utilisez la clé pour extraire la signature digest (hachage) de la chaîne à signer selon l'algorithme HMAC-SHA1 et encodez-la en base64 (pour faciliter la transmission et la comparaison explicites en supposant que). la clé de signature est test, la signature digest extraite est La valeur de base64_encode est

JqoEqPIVVor0eyRHMYiZftsycVo=
Copier après la connexion

Remarque : Étant donné que certaines données sont requises par le protocole HTTP, l'encodage d'URL doit être effectué pendant transmission réseau afin que le récepteur puisse recevoir les paramètres corrects. Mais si ce paramètre participe à la signature, alors la chaîne à signer doit être la valeur originale de la chaîne plutôt que la valeur de l'URLencoding.

Pratique du code

Exemple PHP

/**
 * 使用密钥生成HMAC-Sha1签名
 * @param array $params 请求参数
 * @param string $signKey 签名密钥
 * @return string
 */
function hmacSha1Sign($params,$signKey)
{
    ksort($params);
 
    $paramString = '';
    foreach ($params as $key => $value) {
        if (is_null($value) || $value=='' || $key == 'sign') {
            continue;
        }
        $paramString .= $key.'='.$value.'&';
    }
    $paramString = substr($paramString,0,-1);
    $sign = base64_encode(hash_hmac("sha1", $paramString, $signKey, $raw_output=TRUE));
    return $sign;
}
Copier après la connexion

Ce qui précède est la méthode de signature de vérification API couramment utilisée dans le développement quotidien. C'est très simple. et très utile. Bienvenue à suivre pour plus de tutoriels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
api
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!