开放式 api 简单安全验证案例

南图
2020-04-06 / 0 评论 / 99 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年04月12日,已超过1414天没有更新,若内容或图片失效,请留言反馈。

前言:

前后端分离的项目,api 难免会暴露,特别是不需要登陆的开放式 api。为防止 api 被他人盗用,在前端请求参数中添加 token,后端进行对比验证是简单有效的方法。

思路:

前端 ajax 请求时,带上时间戳参数 timestamp 和由 时间戳 + 唯一字符串 (secret) 通过约定算法生成的参数 token,后端拿到 timestamp 参数后,使用和前端相同的算法计算出 token,并与前端传过来的 token 对比,相同则通过验证。当然为防止盗用者使用抓取的 timestamp 和 token 重复提交,需要对比客户端和服务器的时间戳是否超时。

代码:

前端(JavaScript):

<script src="https://ku.oioweb.cn/js/md5.js"></script>
$.ajax({
  url: "/api.php",
  headers: {
    timestamp: (new Date().getTime() + '').substr(0, 10),
    token: createToken()
  }
}).success((res) => {
  console.log(res)
})

function createToken() {
  var timestamp = (new Date().getTime() + '').substr(0, 10);
  var secret = "123";
  return hex_md5(timestamp + secret);
}

后端(PHP):

<?php
header("Access-Control-Allow-Origin:*");
if (tokenCheck()!==1) {
  $json['status']=0;
  $json['data']='token error!';
}else{
  $json['status']=1;
  $json['data']='token ok!';
      //main code ...
}
echo json_encode($json);

function tokenCheck(){
  $timestamp=isset($_SERVER['HTTP_TIMESTAMP'])?$_SERVER['HTTP_TIMESTAMP']:"";
  $token=isset($_SERVER['HTTP_TOKEN'])?$_SERVER['HTTP_TOKEN']:"";
  $diff =time()-$timestamp;
  return (($diff>30) || ($token!==createToken($timestamp))) ? 0 : 1;
}

function createToken($time){
  $secret="123";
  return md5($time.$secret);
}

提醒:

前端生成 token 的算法 createToken() 尽量保密,可以使用 js 加密工具。
API 使用第三方滑动验证的也可以。

0

评论 (0)

OωO
  • ::(呵呵)
  • ::(哈哈)
  • ::(吐舌)
  • ::(太开心)
  • ::(笑眼)
  • ::(花心)
  • ::(小乖)
  • ::(乖)
  • ::(捂嘴笑)
  • ::(滑稽)
  • ::(你懂的)
  • ::(不高兴)
  • ::(怒)
  • ::(汗)
  • ::(黑线)
  • ::(泪)
  • ::(真棒)
  • ::(喷)
  • ::(惊哭)
  • ::(阴险)
  • ::(鄙视)
  • ::(酷)
  • ::(啊)
  • ::(狂汗)
  • ::(what)
  • ::(疑问)
  • ::(酸爽)
  • ::(呀咩爹)
  • ::(委屈)
  • ::(惊讶)
  • ::(睡觉)
  • ::(笑尿)
  • ::(挖鼻)
  • ::(吐)
  • ::(犀利)
  • ::(小红脸)
  • ::(懒得理)
  • ::(勉强)
  • ::(爱心)
  • ::(心碎)
  • ::(玫瑰)
  • ::(礼物)
  • ::(彩虹)
  • ::(太阳)
  • ::(星星月亮)
  • ::(钱币)
  • ::(茶杯)
  • ::(蛋糕)
  • ::(大拇指)
  • ::(胜利)
  • ::(haha)
  • ::(OK)
  • ::(沙发)
  • ::(手纸)
  • ::(香蕉)
  • ::(便便)
  • ::(药丸)
  • ::(红领巾)
  • ::(蜡烛)
  • ::(音乐)
  • ::(灯泡)
  • ::(开心)
  • ::(钱)
  • ::(咦)
  • ::(呼)
  • ::(冷)
  • ::(生气)
  • ::(弱)
  • ::(狗头)
泡泡
阿鲁
颜文字
取消