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 相关文章推荐
PHP 反向排序和随机排序代码
Jun 30 PHP
PHP逐行输出(ob_flush与flush的组合)
Feb 04 PHP
PHP笔记之:基于面向对象设计的详解
May 14 PHP
解析dedecms空间迁移步骤详解
May 15 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
Jun 24 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
深入解析PHP中foreach语句控制数组循环的用法
Nov 30 PHP
PHP Oauth授权和本地加密实现方法
Aug 12 PHP
PHP中数组转换为SimpleXML教程
Jan 27 PHP
PHP session垃圾回收机制实例分析
Jun 28 PHP
基于PHP的登录和注册的功能的实现
Aug 06 PHP
Thinkphp极验滑动验证码实现步骤解析
Nov 24 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 引用(&amp;)详解
2009/11/20 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
js 上传图片预览问题
2010/12/06 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
jquery隔行换色效果实现方法
2015/01/15 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
JS异步文件分片断点上传的实现思路
2016/12/25 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
vue项目中使用bpmn为节点添加颜色的方法
2020/04/30 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
python生成word合同的实例方法
2021/01/12 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
广州盈通面试题
2015/12/05 面试题
法学研究生自我鉴定范文
2013/12/04 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
抗洪救灾先进集体事迹材料
2014/05/26 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle