关于前端url加密方式总结 (Vue-cli中使用)

有的时候链接信息中存在敏感信息或者不想让用户手动修改链接从而改变内容,这时候就需要进行链接加密处理,虽然这种方式只能简单的预防,不过还是能起到一定作用的,这里根据我的思路进行总结处理方式

  1. 首先网站页面url都有对应的不同路径组成,这个地方不用修改(当然也可以自己扩展),后边可能会拼接一些参数对这串参数进行处理 ;

    思路就是在页面跳转前进行拦截修改参数部分,及在改变页面某些状态需要改变url内容时进行修改参数部分;

    那么页面在重新载入或者进入时,首先需要进行对页面的加密参数解密到对应字段上进行后边的参数处理;

  2. 下边是url加密和解密方法

    /*** url参数加密* 传入json格式的串* @param {*Object} query*/
    const EncryUrl = query => {if (!utils.isObject(query)) {return "";}try {query = JSON.stringify(query);query = window.encodeURIComponent(query);return window.btoa(query); // 编码} catch (err) {console.log('%c url-encry-error:' + JSON.stringify(err), 'color:red;');}return "";
    }/*** url参数解密* 传入加密的json串* @param {*string} val*/
    const DecryptUrl = val => {if (!utils.isString(val)) {return false;}try {let decryStr = window.atob(val); // 解码return window.decodeURIComponent(decryStr);} catch (err) {console.log('%c url-decry-error:' + JSON.stringify(err.stack), 'color:red;');}return false;
    }
    

    以上,加密方法EncryUrl,首先判断传入的数据是否是Object的,然后把json转成字符串,使用encodeURIComponent进行URI编码(encodeURIComponent方法执行,让浏览器能够接受和理解,若中文在使用后边的window.btoa会报错),然后使用window.btoa再次转换输出;解密DecryptUrl,以同样的方式反过来执行进行解密,至于为什么后边没有使用JSON.parse,看后边的;

    /*** 从地址栏获取指定参数值* @param {*string} param*/
    const GetQueryParam = (param) => {let h = window.location.href;let reg = new RegExp("[\?\&]?" + param + "=([,-\w]+)[\&]?", "i");if (reg.test(h)) {let v = reg.exec(h)[1];return v;}return "";
    };/*** 返回 地址栏 加密 Object* @param {*string} param*/
    const GetQueryParamOfObjEntry = () => {let keyStr = GetQueryParam("key");if (!keyStr) {return "";}try {let objStr = DecryptUrl(keyStr);let obj = JSON.parse(objStr);return obj;} catch (err) {console.log('%c url-json-parse-error:' + JSON.stringify(err.stack), 'color:red;');}return "";
    }

    上边的两个方法,GetQueryParam是封装了获取指定链接参数的代码块,GetQueryParamOfObjEntry是获取以key这个指定参数后方的解密数据,这里可以看到有JSON.parse这个方法,因为我这里约定了链接后方参数是以key为key的一个参数,当然可以换成其他的参数;

  3. 然后注意在router里边需要处理对应的改变

    // url参数加密
    function encryUrlOfRouter(to, from, next) {// 这里对路由参数key进行加密if (Object.keys(to.query).length > 0 && !to.query.key) {let urlEntry = EncryUrl(to.query);if (urlEntry) {next({path: to.path,query: {key: urlEntry}})return false;}next({path: to.path})return false;}return true;
    }

    以上代码块,encryUrlOfRouter这个方法放在router.beforeEach里边执行,首先判断当前链接是否有参数,若有且如果不存在key,那么就使用EncryUrl进行处理query加密,然后修改当前链接参数,这时,router会再次执行一次 ;

  4. 那么在页面中使用时,首先是初次渲染拿出数据了,在created中执行时可以使用GetQueryParamOfObjEntry来获取数据,然后对应参数赋值;

    其次是在一些改变url参数的操作,(场景:比如分页,触发分页后,把这个链接复制到其他的窗口中,既要让参数加密,又必须让这个链接打开窗口的分页的状态和被复制页面的分页一样),这个时候在每次触发改变链接的时候执行这个方法就没问题了;

当然这时候并没有改变页面位置,也不会刷新页面,只是走了一遍路由,下方代码就是对应改变的方法了, searchCondition就是我存放需要改变url参数的对象

    editUrlQuery() {this.$router.push({ name: this.$route.name, query: this.searchCondition });}
  1. 最后总结一下,如果是对安全性要求比较高在执行加密时可以换其他的方式来加密,我这里只是简单的加密了一下,让别人篡改参数不是那么很轻松 ,也直接看出url里边带的参数是什么;如果在控制台中进行解密测试,你需要执行window.decodeURIComponent这个方法两次,why?不解释,哈哈,实践一下就知道了;如果别人修改了key后边的参数,那么解析会出错,或者解析不完全,至于修改,随他改吧,看你的加密方式了;

转载于:https://www.cnblogs.com/sixthrhapsody/p/11377932.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP用于登录的类,基于MySQL

<? /* * 描述&#xff1a;PHP用于登录的类&#xff0c;基于MySQL */ class Login { var $username; //用户名 var $userpass; //密码 var $userid; //用户id var $userlevel; //用户级别 var $authtable"account"; //…

C++_练习—多态_virtual

多态_virtual /* 父类指针定义对象&#xff0c;当基类与派生类存在相同成员函数&#xff0c;编译器设置为基类中的版本&#xff0c; 为静态多态/静态链接/早绑定&#xff1a;函数调用在程序执行前就准备好了&#xff01; 在父类相同函数前加 virtual 则编译器看指针的内容&a…

qt 错误 多继承 造成错误 “qt_metacast”: 不是“****”的成员

简介 多继承造成“qt_metacast”: 不是“****”的成员错误的解决方案。 原格式 class BezierSurface : public Strategy, public QGLWidget 更改后 class BezierSurface : public QGLWidget, public Strategy 参考链接 CSDN 转载于:https://www.cnblogs.com/eat-too-much/p/113…

百钱百鸡问题

问题陈述&#xff1a; 这是我国古代一道有名的数学难题&#xff0c;要求用100元买100只鸡&#xff0c;其中公鸡五元一只&#xff0c;母鸡三元一只&#xff0c;每种至少买一只&#xff0c;求购买方案&#xff0c;程序中以x代表公鸡&#xff0c;y代表母鸡&#xff0c;z代表小鸡 s…

在 CCR 环境中使用 Exchange 命令行管理程序移动存储组和数据库

作为Exchange管理员或许会遇到需要对Exchange Server存储组和数据库更改存储路径的情况&#xff0c;在常规情况下&#xff0c;更改Exchange Server存储组和数据库的路径一项比较简单的操作&#xff0c;通常在图形界面下经过简单的几步操作即可&#xff0c;路径更改过程数据库会…

C++_练习—多态_证明vptr指针的存在

证明vptr指针的存在 1 // 证明vptr指针的存在2 3 #include <iostream>4 5 using namespace std;6 7 class parent {8 public:9 parent(int a) { 10 this->a a; 11 } 12 13 virtual void pri(void) { 14 cout << "parent &…

(转)解读NTFS(一)

NTFS是一个比FAT复杂的多的文件系统&#xff0c;我们一起努力来把它完整的解读出来 NTFS的引导扇区也是完成引导和定义分区参数&#xff0c;和FAT分区不同&#xff0c;FAT分区的BOOT记录正常&#xff0c;就显示分区没有错误&#xff0c;即使文件不正确&#xff0c;而NTFS分区的…

路由器硬件结构

路由器是一种连接多个网络或网段的网络设备&#xff0c;它能将不同网络或网段之间的数据信息进行“翻译”&#xff0c;以使它们能够相互“读”懂对方的数据&#xff0c;从而构成一个更大的网络。路由器由硬件和软件组成。硬件主要由中央处理器、内存、接口、控制端口等物理硬件…

C++_练习—多态_验证vptr分布初始化

验证vptr分布初始化 vptr指针是从父类逐渐指向子类的虚函数表 1 // 验证vptr分布初始化2 3 #include <iostream>4 5 using namespace std;6 7 class parent {8 public:9 parent(int a) { 10 this->a a; 11 cout << "parent 构造函数 …

分区表分区字段的update操作

默认情况下&#xff0c;oracle的分区表对于分区字段是不允许进行update操作的&#xff0c;如果有对分区字段行进update&#xff0c;就会报错——ORA-14402: 更新分区关键字列将导致分区的更改。但是可以通过打开表的row movement属性来允许对分区字段的update操作。 例&#xf…

OCP-052考试题库汇总(38)-CUUG内部解答版

You want to audit update statements that refer to USER1.DEPT.DNAME. Which type of auditing must you use? A)standard auditing B)mandatory auditing C)value-based auditing D)fine-grained auditing Answer: D 赵&#xff1a; Fine-Grained Audit(FGA)&#xff0c;精…

C++_练习—多态_纯虚函数与抽象类

纯虚函数与抽象类 含有纯虚函数的类&#xff0c;称为抽象基类&#xff0c;不可实列化。即不能创建对象&#xff0c;存在的意义就是被继承&#xff0c;提供族类的公共接口。 1 // 纯虚函数与抽象类2 3 #include <iostream>4 5 using namespace std;6 7 class shape {8 pub…

深入理解Linux内存映射机制

Author: wztEMail: [email]wztxsec.org[/email]Site: [url]http://www.xsec.org[/url]Date: 2008-6-13一. 绪 论二. X86的硬件寻址方法三. 内核对页表的设置四. 实例分析映射机制一. 绪 论我们经常在程序的反汇编代码中看到一些类似0x32118965这样的地址&#xff0c;操作系统中…

NetCore的配置管理(1)

学习NetCore的配置管理&#xff1b; 目录 命令行配置Json文件配置配置文件文本至C#对象实例的映射配置文件热更新总结命令行配置&#xff1a; 打开VS2017,新建NetCore控制台项目&#xff1b; 打开nuget包管理&#xff1b;添加Microsoft.Asp.NetCore.all&#xff0c;或者使用命令…

buffer busy waits

buffer busy waitshttp://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_idNOT&p_id34405.1当会话想要访问缓冲存储器中的数据块&#xff0c;而该数据块正在被其它会话使用时产生buffer busywaits事件。其它会话可能正在从数据文件向缓冲区存…

推荐几个EDA网站

http://www.cnblogs.com/jianyungsun/archive/2011/05/12/2044898.html 1. OPENCORES.ORG 这里提供非常多&#xff0c;非常好的PLD了内核&#xff0c;8051内核就可以在里面找到。 进入后&#xff0c;选择project或者由http//www.opencores.org/browse.cgi/by_category进入。 h…

SetupFactory安装制作心得

很多年前&#xff0c;因为仰慕Install Shield的鼎鼎大名&#xff0c;所以很是花了些功夫研究了一番&#xff0c;最后&#xff0c;基本上也可以打出很完善的包了&#xff0c;其中也不乏一些很有难度的事情&#xff0c;比如ODBC的打包等。但它实在太难用了&#xff0c;过上一段时…

Timus 1114. Boxes

Timus 1114. Boxes 要求计算出将两种颜色的球放到盒子中的各种组合的数目。1114. Boxes Time Limit: 0.6 second Memory Limit: 16 MB N boxes are lined up in a sequence (1 ≤ N ≤ 20). You have A red balls and B blue balls (0 ≤ A ≤ 15, 0 ≤ B ≤ 15). The red bal…

写作知识点

1.逻辑框架 2.起承转合 3.写作套路 4.述说,正述,倒序, 先说结果,分析原因,解决方案,,方案检查,紧急预案,预期结果 转载于:https://www.cnblogs.com/zeenzhou/p/11388739.html

Speerio Skinergy 'Image' is ambiguous 错误

使用BeyondCSS皮肤时报错&#xff1a;Could Not Load Skin: /Portals/0/Skins/beyondcss/1column_speerio.ascx Error: E:"Development"DotNetNuke"InstallArea"DotNetNuke_04.08.03_Source"Website"controls"Speerio"Skinergy"s…