PHP 개발 api 인터페이스 보안 검증 사례 설명

php api 인터페이스
실제 작업 에서 PHP 로 api 인 터 페 이 스 를 쓰 는 것 은 자주 하 는 것 입 니 다.PHP 로 인 터 페 이 스 를 쓴 후에 프론트 데스크 는 링크 를 통 해 인터페이스 에서 제공 하 는 데 이 터 를 얻 을 수 있 습 니 다.돌아 오 는 데 이 터 는 보통 두 가지 상황 으로 나 뉘 는데 xml 과 json 입 니 다.이 과정 에서 서버 는 요청 한 소스 가 무엇 인지 모 르 고 다른 사람 이 우리 의 인 터 페 이 스 를 불법 으로 호출 하여 데 이 터 를 얻 을 수 있 습 니 다.따라서 안전 검증 을 사용 해 야 한다.
원 리 를 검증 하 다
설명도

의 원리
그림 에서 잘 볼 수 있 습 니 다.프론트 데스크 에서 인 터 페 이 스 를 호출 하려 면 몇 개의 매개 변 수 를 사용 하여 서명 을 만들어 야 합 니 다.
타임 스탬프:현재 시간
난수:난수 생 성
구령:앞 배경 개발 시 쌍방 이 모두 알 고 있 는 표 지 는 암호 에 해당 한다.
알고리즘 규칙:상 정 된 연산 규칙,위의 세 개의 매개 변 수 는 알고리즘 규칙 을 이용 하여 서명 을 만 들 수 있 습 니 다.
프론트 데스크 에 서명 을 만 듭 니 다.인터페이스 에 접근 해 야 할 때 시간 스탬프,무 작위 숫자,서명 을 URL 을 통 해 백 스테이지 로 전달 합 니 다.백 스테이지 에서 타임 스탬프 를 받 고 무 작위 로 숫자 를 센 후 같은 알고리즘 규칙 으로 서명 을 계산 한 다음 에 전 달 된 서명 과 비교 하면 데 이 터 를 되 돌려 줍 니 다.
알고리즘 규칙
앞 배경 상호작용 에서 알고리즘 규칙 은 매우 중요 하 다.앞 배경 은 모두 알고리즘 규칙 을 통 해 서명 을 계산 해 야 한다.규칙 을 어떻게 제정 하 는 지,네가 어떻게 기뻐 하 는 지 보 자.
저의 이 알고리즘 규칙 은 요.
1 시간 스탬프,난수,구령 은 이니셜 대소 문자 순서대로 정렬
2 그리고 문자열 로 연결
3 sha1 암호 화 진행
4 다시 MD5 암호 화
5 대문자 로 변환 합 니 다.
프런트
여기 서 저 는 실제 프론트 데스크 가 없습니다.프론트 데스크 대신 PHP 파일 을 사용 하고 CURL 을 통 해 GET 요청 을 모 의 합 니 다.TP 프레임 워 크 를 사 용 했 습 니 다.URL 형식 은 pathinfo 형식 입 니 다.
소스 코드

<?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 = 'API';
 //         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['timeStamp'] = $timeStamp;
  $arr['randomStr'] = $randomStr;
  $arr['token'] = self::TOKEN;
  //            
  sort($arr,SORT_STRING);
  //      
  $str = implode($arr);
  //    
  $signature = sha1($str);
  $signature = md5($signature);
  //     
  $signature = strtoupper($signature);
  return $signature;
 }
}
서버 쪽
프론트 데이터 검증 받 기
소스 코드

<?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 = 'API';
 //       
 public function respond(){
  //    
  $timeStamp = $_GET['t'];
  $randomStr = $_GET['r'];
  $signature = $_GET['s'];
  $str = $this -> arithmetic($timeStamp,$randomStr);
  if($str != $signature){
   echo "-1";
   exit;
  }
  //    
  $arr['name'] = 'api';
  $arr['age'] = 15;
  $arr['address'] = 'zz';
  $arr['ip'] = "192.168.0.1";
  echo json_encode($arr);
 }
 /**
  * @param $timeStamp    
  * @param $randomStr      
  * @return string     
  */
 public function arithmetic($timeStamp,$randomStr){
  $arr['timeStamp'] = $timeStamp;
  $arr['randomStr'] = $randomStr;
  $arr['token'] = self::TOKEN;
  //            
  sort($arr,SORT_STRING);
  //      
  $str = implode($arr);
  //    
  $signature = sha1($str);
  $signature = md5($signature);
  //     
  $signature = strtoupper($signature);
  return $signature;
 }
}
결실

string(57) "{"name":"api","age":15,"address":"zz","ip":"192.168.0.1"}"
총결산
이런 방법 은 그 중의 한 가지 방법 일 뿐,사실은 안전 검증 을 할 수 있 는 많은 방법 이 있다.
이상 의 PHP 개발 api 인터페이스 안전 검증 사례 설명 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기