csdn的csrf漏洞展示漏洞效果
http://topic.csdn.net/u/20091121/18/a55f7957-7930-4f32-9c79-f5367ebfa4b2.html点10楼的链接自动会在http://topic.csdn.net/u/20091121/16/d431f4b7-0ac7-4bad-b074-25cd94bde7ca.html有你们的回复可能大家会有疑问这样的东西应该没有什么危害,其实不是的csrf漏洞是利用浏览器的某种特质,访问另一个网站时回发一段儿带你登陆信息(cookie)并且恶意的发送数据的方法原理如下 某一个用户z 登陆网站A->发送一段儿带有诱惑性质的链接(如美女图片),此链接是B网站的某个页面,而B这个网站的页面带有一个往A页面发送攻击数据的东西,如在csdn中恶意发帖或者转分等行为(无验证码)以达到攻击的目的。 这时如果用户y 登陆网站A点击此链接后,用户z的攻击便以形成。详情可看http://baike.baidu.com/view/1609487.htm?fr=ala0在这里大家可以考虑一下asp.net网站如何防止csrf攻击方法。我自己有多种方案,暂不公布答得好的分多

解决方案 »

  1.   


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>无标题页</title>
    </head>
    <body>
    <form name="form1" id="form1" method="post" action="http://forum.csdn.net/PointForum/Forum/ReplyT.aspx?forumID=a3049f56-b572-48f5-89be-4797b70d71cd&amp;topicID=d431f4b7-0ac7-4bad-b074-25cd94bde7ca&amp;postDate=2009-11-21+16%3a23%3a03&amp;v=13" id="form1">
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTA2MTA3Njg5NA9kFgICCQ9kFgJmD2QWAgIFD2QWAmYPZBYCZg8PFgIeBE1vZGULKiVTeXN0ZW0uV2ViLlVJLldlYkNvbnRyb2xzLlRleHRCb3hNb2RlARYCHgVzdHlsZQUYaGVpZ2h0OjE4MHB4O3dpZHRoOjEwMCU7ZGRpl2NuIb2XmIUODhEniCtEXExdOA==" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwLtl7ScBQK6873ZCgK3mOXeAjqcUaoqnb3Nj0uKUrGKImKcexCG" />
    <textarea name="tb_ReplyBody$_$Editor" rows="2" cols="20" id="tb_ReplyBody___Editor" style="height:180px;height:180px;width:100%;">
    just test
    </textarea>
    <input type="submit" name="bt_Submit" value="提交回复" id="bt_Submit" class="button" />
    </form>
    <script> 
    //alert("点击测试");
    var o=document.getElementById("bt_Submit");
    o.click();
    //var o=document.getElementById("form1");
    //o.submit();
    </script>
    </body>
    </html>
      

  2.   

    从源码中还是可以看出点端倪的。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>无标题页</title>
    </head>
    <body>
    <form name="form1" id="form1" method="post" action="http://forum.csdn.net/PointForum/Forum/ReplyT.aspx?forumID=a3049f56-b572-48f5-89be-4797b70d71cd&amp;topicID=d431f4b7-0ac7-4bad-b074-25cd94bde7ca&amp;postDate=2009-11-21+16%3a23%3a03&amp;v=13" id="form1">
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTA2MTA3Njg5NA9kFgICCQ9kFgJmD2QWAgIFD2QWAmYPZBYCZg8PFgIeBE1vZGULKiVTeXN0ZW0uV2ViLlVJLldlYkNvbnRyb2xzLlRleHRCb3hNb2RlARYCHgVzdHlsZQUYaGVpZ2h0OjE4MHB4O3dpZHRoOjEwMCU7ZGRpl2NuIb2XmIUODhEniCtEXExdOA==" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwLtl7ScBQK6873ZCgK3mOXeAjqcUaoqnb3Nj0uKUrGKImKcexCG" />
    <textarea name="tb_ReplyBody$_$Editor" rows="2" cols="20" id="tb_ReplyBody___Editor" style="height:180px;height:180px;width:100%;">
    just test
    </textarea>
    <input type="submit" name="bt_Submit" value="提交回复" id="bt_Submit" class="button" />
    </form>
    <script>
    //alert("点击测试");
    var o=document.getElementById("bt_Submit");
    o.click();
    //var o=document.getElementById("form1");
    //o.submit();
    </script>
    </body>
    </html>
      

  3.   

    //var o=document.getElementById("form1");
    //o.submit();你们知道为什么不用这个么??从asp.net的机制上考虑...
      

  4.   

    那我稍微讨论下:这个主要是利用Cookie和Session。那我们能不能,传值的时候再传一个只有本站才有的验证?而且这个是加密的,又或者是动态生成的
      

  5.   

    xian ding zai kan 
      

  6.   

    如何利用此类漏洞在csdn中为自己获利创造价值也可以分析一下....我研究了一下,觉得还是有不少可以利用的地方
      

  7.   

    ASP.NET中已经提供一个自动防范的方法,就是用页面属性 ViewStateUserKey。在Page_Init方法中设置其值:this.ViewStateUserKey = Session.SessionID
    参考:http://www.cnblogs.com/jacksonwj/archive/2009/03/17/1413872.html
      

  8.   

    最近有好多发帖者说回复需要重新登录,不知道是csdn在尝试解决这个问题时造成的困扰吗?
      

  9.   

    哈哈,仿照楼主做了个自动发贴的http://l.99081.com/csdn
      

  10.   

    判断请求的页面行不?
    像百度和腾讯的图片防盗链一样的,判断请求的url
      

  11.   

    只处理本页面的,不接受跨页的Form提交。。
      

  12.   


    可以,但是有问题,据说有的防火墙把reffer去掉了,我们不是qq或baidu 没那么大架子。呵呵不过也是种解决方案
      

  13.   

    http://www.cnblogs.com/jacksonwj/archive/2009/03/17/1413872.html这个文章有点儿错这个跟ajax没关系如果是ajax算是xss,而如果我们用csrf用xmlhttp的话,有跨域问题,感觉写那个文章的人 知其然不知其所以然呵呵
      

  14.   

    不就是个表单提交,算不上漏洞,实在要防止,简单检测下提交的referer地址就可以解决了
      

  15.   


    而且referer不好,有可能客户机本身的防火墙就把referer的信息拦截了,某些浏览器也有可能去掉了referer,这个方案不太好...
      

  16.   

    http://www.baidu.com
      

  17.   

    http://topic.csdn.net/u/20091121/18/a55f7957-7930-4f32-9c79-f5367ebfa4b2.html
      

  18.   

    貌似瞬间多了3,4个"test..."题目帖子
    其中有我
      

  19.   

    function token_check() {
    // Check if the Session Token exists
    if(is_stoken()) {
    // Check if the request has been sent
    if(isset($_REQUEST[FTOKEN_NAME])) {
    // If the Form Token is different from Session Token
    // it's a malicious request
    if($_REQUEST[FTOKEN_NAME] != $_SESSION[STOKEN_NAME]) {
    gen_error(1);
    destroy_stoken();
    exit();
    } else {
    destroy_stoken();
    }
    // If it isn't then it's a malicious request
    } else {
    gen_error(2);
    destroy_stoken();
    exit();
    }
    // If it isn't then it's a malicious request
    } else {
    gen_error(3);
    destroy_stoken();
    exit();
    }
    }
      

  20.   

    session在登录的时候直接记录IP地址,经过换算作为cookie的一部分还给用户端,用户要做啥风险动作的时候反算检测下操作IP是否和初始的时候一样,一样的话发个美女图片作为奖励,不一样的话发个警告图片作为,呃,威胁。。
      

  21.   

    看了这篇帖子,我对网络真的无语!简直是魔鬼!这些对于一些普通用户来说几乎是不可能的事情!(人间{CSDN不在人间})太恐怖了!
      

  22.   

    1  。禁用 COOKIE
    没验正码,谁叫不搞个玛 上去呢
      

  23.   

    好像csdn还没解决,刚才点了一下,想不到自动插入了好几十条
      

  24.   


    //操作IP是否和初始的时候一样这个不成的,因为ip是一样的.....呵呵,因为ip还是走的客户自己的地址....不过这个方案是动脑子了,可惜结果不对,说得比较有意思,我喜欢
      

  25.   

    照你说的这种情况,其实根本用不着发个诱惑性的连接,我直接在本地用AJAX循环个10000000万次请求不断的发贴就行了。解决的办法,一个是用验证码。第二个是限制连续发贴时间。还有一个简单的办法,但可能不治本,就是判断来源网页是不是一个服务器的。不是的就重定向一个错误页面。
      

  26.   


    不一样啊,那样的话,只有你一个人的....很好封的..csrf是利用其他人的信息,比如说我把你的注册信息改了你也不知道啊....
      

  27.   

    这个本身就是浏览器的一个特性,因为ACTION的地址是可以跨域访问的。所以大家都在用验证码。这是最根本的解决办法。
      

  28.   


    很不幸得是不需要,只验证登陆即可,http://hi.csdn.net/cp.php?ac=profile而我只需要把这个页面做成中转提交,你只要不小心点了我的链接就中招了,你也可以试试33楼的链接是用你的帐号发的帖子....
      

  29.   

    这问题是以前反映在以前百度贴吧上,最初百度贴吧注册用户可以无限制发贴,所以造成了很多自动发贴机。后来百度干脆想了一个办法,用验证码,但一般网民还是没有恶意攻击行为的。天天用验证码会让人感到很烦,所以他们又想了个办法。一般注册用户,用验证码发贴到200,就停止验证码。(ASP.NET中已经提供一个自动防范的方法,就是用页面属性 ViewStateUserKey。在Page_Init方法中设置其值:this.ViewStateUserKey = Session.SessionID)。这个没看明白
      

  30.   


    那只能说明CSDN的程序做的太垃圾了, 每次需要验证COOKIE中的用户名和密码,这是必须的。
      

  31.   


    你先看看原理....兄弟,csdn的程序验证了cookie了....验证cookie是防不住这种攻击的....
      

  32.   


    兄弟啊,验证cookie当然防不住跨域攻击,不过问题是,你说的意思是你更改我的个人资料,这怎么可能?
    更改前系统总要验证下用户名和密码吧,然后再决定是否真的能更改!
      

  33.   


    我问你个问题 你知道你什么时候发的http://topic.csdn.net/u/20091122/10/fd0b4a12-4254-438f-a864-0504dceea9fb.html这个帖子么?以及为什么....哎
      

  34.   

    这是我为了搞明你贴子说的意思,做的测试啊;你就是在其他服务器上建立了一个网页表单,然后action指向了csdn发贴的处理地址啊,这和更改我的个人资料有什么关系?如果说你能更改我在csdn的个人资料,只能说明一个问题,csdn仅仅保存了用户名cookie,然后更改这个cookie的用户名就换成了另外一个用户,这是极其不负责任的做法。应该同时把加密后的密码也保存起来,然后每一个表单post都要发送到服务器进行验证
      

  35.   

    弄了半天,更糊涂了,没弄明白楼主是什么意思,我只知道action可以跨域进行提交。刚才我第一次点击你那个网页的时候,按了提交按钮后是发表贴子了。但是我一想不对啊,你那个网页是另外一个网站上的,它不应该能访问我在csdn上的cookie啊,那它是怎么发的贴子?于是我又测试了一下,发现你那个网页又是重定向到csdn论坛的发贴页了。当然可以读取我的本地的cookie,然后发帖,这不算什么漏洞啊。
      

  36.   


    你快明白了...尤其是但是我一想不对啊,你那个网页是另外一个网站上的,它不应该能访问我在csdn上的cookie啊,那它是怎么发的贴子?这句.....呵呵,然后你固有的思路打断了你....你加油想想吧...感觉你太容易受你固有的经验影响了其实你找个抓包工具看看,一目了然的...
      

  37.   

    是不是因为这个连接是在CSDN页面中的,所以连接网另外一个网站时会把CSDN的cookie一同发送过去?
      

  38.   

    对cookie进行session验证,对session进行cookie验证
      

  39.   


    不是,你还差一点儿,这是浏览器已经记录了你的A站点的cookie,这时B站点再跨域访问A站点的时候会把A站点的cookie也发回给A,并且同时B站点的攻击数据也发送了,而这时等于是用你的名义做了一些对A站点的操作(其实你根本没操作,真实的操作是B站点做了),所以cookie中不管加密与否都无所了以及有没有在cookie中保存密码也不重要了
      

  40.   

    “这是浏览器已经记录了你的A站点的cookie,这时B站点再跨域访问A站点的时候会 把A站点的cookie也发回给A,”“B再访问A时会把A站点的COOKIE发回给A”,我的疑问是B怎么会有“回发”给A的COOKIE,要是以这个意思,其不是A访问B的时候会把A的cookie发给B?这是跟浏览器的COOKIE设置有关?
      

  41.   


    跟浏览器的对域名和cookie的管理有关....发现你终于想明白了,这是浏览器本身的做法问题