欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 接口加密方案

接口加密方案

2024/11/30 8:50:44 来源:https://blog.csdn.net/qq_38229938/article/details/140508925  浏览:    关键词:接口加密方案

最近的新项目需要考虑到安全性的需求,为了防止别人盗刷接口,就在请求拦截器里对所有接口请求进行了参数加密校验,校验不通过后端就会将请求拦截,从而达到加密的目的。

前端加密逻辑

加密方法:

// utils/sign.js
import md5 from 'blueimp-md5'// 密钥
const MD5_SIGN_KEY = 'abc123'const md5Func = (obj) => {let keys = Object.keys(obj).sort()let sign = ''keys.forEach(item => {if (obj[item]) {sign += obj[item].toString()}})// 拼接密钥sign += MD5_SIGN_KEY// md5加密sign参数return md5(sign)
}export { md5Func }

前端拦截器配置:

// utils/http.js
import axios from 'axios'
import { md5Func } from '@/utils/sign'const http = axios.create({baseURL: process.env.VUE_APP_BASE_API,timeout: 5000
})// request 拦截器
http.interceptors.request.use(config => {if (config.method.toLocaleUpperCase() === 'GET') {config.query = {...config.query,sign: md5Func(config.query || {})}}if (config.method.toLocaleUpperCase() === 'POST') {config.body = {...config.body,sign: md5Func(config.body || {})}}},error => {return Promise.reject(error)}
)// response 拦截器
service.interceptors.response.use(response => {if (data.code !== 200) {return Promise.reject(newError(data.message || 'Error'))} else {return data}},error => {return Promise.reject(error)})export default http

原理:前后端维护同一个密钥,将参数加密为sign参数,后端用同样的方法加密,比对前端的sign参数是否一致,一致则校验通过,不一致则校验不通过。

后端加密逻辑,以PHP举例

function verify($data=[]) {// 密钥$secretKey='abc123'ksort($data);$sign = '';foreach($data as $key => $value) {if ($key != 'sign') {$sign .= $value;}}$sign .= $secretKey$sign = md5($sign)// 比较前端传过来的签名与后端计算的签名是否一致if ($sign == $data['sign']) {return true;} else {return false;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com