开放式 api 简单安全验证案例 转自教书先生
分类:PHP相关
时间:2020-06-11 11:03
浏览:0
评论:0
前言:
前后端分离的项目,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 使用第三方滑动验证的也可以。
1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. PHP相关 > 开放式 api 简单安全验证案例 转自教书先生
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. PHP相关 > 开放式 api 简单安全验证案例 转自教书先生