一个页面跳转到另外一个页面直接将参数写在URL上面并不安全比如 http://XXXXXXXXXXX/meeting/shakeGroup?id=5381&uid=o0En_sj1J0bFgIBMPG37WjWMXpqY

参数id和uid需要进行加密,写个简单的例子来实现:

加密类:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web; namespace CnbLogsProject.Util
{
public class EnCodeHelper
{
// url传输参数加密密钥
public static string strKeys = "abdfajrtrgjfg"; #region 加密字符串
/// <summary>
/// 加密
/// </summary>
/// <param name="strValue"></param>
/// <returns></returns>
public static string GetEncryption(string strValue)
{
//加密标准算法的对象
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
//建立加密对象的密钥和偏移量
provider.Key = Encoding.ASCII.GetBytes(strKeys.Substring(, ));
//原文使用Encoding.ASCII方法的GetBytes方法
provider.IV = Encoding.ASCII.GetBytes(strKeys.Substring(, ));
//将要加密的字符放到byte数组中
byte[] bytes = Encoding.UTF8.GetBytes(strValue);
//输入的文本必须是英文文本
MemoryStream stream = new MemoryStream();
//定义将数据连接到加密转换的流
CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write);
stream2.Write(bytes, , bytes.Length);//将当前字节写入到流中
stream2.FlushFinalBlock();//清除缓存区
StringBuilder builder = new StringBuilder();
//循环遍历每个字节
foreach (byte num in stream.ToArray())
{
builder.AppendFormat("{0:X2}", num);
}
stream.Close();//关闭释放资源
return builder.ToString();
}
#endregion #region 解密字符串
/// <summary>
/// 解密
/// </summary>
/// <param name="strValue"></param>
/// <returns></returns>
public static string GetDecryption(string strValue)
{
//解密标准算法的对象
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
//建立解密密对象的密钥和偏移量
provider.Key = Encoding.ASCII.GetBytes(strKeys.Substring(, ));
//原文使用Encoding.ASCII方法的GetBytes方法
provider.IV = Encoding.ASCII.GetBytes(strKeys.Substring(, ));
//将要解密的字符放到byte数组中
byte[] buffer = new byte[strValue.Length / ];
//循环遍历遍历
for (int i = ; i < (strValue.Length / ); i++)
{
int num2 = Convert.ToInt32(strValue.Substring(i * , ), 0x10);
buffer[i] = (byte)num2;
}
//输入的文本必须是英文文本
MemoryStream stream = new MemoryStream();
//定义将数据连接到解密转换的流
CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write);
//将当前字节写入到流中
stream2.Write(buffer, , buffer.Length);
stream2.FlushFinalBlock();//清除缓存区
stream.Close();//关闭释放资源
return Encoding.GetEncoding("GB2312").GetString(stream.ToArray());
}
#endregion
}
}
strKeys 为秘钥可以写在配置文件里面

控制器(将A页面的参数加密后暴露给客户端跳转到B页面时候解密):
     /// <summary>
/// A页面
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
string id = "";
string uid = "o0En_sj1J0bFgIBMPG37WjWMXpqY";
id = EnCodeHelper.GetEncryption(id);
uid = EnCodeHelper.GetEncryption(uid); ViewBag.id = id;
ViewBag.uid = uid;
return View();
} /// <summary>
/// B页面
/// </summary>
/// <param name="id"></param>
/// <param name="uid"></param>
/// <returns></returns>
public ActionResult Home(string id="",string uid="")
{
ViewBag.id =EnCodeHelper.GetDecryption(id);
ViewBag.uid =EnCodeHelper.GetDecryption(uid);
return View();
}

视图:

@{
ViewBag.Title = "Index";
}
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<button id="re">跳转</button>
<script> $(function () { $("#re").click(function () {
location.href = "Home?id="+"@ViewBag.id"+"&uid="+"@ViewBag.uid";
});
});
</script>
@{
ViewBag.Title = "Home";
} <input value="@ViewBag.id" />
<input value="@ViewBag.uid"/>
<h2>Home</h2>

效果:

原来的URL:http://localhost:63792/Home/Home?id=282D147B1B12BAE3&uid=29732D957DD4EF753BC3E94797D1018D230457174ABD43EF1ED2FEA651E8351E

跳转到B页面后成功解密:

对应上我们开头的

http://XXXXXXXXXXX/meeting/shakeGroup?id=5381&uid=o0En_sj1J0bFgIBMPG37WjWMXpqY

参数id和uid需要进行加密,写个简单的例子来实现:

当然还有其他很多方法

ASP.MVC当URL跳转时候参数的安全性的更多相关文章

  1. JS分页 + 获取MVC地址栏URL路径的最后参数

    @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...

  2. MVC中URL传多个参数

    1.mvc中url传递多个参数不能直接使用&,会报错(从客户端(&)中检测到有潜在危险的 Request.Path 值) 方法①:使用?---/Home/Index/?id=xxx&a ...

  3. url跳转路径参数获取

    function getUrlParam1(name){ //正则表达式过滤 var reg = new RegExp("(^|&)" + name + "=([ ...

  4. 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数

    目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...

  5. 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数,以及如何根据URL解析出匹配到MVC路由的Controller和Action

    目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...

  6. C# MVC 用户登录状态判断 【C#】list 去重(转载) js 日期格式转换(转载) C#日期转换(转载) Nullable<System.DateTime>日期格式转换 (转载) Asp.Net MVC中Action跳转(转载)

    C# MVC 用户登录状态判断   来源:https://www.cnblogs.com/cherryzhou/p/4978342.html 在Filters文件夹下添加一个类Authenticati ...

  7. ASP.NET MVC制作404跳转(非302和200)

    前言:距离上次发文已经有几个月了! 这段时间李,制作了一个博客网站,现将博客文章选一些发表到博客园,顺便为自己网站打一下广告! 产生404的原因主要有以下: 1.浏览器和爬虫:某些浏览器会请求网站的f ...

  8. 【转载】ASP.NET MVC重写URL制作伪静态网页,URL地址以.html结尾

    在搜索引擎优化领域,静态网页对于SEO的优化有着很大的好处,因此很多人就想把自己的网站的一些网页做成伪静态.我们现在在网络上发现很多博客网站.论坛网站.CMS内容管理系统等都有使用伪静态这一种情况,伪 ...

  9. ASP.NET Core MVC中URL和数据模型的匹配

    Http GET方法 首先我们来看看GET方法的Http请求,URL参数和ASP.NET Core MVC中Controller的Action方法参数匹配情况. 我定义一个UserController ...

随机推荐

  1. w3wp.exe已附加有调试器,但没有该调试器配置为调试此未经处理的异常,若要调试此异常,必须分离当前的调试器。

    之前通过使用VS2010附加进程调试项目后,今天开机发现调试本机的项目报错如下图: 到网上到处查看无果,经过反复实验找到解决方法,我的项目是发布到IIS的 1.首先删除IIS上面的项目 2.在VS右击 ...

  2. C# 插入排序(数据结构与算法)

    1                                                                   }

  3. [转载] 应用于负载均衡的一致性哈希及java实现

    转载自http://blog.csdn.net/haitao111313/article/details/7537799 这几天看了几遍一致性哈希的文章,但是都没有比较完整的实现,因此试着实现了一下, ...

  4. RabbitMQ之工作队列

    工作队列 工作队列(又称:任务队列Task Queues)是为了避免等待一些占用大量资源.时间的操作,当我们把任务Task当做消息发送队列中,一个运行在后台的工作者worker进程就会取出任务然后处理 ...

  5. python数据结构与算法篇:排序

    1.冒泡排序(英语:Bubble Sort) 它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. ...

  6. react 体验 react与vue的比较

    用了 vue 大半年了,不过我在2016年暑假的时候就看到了 react 这个项目,有点想学习一番,之前学习的都是基础语法和一些基础用法吧,总的来说 mvvm 框架确实都很相似,会一个就可以了; 今天 ...

  7. 基于socket.io打造hybrid调试页面

    前言 参考的钉钉调试页面实现,仅供学习! 功能为: PC端编写代码,手机端执行 解决的痛点是: 避免了调试hybrid应用时重复写各种测试页面 源码与示例 源码 https://github.com/ ...

  8. iOS面试题最全梳理

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装.继承.多态.它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).总体来讲,OC确实是一门不错 ...

  9. c语言的作用域、变量与结构体

    一.变量的作用域 根据变量的作用域,可以分为: 1.局部变量: 1> 定义:在函数(代码块)内部定义的变量(包括函数的形参) 2> 作用域:局部变量只有在定义它的函数内部使用,其它函数不能 ...

  10. 一些公司对quantitative的要求

    来自日月光华BBS: Company: UBS AG Job Title: Quantitative Developers / Analysts (Entry Level, Multiple Posi ...