这里是文章模块栏目内容页
js实现url所有参数按字母排序拼接加上token并md5签名方法

前端给后端发送ajax请求,考虑安全因素,对url实现签名,后端得到请求后,进行签名的验证。

在一定难度上防止接口被恶意攻击。

那么前端实现签名的规则目前都比较统一。采用前端和后端统一token,进行签名校验。

大家会说token在前端,和公布出来有什么区别?我告诉大家,前端js现在都可以进行压缩代码方式。

恶意攻击则要是想找到token还是需要懂一点技术才行,所以这就防止了那些只懂用工具进行的攻击。

另外,url请求签名验证,只是服务器端校验安全的一个环节。要实现接口不被恶意攻击,还需要配合很多技术手段。安全问题是组合拳,每个环节都有作用,签名流程还是得走。

/**
 * 获取签名 将链接地址的所有参数按字母排序后拼接加上token进行md5
 * url 链接地址
 * date 参数{参数名1 : 值1, 参数名2 : 值2} *
 * token 签名token 非必须
 */
function getSign(url, data, token) {

 var querystring = '';
 var sign = getUrlParam(url, 'sign');
 if (sign || (data && data.sign)) {
  return false;
 } else {
  if (url) {
   querystring = getQuery(url);
  }
  if (data) {
   var theRequest = [];
   for (let param in data) {
    if (param && data[param]) {
     theRequest = theRequest.concat({
      'name': param,
      'value': data[param]
     })
    }
   }
   querystring = querystring.concat(theRequest);
  }
  //排序
  querystring = _.sortBy(querystring, 'name');
  //去重
  querystring = _.uniq(querystring, true, 'name');
  var urlData = '';
  for (let i = 0; i < querystring.length; i++) {
   if (querystring[i] && querystring[i].name && querystring[i].value) {
    urlData += querystring[i].name + '=' + querystring[i].value;
    if (i < (querystring.length - 1)) {
     urlData += '&';
    }
   }
  }
  token = token ? token : '';
  sign = md5(urlData + token);
  return sign;
 }
}

这个签名方法用到了两个开源的js基础库

import md5 from 'md5.js';
import _ from "underscore";

underscore是js的很基础的库,提供大量的功能强大的字符串查询,数组排序 集合 对象 函数等功能。

Underscore 一个 JavaScript 实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何 JavaScript 内置对象。它是这个问题的答案:“如果我在一个空白的 HTML 页面前坐下, 并希望立即开始工作, 我需要什么?“...它弥补了部分 jQuery 没有实现的功能,同时又是 Backbone.js 必不可少的部分。

Underscore 提供了100多个函数,包括常用的: mapfilterinvoke — 当然还有更多专业的辅助函数,如:函数绑定, JavaScript 模板功能,创建快速索引, 强类型相等测试, 等等.


好了,本文内容全部结束,感谢您的关注。希望能帮助到您。

更多栏目
相关内容