window.location.href 跳转页面,隐藏携带的参数

news/2024/7/11 1:57:38 标签: ajax, javascript, jquery, 前端

window.location.href 跳转页面,隐藏携带的参数

前言

问题:

在使用 ajax返回结果后,我们有一种需求:根据返回结果跳转到相应的页面,并且跳转过程中会携带一个或多个参数,传递至某个页面或者后台的某个方法,这个时候跳转页面后携带的参数就会直接暴露给用户,带来极大的安全隐患。

举例说明

如下一段方法,在执行完 /order/getOrder 该操作后,如果操作成功,跳转到/pay/checkout 后台封装的controller中,controller重新转发至指定的某个页面,此时跳转成功后,页面路径中直接将 orderId 、totalPrice直接暴露出来了,因为此时为get跳转。

javascript">function queryOrder(){
$.ajax({
	type : "post",
	url : '/order/getOrder',
	data : {
		orderId: orderId,
	},
	dataType : "json",
	success : function(data) {
		if (data.data == 1) {
			window.location.href = "/pay/checkout?orderId="
								+ orderId + '&payPrice=' + totalPrice;
		} else {
			return false;
		}
	}
});
}

那该如何成功跳转又能将参数隐藏呢,当然是想办法将方法以post方式提交,下面就是把路径和参数重新封装到一个form 表单里,

javascript">function queryOrder(){
$.ajax({
	type : "post",
	url : '/order/getOrder',
	data : {
		orderId: orderId,
	},
	dataType : "json",
	success : function(data) {
		/**if (data.data == 1) {
			window.location.href = "/pay/checkout?orderId="
								+ orderId + '&payPrice=' + totalPrice;**/
			//封装form表单
			var form = $("<form>");
			form.attr("style","display:none");
			form.attr("target","");
			form.attr("method","post");
			//请求地址
			form.attr("action","/pay/checkout");
			//第一个参数 orderId
			var input1 = $("<input>");
			input1.attr("type","hidden");
			input1.attr("name","orderId");
			input1.attr("value",orderId);
			//第二个参数 totalPrice
			var input2 = $("<input>");
			input2.attr("type","hidden");
			input2.attr("name","payPrice");
			input2.attr("value",totalPrice);
			//...多个参数以此类推
			
			$("body").append(form);
			form.append(input1);
			form.append(input2);
			form.submit();
			form.remove();
		} else {
			return false;
		}
	}
});
}

致此,参数完美的隐藏了,但是项目运行过程中,我们的写的js还是会暴露出去,通过分析js还是可以查看分析我们的路径和参数,因为js设计的时候就是明文执行。所以对于重要的js还是要通过特殊手段加密。
例如:
1、将重要的逻辑处理在后端进行,这个过程就比较繁琐
2、通过软件将js直接加密处理,比较常用的是 jshaman ,整个将js代码复制过去,加密后复制回来直接可以使用。
3、自己写个小脚本禁止 F12等按键查看源码等 页面禁用F12或禁用右键查看源码,其他方式还是有挺多的,可以根据实际情况使用,就不多做介绍了



http://www.niftyadmin.cn/n/303868.html

相关文章

video插件播放m3u8格式视频(存原生)

video插件播放m3u8格式视频(存原生) 这里使用原生的javascript实现m3u8格式视频播放。 使用了包括video.min.js库和HLS插件。 1-基础使用 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Video.js HLS Example</title…

逍遥自在学C语言 | 条件控制的正确使用姿势

前言 在C语言中&#xff0c;有三种条件判断结构&#xff1a;if语句、if-else语句和switch语句。 一、人物简介 第一位闪亮登场&#xff0c;有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。 二、if语句 基本语法 if (条…

分享一个提高运维效率的 Python 脚本

哈喽大家好我是咸鱼&#xff0c;今天给大家分享一个能够提升运维效率的 python 脚本 咸鱼平常在工作当中通常会接触到下面类似的场景&#xff1a; 容灾切换的时候批量对机器上的配置文件内容进行修改替换对机器批量替换某个文件中的字段 对于 Linux 机器&#xff0c;咸鱼可以…

掌握C++面向对象:从类的声明到运算符重载的完整指南

C 基础知识 七 类和对象 一、 类的声明1. 使用 class 和 struct 关键字声明类2. 类的成员变量和成员函数的声明和定义3. 类的访问控制&#xff1a;public、private、protected 二、 类的使用1. 使用类名创建对象2. 对象的数据成员和成员函数的访问 三、 面向对象三大特性1 继承…

飞腾UEFI配置GPIO—飞腾FT2000/4 (D2000/8) GPIO引脚配置及使用

文章目录 一、FT2000/4 GPIO介绍GPIO 接口信号说明专用GPIO(GPIO0_A1、GPIO0_A7/SCI)介绍二、UEFI下配置GPIO相关寄存器GPIO相关相关引脚功能配置说明UEFI配置GPIO相关代码UEFI源代码解释一、FT2000/4 GPIO介绍 GPIO 接口信号说明 FT-2000/4 提供两个 GPIO(General Purpose …

强烈推荐:一款中文AI问答、创作、绘画工具

前言 相信很多人已经听过ChatGPT这款人工智能机器人了&#xff0c;它能够根据用户输入的内容&#xff0c;自动生成智能回复。它使用自然语言处理技术&#xff0c;通过学习大量的文本资料&#xff0c;能够模拟人类的对话行为。它是由OpenAI开发的&#xff0c;一家非常伟大的人工…

Nessus 10.5 Auto Install for macOS Ventura(自动化安装 Nessus 试用版)

发布 Nessus 试用版自动化安装程序&#xff0c;支持 macOS Ventura、RHEL 9 和 Ubuntu 22.04 请访问原文链接&#xff1a;https://sysin.org/blog/nessus-auto-install-for-macos/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.o…

Redis缓存

就先不连接数据库了 我们测试缓存 实体类&#xff1a; Data AllArgsConstructor NoArgsConstructor public class User implements Serializable {private int id;private String name;private String sex;private String addr; } service&#xff1a; Service public…