PHP开发api接口安全验证操作实例详解


Posted in PHP onMarch 26, 2020

本文实例讲述了PHP开发api接口安全验证操作.分享给大家供大家参考,具体如下:

php的api接口

在PHP的开发工作中,对API接口开发不会陌生,后端人员写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json, 在这个过程中,服务器并不知道,请求的来源是什么,有可能是别人非法调用我们的接口,获取数据,因此就要使用安全验证来屏蔽某些调用。

验证原理示意图
PHP开发api接口安全验证操作实例详解
原理

从图中可以看得很清楚,前台想要调用接口,需要使用几个参数生成签名。
● 时间戳:当前时间
● 随机数:随机生成的随机数
● 口令:前后台开发时,一个双方都知道的标识,相当于暗号
● 算法规则:商定好的运算规则,上面三个参数可以利用算法规则生成一个签名。

前台生成一个签名,当需要访问接口的时候,把时间戳,随机数,签名三个参数通过URL传递到后台。后台拿到时间戳,随机数后,通过一样的算法规则计算出签名,然后和传递过来的签名进行对比,一样的话,返回数据。

算法规则

在前后台交互中,算法规则是非常重要的,前后台都要通过算法规则计算出签名,至于规则怎么制定,前后端协商确定。

我这个算法规则是

● 时间戳,随机数,口令按照首字母大小写顺序排序
● 然后拼接成字符串
● 进行sha1加密
● 再进行MD5加密
● 转换成大写。

前台

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

源代码

namespace app\service\controller;
use think\controller;

class CheckUrl 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){

      return ['status' => 0, 'msg' => '验证失败', 'data' => []];

    }

  }

  /**

   * @param $timeStamp 时间戳

   * @param $randomStr 随机字符串

   * @return string 返回签名

   */

  public function arithmetic($timeStamp, $randomStr){
		
		$arr = [
			'timeStamp' => $timeStamp,
			'randomStr' => $randomStr,
			'token' => self::TOKEN

		];

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

    sort($arr,SORT_STRING);

    //拼接成字符串

    $str = implode($arr);

    //进行加密

    $signature = sha1($str);

    $signature = md5($signature);

    //转换成大写

    $signature = strtoupper($signature);

    return $signature;

  }

}

这种方法只是其中的一种方法,其实还有很多方法都是可以进行安全验证的。

实例展示php表单安全验证

这篇文章主要介绍了php token使用与验证方法,通过对form表单hidden提交字段的处理实现token验证功能,防止非法来源数据的访问。

  1. token功能简述
    PHP 使用token验证可有效的防止非法来源数据提交访问,增加数据操作的安全性
  2. 实现方法
    前台form表单:
<form action="do.php" method="POST">

<?php $module=mt_rand(100000,999999);?>

 <input type="text" name="sec_name" value=""/> // 实际要传递的值

 <input type="hidden" name="module" value="<?php echo $module;?>"/>

 <input type="hidden" name="timestamp" value="<?php echo time();?>"/>

 <input type="hidden" name="token" value="<?php echo md5($module.'#$@%!^*'.time());?>"/>

</form>

后台do.php的token验证部分:

$module = $_POST['module'];

$timestamp = $_POST['timestamp'];

$token = md5($module.'#$@%!^*'.$timestamp);

if($token != $_POST['token']){

return ['status' => 0, 'msg' => '非法数据来源', 'data' => []];

}

$sec_name=$_POST['sec_name'];

//PHP数据处理.....

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
在PWS上安装PHP4.0正式版
Oct 09 PHP
php 文件上传实例代码
Apr 19 PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
Win7 64位系统下PHP连接Oracle数据库
Aug 20 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
php猜单词游戏
Sep 29 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
Jan 11 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
Mar 31 PHP
Laravel框架生命周期与原理分析
Jun 12 PHP
Yii框架核心组件类实例详解
Aug 06 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 #PHP
php中加密解密DES类的简单使用方法示例
Mar 26 #PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 #PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 #PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 #PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 #PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 #PHP
You might like
php获取网页内容方法总结
2008/12/04 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
PHP编写RESTful接口
2016/02/23 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
Javascript实现字数统计
2015/07/03 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
vue项目关闭eslint校验
2018/03/21 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
Python最小二乘法矩阵
2019/01/02 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
python等待10秒执行下一命令的方法
2020/07/19 Python
Python类的继承super相关原理解析
2020/10/22 Python
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
中医药大学市场营销专业自荐信
2013/09/29 职场文书
美术国培研修感言
2014/02/12 职场文书
开学典礼主持词
2014/03/19 职场文书
小学教师评语大全
2014/04/23 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书