php api安全,PHP接口安全

  php api安全,PHP接口安全

  http://blog..net/li741350149/article/details/62887524#

  在实际工作中,经常用PHP编写api接口。PHP编写接口后,前台可以通过链接获取接口提供的数据,返回的数据一般分为两种情况,xml和json。在这个过程中,服务器不知道请求的来源是什么。有可能是别人非法调用我们的接口来获取数据,所以需要使用安全验证。

  证实原则

  示意图

  原则

  从图中可以清楚地看到,前台如果要调用接口,需要使用几个参数来生成签名。

  时间戳:当前时间随机数:随机生成的随机数密码:前台和后台开发时双方都知道的标识,相当于约定的操作规则。上述三个参数可以通过使用算法规则来生成签名。

  前台生成一个签名,当需要访问接口时,时间戳、随机数、签名通过URL传输到后台。得到后台时间戳和随机数后,用同样的算法规则计算签名,然后和传递过来的签名进行比较。如果相同,则返回数据。

  算法规则

  在前后交互中,算法规则很重要。前面和后面都要通过算法规则计算签名。至于规则怎么制定,就看你有多开心了。

  我算法的规则是

  时间戳、随机数、密码按照首字母的大小写顺序排序,然后拼接成一个字符串进行sha1加密,再进行MD5加密进行大写。

  舞台

  我在这里没有真正的前台。我直接用一个PHP文件代替前台,然后通过CURL模拟GET请求。我用的是TP框架,URL格式是pathinfo格式。

  源代码

  ?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

  *由PhpStorm创建。

  *用户:管理员

  *日期:2017年3月16日

  *时间:15时56分

  命名空间客户端控制器;

  使用思考控制器;

  类ClientController扩展控制器{

  const TOKEN= API

  //模拟前台请求服务器的api接口

  公共函数getDataFromServer(){

  //时间戳

  $ timeStamp=time();

  //随机数

  $ randomStr=$ this-createnoncastr();

  //生成签名

  $signature=$this -算术($timeStamp,$ randomStr);

  //url地址

  $ URL= http://www . API test . com/Server/Server/respond/t/{ $ timeStamp }/r/{ $ randomStr }/s/{ $ signature } ;

  $ result=$ this-http get($ URL);

  转储($ result);

  //curl模拟get请求。

  私有函数httpGet($url){

  $ curl=curl _ init();

  //需要请求哪个地址?

  curl_setopt($curl,CURLOPT_URL,$ URL);

  //表示将请求的数据以文件流的形式输出到变量中。

  curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);

  $ result=curl _ exec($ curl);

  curl _ close($ curl);

  返回$ result

  //随机生成一个字符串

  私有函数createnoncentr($ length=8){

  $ chars= abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 0123456789 ;

  $ str=“”;

  for($ I=0;$ i $长度;$i ) {

  $str。=substr($chars,mt_rand(0,strlen($chars) - 1),1);

  返回“z”。$ str

  * @param $timeStamp时间戳

  * @ paramrandomStr随机字符串

  * @return string返回签名

  私有函数算术($timeStamp,$randomStr){

  $ arr[ timeStamp ]=$ timeStamp;

  $ arr[ randomStr ]=$ randomStr;

  $ arr[ TOKEN ]=self:TOKEN;

  //按首字母的大小写顺序排序

  sort($arr,SORT _ STRING);

  //拼接成字符串

  $str=内爆($ 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安全,PHP接口安全