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实现框架(一)
Oct 09 PHP
一个php作的文本留言本的例子(五)
Oct 09 PHP
PHP中去掉字符串首尾空格的方法
May 19 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
图文介绍PHP添加Redis模块及连接
Jul 28 PHP
ThinkPHP函数详解之M方法和R方法
Sep 10 PHP
浅谈php+phpStorm+xdebug配置方法
Sep 17 PHP
PHP版微信小店接口开发实例
Nov 12 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
php PDO判断连接是否可用的实现方法
Apr 03 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 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简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
php实现的递归提成方案实例
2015/11/14 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
2016/01/28 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
解决layer图标icon不加载的问题
2019/09/04 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
vue中注册自定义的全局js方法
2019/11/15 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
Python中DJANGO简单测试实例
2015/05/11 Python
Python映射拆分操作符用法实例
2015/05/19 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
采购经理岗位职责
2014/02/16 职场文书
七一党日活动总结
2014/07/08 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
小学教师党员承诺书
2015/04/27 职场文书