您的位置:首页 > Web前端 > JavaScript

JS页面跳转使地址后面不显示参数

2017-04-05 10:17 1006 查看

背景

使用window.open()和window.location.href跳转时,新页面的地址栏会显示参数,如下:http://127.0.0.1:8080/website-cms/admin/article/edit?action=add

这样会暴露参数内容,用户可以修改地址栏的参数。如果提交的参数修改可能会出现业务上的错误,甚至可以跳过权限验证,实现本来没有的权限。

案例

以前做过一个系统是通过权限控制按钮,权限小的只能查看,权限大的可以修改。但是为了方便只使用了同一个页面通过不同的参数控制查看和修改。?op=1和?op=2分别是查看和修改,结果有的用户直接将op=1改为了op=2从而跳过权限验证,直接实现了修改功能。

实现方法

实现的思路是利用JS创建一个Form表单,然后将参数用Input元素的方式添加到Form表单中,最后提交Form表单从而实现跳转。

Form创建工具类

(function(){
//设置命名空间
var CodeSTD = window.CodeSTD || {};

window.CodeSTD = CodeSTD;

/**
* 创建Form表单
* @author 王成委
* @param config Object
*  <p>url:form的Action,提交的后台地址</p>
*  <p>method:使用POST还是GET提交表单</p>
*  <p>params:参数 K-V</p>
* @return Form
*/
CodeSTD.form = function(config){
config = config || {};

var url = config.url,
method = config.method || 'GET',
params = config.params || {};

var form = document.createElement('form');
form.action = url;
form.method = method;
form.target = "_blank";

for(var param in params){
var value = params[param],
input = document.createElement('input');

input.type = 'hidden';
input.name = param;
input.value = value;

form.appendChild(input);
}

return form;
}

})()

使用方法

function onAddClick(){
var treeObj = $.fn.zTree.getZTreeObj("menu-tree");
var nodes = treeObj.getSelectedNodes();
var node = nodes[0];
var menuId = node.menuId,menuName = node.menuName;

var form = new CodeSTD.form({
url:'admin/article/edit',
method:'POST',
params:{
editor:'UE',
action:'add',
menuId:menuId,
menuName:menuName
}
})

$(form).submit();

form = null;
}

使用Form跳转后的地址http://127.0.0.1:8080/website-cms/admin/article/edit
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: