防止XSRF 解决方案
1.首先在表单提交页面生成校验使用的Token
public ActionResult Index()
{
//Token验证需要使用的token
string token = System.Guid.NewGuid().ToString();
this.HttpContext.Session["Token"] = token;
ViewBag.token = token;
return View();
}
2.视图页面在表单作用域下建立隐藏域
<input type="hidden" name="hiddenToken" id="hiddenToken" value="@ViewBag.token" />
3.建立验证Token逻辑的特性标签
public class PlatformActionFilter : FilterAttribute, IActionFilter
{
public PlatformActionFilter()
{ }
public void OnActionExecuting(ActionExecutingContext filterContext)
{
string httpMethod = filterContext.RequestContext.HttpContext.Server.HtmlEncode(filterContext.RequestContext.HttpContext.Request.HttpMethod); if (httpMethod == "POST")
{
// page token
// hiddenToken
string cacheToken = filterContext.HttpContext.Request["hiddenToken"];
var session = System.Web.HttpContext.Current.Session["Token"];
//filterContext.HttpContext.Request.IsAjaxRequest()
if (session != null)
{
if (cacheToken == session.ToString())
{
System.Web.HttpContext.Current.Session["Token"] = "Success";
Logger.LogHelper.WriteErrorLog("提交成功!");
}
else
{
System.Web.HttpContext.Current.Session["Token"] = "Erro";
Logger.LogHelper.WriteErrorLog("请不要重复提交!");
}
}
}
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{ }
}
4.提交控制器做验证判断token值是否为Success
[HttpPost]
[PlatformActionFilter]
public ActionResult Register(Users Usdata)
{
if (this.HttpContext.Session["Token"].ToString() == "Erro")
{
return WriteError("请不要重复提交!");
}
//这里写正常的业务逻辑和返回
return WriteSuccess("注册成功!");
}
整个流程的验证思路就是在session中存放一个特殊标志。当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,通过过滤器的标签验证session是否合法,然后正常处理数据。除非走正常逻辑先进入到表单提交页面,然后才能正常处理Post请求。
还有就是检查HttpContext.Request.UserAgent
if (HttpContext.Request.UserAgent == "Fiddler")
{
WriteError("请求非法");
}
防止XSRF 解决方案的更多相关文章
- asp.net MVC 常见安全问题及解决方案
asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session rid ...
- IIS安全工具UrlScan介绍 ASP.NET 两种超强SQL 注入免费解决方案( 基于IIS,使用免费工具) 批改或隐藏IIS7.5的Server头信息 移除X-Powered-By,MVC,ASP.NET_SessionId 的 HTTP头或者cookie名称
微软给了我们一个很好的工具用来使IIS安全的运行-------UrlScan,下面是它的配置文件介绍 [options]UseAllowVerbs=1 ; 若为1,则使用 ...
- 常见web安全隐患及解决方案
Abstract 有关于WEB服务以及web应用的一些安全隐患总结资料. 1. 常见web安全隐患 1.1. 完全信赖用户提交内容 开发人员决不能相信一个来自外部的数据.不管它来自用户提交 ...
- 如何防止XSRF攻击
XSRF全称是 cross-site request forgery(跨站点请求伪造),也称为CSRF,是一种常见的web攻击方式. 攻击形式描述如下: 1.用户登录并访问一个正常的站点 http:/ ...
- [转]asp.net MVC 常见安全问题及解决方案
本文转自:http://www.cnblogs.com/Jessy/p/3539564.html asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request ...
- CSRF/XSRF 跨站请求伪造
CSRF/XSRF 跨站请求伪造 CSRF(Cross Site Request Forgery, 跨站域请求伪造)也称 XSRF, 是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安 ...
- 程序员常用的3大Web安全漏洞防御解决方案:XSS、CSRF及SQL注入(图文详解)
https://blog.csdn.net/ChenRui_yz/article/details/86489067 随着互联网的普及,网络安全变得越来越重要,程序员需要掌握最基本的web安全防范,下面 ...
- 常见web安全隐患及解决方案(转)
Abstract 有关于WEB服务以及web应用的一些安全隐患总结资料. 1. 常见web安全隐患 1.1. 完全信赖用户提交内容 开发人员决不能相信一个来自外部的数据.不管它来自用户 ...
- 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)
通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...
随机推荐
- Shell编程变量
shell变量 什么是变量,存放了各种数据,在linux怎么定义了变量,name=ken,name就是变量名,ken就是变量值, 但是在shell中,有三种方式: name=ken name='ken ...
- django + celery的队列,路由与弹性
#celery_app.py #!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import absolute_import ...
- Nginx配置https兼容http
现象 如果一个https站点里面有引用一些http的静态资源,图片可以正常加载,但是js文件.css文件就会加载失败,如下图: 原因 为了解释这个问题,首先要理解一下Mixed Content的概念: ...
- u-boot makefile $$
define filechk_uboot.release echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setl ...
- php内置函数分析array_count_values()
PHP_FUNCTION(array_count_values) { zval *input, /* Input array */ *entry, /* An entry in the input a ...
- html+css 在图片上添加文字
html <view class="container"> <image class="" src="{{book.image}}& ...
- 深入理解MySql事务
事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段.本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理. MySQL博大精深,文 ...
- jquery每次动态加载dom,绑定事件会多一次,
jquery绑定事件,每次动态加载dom,绑定的事件会加1,比如动态加载dom5次,点那个点击事件会弹出5次 解决办法就是在每次绑定之前解绑定. $('.seek-footer .btn1').off ...
- python-上传文件的几种方式
from requests_toolbelt import MultipartEncoder import requests # from_data上传文件,注意参数名propertyMessageX ...
- iOS 推送角标解决方案
在App启动时:didFinishLaunchingWithOptions 方法中:application.applicationIconBadgeNumber = ; //角标清零 在读消息时: a ...