인터페이스의 보안은 인터페이스의 데이터가 변조되거나 반복적으로 호출되지 않도록 주로 토큰, 타임스탬프 및 서명의 세 가지 메커니즘을 중심으로 설계되었습니다 아래에서 자세히 살펴보겠습니다.
(1) 토큰 인증 메커니즘:(토큰은 클라이언트가 서버에 액세스하기 위한 자격 증명입니다)--사용자가 사용자 이름과 비밀번호를 사용하여 로그인하면 서버는 토큰(일반적으로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!