WebApi系列~基于单请求封装多请求的设计~请求的安全性设计与实现
来源:互联网 发布:java读取文件乱码 编辑:程序博客网 时间:2024/06/09 22:02
对于一个Http请求如何保证它的安全,这已经不是一个新的话题,对于请求的安全我们通常考虑的无非就是"请求的被篡改性"和"请求的被复制性",第一个问题我们很容易实现,可以通过参数+密钥的方式,而第二个问题就很难实现了,到目前为止也没有一个统一的标准,今天我们要说的安全性,也主要针对的第一种来讲的.
对于一个URL地址来说,可能是这样的格式
http://www.domain.com?vid=1&type=3&main=ok
对上面地址进行安全防篡改之后,可能地址就变成了这样
http://www.domain.com?vid=1&type=3&main=ok&cipherText=e10adc3949ba59abbe56e057f20f883e
其中cipherText我们叫做密文,它由所有参数名+参数值+钥密再进行md5生成的,其中钥密是不公开的,在数据传递过程中,只要修改任意参数,你生成的cipherText就与我们正确的值不同,这时,你的验证就是不通过的,呵呵.
对此,我把这套逻辑进行了抽象,提取到了特性里(过滤器),如果你的action需要进行这种安全性验证的话,直接在方法上添加这个特性即可
/// <summary> /// api数据安全性验证 /// </summary> [AttributeUsage(AttributeTargets.Method)] public class ApiValidateFilter : System.Web.Mvc.ActionFilterAttribute { public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext) { var request = filterContext.HttpContext.Request; var method = request.HttpMethod; var passKey = "tsingda123"; var paramStr = new StringBuilder(); foreach (string param in request.Form.Keys) { if (param != "cipherText") paramStr.Append(request.Form[param]); } paramStr.Append(passKey); if (VCommons.Encryptor.Utility.EncryptString(paramStr.ToString(), VCommons.Encryptor.Utility.EncryptorType.MD5) != request.Form["cipherText"]) { //验证失败 filterContext.HttpContext.Response.ContentType = "applicatin/json"; filterContext.HttpContext.Response.Write(VCommons.SerializeMemoryHelper.SerializeToJson(new { Message = "验证失败" })); filterContext.HttpContext.Response.End(); } else { base.OnActionExecuting(filterContext); } } }
使用时非常简单,呵呵
[ApiValidateFilter] public JsonResult AddHello(string username, string password, string email) { return Json(new { Message = username + password + email }, JsonRequestBehavior.AllowGet); }
在系统架构的世界里,我们需要的已经对问题的抽象,对代码的重构,这种重构是不断的,反复的,我一直不相信"有一次写好的代码",代码是在不断的重构中完美的!
0 0
- WebApi系列~基于单请求封装多请求的设计~请求的安全性设计与实现
- WebApi系列~基于单请求封装多请求的设计
- 设计新的Android HTTP请求封装类
- 基于AFNetWoring 封装的网络请求类
- 基于网络请求框架的封装
- WebAPI请求
- 设计模式系列16---响应请求的责任链模式
- 网络请求的封装
- 封装的网络请求
- 网络请求的封装
- 网络请求的封装
- webapi的form格式请求的问题
- 优雅设计封装基于Okhttp3的网络框架(完):原生HttpUrlConnction请求、多线程分发 及 数据转换
- webapi的post和get请求总结
- 【接口】-请求WebApi的2种方式
- 使用NSURLConnection的网络请求与封装
- 基于浏览器的http普通请求与ajax请求
- 基于浏览器的http普通请求与ajax请求
- JQuery弹出层,点击按钮后弹出遮罩层,有关闭按钮
- 初试Spring MVC
- WebApi系列~基于单请求封装多请求的设计
- jstl使用笔记
- 查看虚函数表和类内存布局,以及使用MSVC与GCC hack验证
- WebApi系列~基于单请求封装多请求的设计~请求的安全性设计与实现
- c407(A,B)408(A,B)
- WebApi系列~开放的CORS,跨域资源访问对所有人开放
- FOJ有奖月赛-2015年11月 Problem A 据说题目很水
- LeetCode---Subsets II
- WebApi系列~按需序列化字段~Hot
- 【转】写给系统管理员的 25 个 PHP 安全实践
- iOS常用5种数据存储方式详解
- 【Linux】Swap分析Oracle 服务器内存