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

前言:

前后端分离的项目,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):

<?phpheader("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 使用第三方滑动验证的也可以。


南图
南图管理员

  • 免责声明:本站文章部分内容可能来源于网络,仅供学习与参考。如有侵权,请联系站长处理。
  • 立场声明:本站所有资源不代表本站立场,也不代表本站赞同其观点或证实其内容的真实性。
  • 合法合规:严禁发布或转载任何违法信息。访客如发现此类内容,请立即向站长举报。
  • 内容时效性:站内资源、教程可能因时效性失效或不可用,请在评论区留言或联系站长。
  • 许可协议:除非特别说明,作品均采用 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》 协议进行许可。
  • 本文地址:https://www.nta6.com/post/87.html
上一篇:价值499元的emlog模板_PandaPRO主题,破解免授权版
下一篇:轻量级云服务器安装BBR及加速

留言评论

暂无留言
取消
扫码支持