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下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
Sep 19 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
Sep 25 PHP
PHP解码unicode编码的中文字符代码分享
Aug 13 PHP
PHP防止表单重复提交的几种常用方法汇总
Aug 19 PHP
thinkphp备份数据库的方法分享
Jan 04 PHP
php实现对象克隆的方法
Jun 20 PHP
php获取文件后缀的9种方法
Mar 22 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
Jul 12 PHP
Yii2中SqlDataProvider用法示例
Sep 22 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 PHP
php慢查询日志和错误日志使用详解
Feb 27 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判断是否为json格式的方法
2014/03/04 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
分享一款基于jQuery的视频播放插件
2014/10/09 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
python实现斐波那契递归函数的方法
2014/09/08 Python
python实现图像识别功能
2018/01/29 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
python 绘制场景热力图的示例
2020/09/23 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
韩国11街:11STREET
2018/03/27 全球购物
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
岗位职责的含义
2013/11/17 职场文书
文明寄语大全
2014/04/11 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
汽修专业自荐信
2014/07/07 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
个人自荐书范文
2015/03/09 职场文书
爱护环境建议书
2015/09/14 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
Python生成九宫格图片的示例代码
2021/04/14 Python
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android
css3 文字断裂效果
2022/04/22 HTML / CSS