>  기사  >  백엔드 개발  >  PHP 인터페이스의 보안을 보장하는 방법

PHP 인터페이스의 보안을 보장하는 방법

(*-*)浩
(*-*)浩원래의
2019-09-25 10:52:553362검색

인터페이스의 보안은 인터페이스의 데이터가 변조되거나 반복적으로 호출되지 않도록 주로 토큰, 타임스탬프 및 서명의 세 가지 메커니즘을 중심으로 설계되었습니다 아래에서 자세히 살펴보겠습니다.

(1) 토큰 인증 메커니즘:PHP 인터페이스의 보안을 보장하는 방법(토큰은 클라이언트가 서버에 액세스하기 위한 자격 증명입니다)--사용자가 사용자 이름과 비밀번호를 사용하여 로그인하면 서버는 토큰(일반적으로 UUID)을 클라이언트에 반환합니다. Token-UserId를 키-값 쌍의 형태로 캐시 서버에 저장합니다. 요청을 받은 후 서버는 토큰 확인을 수행합니다. 토큰이 없으면 요청이 유효하지 않습니다. (추천 학습:

PHP 프로그래밍 입문부터 숙련까지

) (2) 타임스탬프 시간 초과 메커니즘: (서명 메커니즘은 데이터가 변조되지 않도록 보장합니다.) 사용자가 요청할 때마다 해당 타임스탬프는 현재 시간이 포함됩니다. 서버는 타임스탬프를 수신하여 현재 시간과 비교합니다. 시간 차이가 특정 시간(예: 5분)보다 크면 요청이 유효하지 않은 것으로 간주됩니다. 타임스탬프 시간 초과 메커니즘은 DOS 공격을 방어하는 효과적인 수단입니다.

(3) 서명 메커니즘: 다른 요청 매개변수에 토큰과 타임스탬프를 추가한 다음 MD5 또는 SHA-1 알고리즘을 사용하여 암호화합니다(상황에 따라 약간의 소금을 추가할 수 있음). 암호화된 데이터는 이것의 서명 서명입니다. 서비스 요청을 받은 후 최종은 동일한 알고리즘을 사용하여 서명을 얻고 이를 현재 서명과 비교합니다. 이는 매개변수가 변경되었음을 의미하며 오류 ID가 직접 반환됩니다.

rreee
/**
 * @desc 接受参数处理
 */
private function dealParam(){
    //接受header参数--系统参数
    $systemParam=getAllHeadersParam();
    //接受body数据--业务参数(json格式)
    $data=file_get_contents('php://input');
    
    //读取配置文件中的私钥信息
    $api_apiKey=C('api_apiKey');
    $privatekey=$api_apiKey[$systemParam['token']];


    $arr['token']    =$systemParam['token'];        //服务端分配的标识(不同客户端需使用不同的标识)
    $arr['timestamp']=$systemParam['timestamp'];    //时间戳,UTC时间,以北京时间东八区(+8)为准
    $arr['version']  =$systemParam['version'];      //版本号
    $arr['sign']     =$systemParam['sign'];         //签名
    $arr['source']   =$systemParam['source'];       //来源(0-安卓/1-IOS/2-H5/3-PC/4-php/5-java)
    $arr['data'] =json_decode($data,true); //业务参数json格式 
    $arr['method'] =$data['method']; //访问接口,格式:模型名.方法名 

    return $arr;
 }
/*
 * @desc 获取所有以HTTP开头的header参数
 * @return array
 */
private function getAllHeadersParam(){
   $headers = array();
   foreach($_SERVER as $key=>$value){
       if(substr($key, 0, 5)==='HTTP_'){
           $key = substr($key, 5);
           $key = str_replace('_', ' ', $key);
           $key = str_replace(' ', '-', $key);
           $key = strtolower($key);
           $headers[$key] = $value;
       }
   }
   return $headers;
}

위 내용은 PHP 인터페이스의 보안을 보장하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.