解决asp.net跨站点请求伪造的简单手段以及遇到的问题

借鉴:http://blog.csdn.net/hnwanghb/article/details/7920674

在aspx页面的 override protected void OnInit(EventArgs e)事件里,添加一句代码:

Page.ViewStateUserKey = Session.SessionID; 

  override protected void OnInit(EventArgs e)
  {
            base.OnInit(e);

            Page.ViewStateUserKey = Session.SessionID; 
  }

但有些人可能会碰到下面这个错误

验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。

先尝试如下解决(借鉴http://www.cnblogs.com/sephil/archive/2007/10/19/asp_net_post.html)
修改当前页面的@page属性,添加enableEventValidation="false" enableViewStateMac="false"
或者在web.config里添加<pages enableEventValidation="false" enableViewStateMac="false" />

如果不行,则估计是在解决会话标识未更新的问题时造成的,因每次页面要生成新的SessionID,而当页面需要有回发逻辑时,造成与服务器ViewStateUserKey解析不一致(大概是这样,呵呵)
附带会话标识未更新的解决方法:
if (!IsPostBack&&Session["user"]==null)///Session["user"]根据个人逻辑要或不要
  {

                Session.Abandon();
                Request.Cookies.Clear();
                Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值