漏洞:CSRF跨站点请求伪造;现已经尝试:
protected void Page_Init(object sender, EventArgs e)
{
   this.ViewStateUserKey = Session.SessionID;
}
但页面报错,后在aspx的:<%@ Page 中增加EnableViewStateMac="false"  不报错了,但依然无法通过漏洞扫描。
aspx的页面中有Timer控件是循环执行,发现每次执行都会更新this.ViewStateUserKey = Session.SessionID;
不知道是不是此原因导致this.ViewStateUserKey = Session.SessionID;无法解决此漏洞。请求大家帮助,是否有其他可行的方式,请尽可能提供源代码供参考!万分感谢!

解决方案 »

  1.   

    http://www.cnblogs.com/xuanhun/archive/2009/04/23/1442239.html
      

  2.   


    不太清楚。。但你关了应该是过不了漏洞扫描的EnableViewStateMac为false,就不会去验证加密的视图状态在客户端上是否未被篡改这样应该是通不过漏洞扫描。。
      

  3.   

    但我不加:EnableViewStateMac="false" 页面会报错:消息: Sys.WebForms.PageRequestManagerServerErrorException: 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。是不是因为Timer控件导致。
      

  4.   

    每次页面产生的时候在页面上保存一个token(可以用hiddenfield保存这个token),当post这个请求的时候将这个token进行对比,如果一样才允许后续的代码执行,否则提示用户
      

  5.   

    我现在发现如果是get请求怎么办?
      

  6.   

    本站a页面 a.aspx 链接 b.aspxb.aspx?sessionid=<%=Session.SessionID.ToString()%>b.aspx
    int sessionID = Convert.ToInt32(Request.QueryString("sessionid"));if(sessionID == Session.SessionID)
    {
    }解决get请求
      

  7.   

    都增加UrlReffer的认证,不通过的就服务器端的Response.Redirect()  不用JS脚本在CS代码中应该能通过安全扫描。