接口加密方案

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

前端加密逻辑

加密方法:

// 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;
	}
}

相关推荐

  1. 接口加密方案

    2024-07-19 18:00:04       19 阅读
  2. SpringBoot 接口加密解密

    2024-07-19 18:00:04       27 阅读
  3. springboot全面加密方案

    2024-07-19 18:00:04       44 阅读
  4. rsa加密登录解决方案

    2024-07-19 18:00:04       42 阅读
  5. vue前端登录接口加密 -RSA

    2024-07-19 18:00:04       48 阅读
  6. SpringBoot+Vue使用AES进行接口加密

    2024-07-19 18:00:04       45 阅读
  7. 前端数据加密方式

    2024-07-19 18:00:04       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 18:00:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 18:00:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 18:00:04       58 阅读
  4. Python语言-面向对象

    2024-07-19 18:00:04       69 阅读

热门阅读

  1. ubuntu24.04 搭建TFTP服务

    2024-07-19 18:00:04       20 阅读
  2. 39、PHP 实现二叉树的下一个结点(含源码)

    2024-07-19 18:00:04       19 阅读
  3. box-shadow

    2024-07-19 18:00:04       17 阅读
  4. 【理解Python中的字典推导式】

    2024-07-19 18:00:04       18 阅读
  5. Qt 遍历Combbox下拉框的内容并进行判断

    2024-07-19 18:00:04       18 阅读
  6. 数据库存 IP 地址,用什么数据类型比较好?

    2024-07-19 18:00:04       17 阅读
  7. linux报错-bash: ./xx.sh: Permission denied

    2024-07-19 18:00:04       16 阅读
  8. 网络安全等级保护制度是如何分级的?

    2024-07-19 18:00:04       19 阅读
  9. 【Leetcode】14. 最长公共前缀

    2024-07-19 18:00:04       17 阅读