php api安全验证失败,开放式 api 简单安全验证案例 转自教书先生

前言:

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

思路:

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

代码:

前端(JavaScript):

$.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 使用第三方滑动验证的也可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值