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 인터페이스 안전 검증 사례 설명 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.