Explication détaillée des étapes de vérification de sécurité pour l'interface API de développement PHP

php中世界最好的语言
Libérer: 2023-03-26 12:10:01
original
3448 Les gens l'ont consulté

Cette fois, je vais vous apporter une explication détaillée des étapes de vérification de sécurité pour l'interface de l'API de développement PHP. Quelles sont les précautions pour la vérification de sécurité de l'interface de l'API de développement PHP. cas, jetons un coup d'oeil.

Interface API php

Dans le travail réel, il est courant d'utiliser PHP pour écrire des interfaces API. Après avoir écrit l'interface en PHP, le. réception Vous pouvez obtenir les données fournies par l'interface via le lien, et les données renvoyées sont généralement divisées en deux situations, xml et json. Dans ce processus, le serveur ne connaît pas la source de la demande. sinon, il appelle illégalement notre interface pour obtenir des données, une vérification de sécurité doit donc être utilisée.

Principe de vérification

Diagramme schématique

Principe

On voit clairement sur l'image que si la réception veut appeler l'interface, elle doit utiliser plusieurs paramètres pour générer une signature.

Horodatage : heure actuelle

Nombre aléatoire : nombre aléatoire généré aléatoirement

Mot de passe : Lors du développement front-end et back-end, un identifiant connu des deux parties , ce qui équivaut au code secret

Règles de l'algorithme : Les règles de fonctionnement convenues, les trois paramètres ci-dessus peuvent utiliser les règles de l'algorithme pour générer une signature.

Le frontend génère une signature, et lorsque l'accès à l'interface est nécessaire, l'horodatage, le nombre aléatoire et la signature sont transmis au backend via l'URL. Après avoir obtenu l'horodatage et le nombre aléatoire en arrière-plan, il calcule la signature selon les mêmes règles d'algorithme, puis la compare avec la signature transmise. Si elle est identique, les données sont renvoyées.

Règles d'algorithme

Dans les interactions front-end et back-end, les règles d'algorithme sont très importantes à la fois en front-end et en back-end. doit calculer les signatures via des règles d'algorithme. Quant à la façon de définir les règles, cela dépend de la façon dont vous l'aimez.

Les règles de mon algorithme sont

1 L'horodatage, le nombre aléatoire et le mot de passe sont triés par ordre de casse

2 puis fusionnés en une chaîne

3 Effectuez le cryptage sha1

4 Effectuez ensuite le cryptage MD5

5 Convertissez en majuscules.

Frontend

Je n'ai pas de véritable frontend ici, j'utilise directement un fichier PHP au lieu du frontend, puis je simule un GET demande via CURL. J'utilise le framework TP et le format URL est le format pathinfo.

Code source

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/3/16 0016
 * Time: 15:56
 */
namespace Client\Controller;
use Think\Controller;
class ClientController extends Controller{
 const TOKEN = &#39;API&#39;;
 //模拟前台请求服务器api接口
 public function getDataFromServer(){
  //时间戳
  $timeStamp = time();
  //随机数
  $randomStr = $this -> createNonceStr();
  //生成签名
  $signature = $this -> arithmetic($timeStamp,$randomStr);
  //url地址
  $url = "http://www.apitest.com/Server/Server/respond/t/{$timeStamp}/r/{$randomStr}/s/{$signature}";
  $result = $this -> httpGet($url);
  dump($result);
 }
 //curl模拟get请求。
 private function httpGet($url){
  $curl = curl_init();
  //需要请求的是哪个地址
  curl_setopt($curl,CURLOPT_URL,$url);
  //表示把请求的数据已文件流的方式输出到变量中
  curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
  $result = curl_exec($curl);
  curl_close($curl);
  return $result;
 }
 //随机生成字符串
 private function createNonceStr($length = 8) {
  $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  $str = "";
  for ($i = 0; $i < $length; $i++) {
   $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
  }
  return "z".$str;
 }
 /**
  * @param $timeStamp 时间戳
  * @param $randomStr 随机字符串
  * @return string 返回签名
  */
 private function arithmetic($timeStamp,$randomStr){
  $arr[&#39;timeStamp&#39;] = $timeStamp;
  $arr[&#39;randomStr&#39;] = $randomStr;
  $arr[&#39;token&#39;] = self::TOKEN;
  //按照首字母大小写顺序排序
  sort($arr,SORT_STRING);
  //拼接成字符串
  $str = implode($arr);
  //进行加密
  $signature = sha1($str);
  $signature = md5($signature);
  //转换成大写
  $signature = strtoupper($signature);
  return $signature;
 }
}
Copier après la connexion

Côté serveur

Accepter les données frontales pour vérification

Code source

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/3/16 0016
 * Time: 16:01
 */
namespace Server\Controller;
use Think\Controller;
class ServerController extends Controller{
 const TOKEN = &#39;API&#39;;
 //响应前台的请求
 public function respond(){
  //验证身份
  $timeStamp = $_GET[&#39;t&#39;];
  $randomStr = $_GET[&#39;r&#39;];
  $signature = $_GET[&#39;s&#39;];
  $str = $this -> arithmetic($timeStamp,$randomStr);
  if($str != $signature){
   echo "-1";
   exit;
  }
  //模拟数据
  $arr[&#39;name&#39;] = &#39;api&#39;;
  $arr[&#39;age&#39;] = 15;
  $arr[&#39;address&#39;] = &#39;zz&#39;;
  $arr[&#39;ip&#39;] = "192.168.0.1";
  echo json_encode($arr);
 }
 /**
  * @param $timeStamp 时间戳
  * @param $randomStr 随机字符串
  * @return string 返回签名
  */
 public function arithmetic($timeStamp,$randomStr){
  $arr[&#39;timeStamp&#39;] = $timeStamp;
  $arr[&#39;randomStr&#39;] = $randomStr;
  $arr[&#39;token&#39;] = self::TOKEN;
  //按照首字母大小写顺序排序
  sort($arr,SORT_STRING);
  //拼接成字符串
  $str = implode($arr);
  //进行加密
  $signature = sha1($str);
  $signature = md5($signature);
  //转换成大写
  $signature = strtoupper($signature);
  return $signature;
 }
}
Copier après la connexion

Résultats

string(57) "{"name":"api","age":15,"address":"zz","ip":"192.168.0.1"}"
Copier après la connexion

Je crois que vous avez lu le cas dans cet article Après avoir maîtrisé la méthode, veuillez prêter attention aux autres articles connexes sur le site Web php chinois pour un contenu plus passionnant !

Lecture recommandée :

Explication détaillée des étapes permettant à PHP d'envoyer une chaîne au format JSON basée sur CURL

Framework ThinkPHP Mise à jour de la requête d'informations utilisateur et explication détaillée des étapes de suppression

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:
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