Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
CSRF©¶´Ïêϸ˵Ã÷
 
À´Ô´£º£º°¢µÂÂí ·¢²¼ÓÚ£º2015-12-24
  3341  次浏览      27

Cross-Site Request Forgery£¨CSRF£©£¬ÖÐÎÄÒ»°ãÒë×÷¿çÕ¾ÇëÇóαÔì¡£¾­³£ÈëÑ¡owasp©¶´ÁбíTop10£¬ÔÚµ±Ç°web©¶´ÅÅÐÐÖУ¬ÓëXSSºÍSQL×¢Èë²¢ÁÐǰÈý¡£ÓëǰÁ½ÕßÏà±È£¬CSRFÏà¶ÔÀ´ËµÊܵ½µÄ¹Ø×¢ÒªÐ¡ºÜ¶à£¬µ«ÊÇΣº¦È´·Ç³£´ó¡£

ͨ³£Çé¿öÏ£¬ÓÐÈýÖÖ·½·¨±»¹ã·ºÓÃÀ´·ÀÓùCSRF¹¥»÷£ºÑéÖ¤token£¬ÑéÖ¤HTTPÇëÇóµÄReferer£¬»¹ÓÐÑéÖ¤XMLHttpRequestsÀïµÄ×Ô¶¨Òåheader¡£¼øÓÚÖÖÖÖÔ­Òò£¬ÕâÈýÖÖ·½·¨¶¼²»ÊÇÄÇôÍêÃÀ£¬¸÷ÓÐÀû±×¡£

CSRFµÄ·ÖÀà

ÔÚ¿çÕ¾ÇëÇóαÔ죨CSRF£©¹¥»÷ÀïÃæ£¬¹¥»÷Õßͨ¹ýÓû§µÄä¯ÀÀÆ÷À´×¢Èë¶îÍâµÄÍøÂçÇëÇó£¬À´ÆÆ»µÒ»¸öÍøÕ¾»á»°µÄÍêÕûÐÔ¡£¶øä¯ÀÀÆ÷µÄ°²È«²ßÂÔÊÇÔÊÐíµ±Ç°Ò³Ãæ·¢Ë͵½ÈκεØÖ·µÄÇëÇó£¬Òò´ËÒ²¾ÍÒâζ×ŵ±Óû§ÔÚä¯ÀÀËû/ËýÎÞ·¨¿ØÖƵÄ×ÊԴʱ£¬¹¥»÷Õß¿ÉÒÔ¿ØÖÆÒ³ÃæµÄÄÚÈÝÀ´¿ØÖÆä¯ÀÀÆ÷·¢ËÍËü¾«ÐĹ¹ÔìµÄÇëÇó¡£

1¡¢ÍøÂçÁ¬½Ó¡£ÀýÈ磬Èç¹û¹¥»÷ÕßÎÞ·¨Ö±½Ó·ÃÎÊ·À»ðǽÄÚµÄ×ÊÔ´£¬Ëû¿ÉÒÔÀûÓ÷À»ðǽÄÚÓû§µÄä¯ÀÀÆ÷¼ä½ÓµÄ¶ÔËûËùÏë·ÃÎʵÄ×ÊÔ´·¢ËÍÍøÂçÇëÇó¡£ÉõÖÁ»¹ÓÐÕâÑùÒ»ÖÖÇé¿ö£¬¹¥»÷ÕßΪÁËÈÆ¹ý»ùÓÚIPµØÖ·µÄÑéÖ¤²ßÂÔ£¬ÀûÓÃÊܺ¦ÕßµÄIPµØÖ·À´·¢ÆðËûÏë·¢ÆðµÄÇëÇó¡£

2¡¢»ñÖªä¯ÀÀÆ÷µÄ״̬¡£µ±ä¯ÀÀÆ÷·¢ËÍÇëÇóʱ£¬Í¨³£Çé¿öÏ£¬ÍøÂçЭÒéÀï°üº¬ÁËä¯ÀÀÆ÷µÄ״̬¡£ÕâÆäÖаüÀ¨ºÜ¶à£¬±ÈÈçcookie£¬¿Í»§¶ËÖ¤Êé»ò»ùÓÚÉí·ÝÑéÖ¤µÄheader¡£Òò´Ë£¬µ±¹¥»÷Õß½èÖúä¯ÀÀÆ÷ÏòÐèÒªÉÏÊöÕâЩcookie£¬Ö¤ÊéºÍheaderµÈ×÷ÑéÖ¤µÄÕ¾µã·¢ËÍÇëÇóµÄʱºò£¬Õ¾µãÔòÎÞ·¨Çø·ÖÕæÊµÓû§ºÍ¹¥»÷Õß¡£

3¡¢¸Ä±ää¯ÀÀÆ÷µÄ״̬¡£µ±¹¥»÷Õß½èÖúä¯ÀÀÆ÷·¢ÆðÒ»¸öÇëÇóµÄʱºò£¬ä¯ÀÀÆ÷Ò²»á·ÖÎö²¢ÏàÓ¦·þÎñ¶ËµÄresponse¡£¾Ù¸öÀý×Ó£¬Èç¹û·þÎñ¶ËµÄresponseÀï°üº¬ÓÐÒ»¸öSet-CookieµÄheader£¬ä¯ÀÀÆ÷»áÏàÓ¦Õâ¸öSet-Cookie£¬²¢Ð޸Ĵ洢ÔÚ±¾µØµÄcookie¡£ÕâЩ¸Ä¶¯¶¼»áµ¼ÖºÜ΢ÃîµÄ¹¥»÷£¬ÎÒÃǽ«ÔÚµÚÈý²¿·ÖÃèÊö¡£

×÷Ó÷¶Î§ÄÚµÄÍþв£ºÎÒÃǰ´ÕÕ²úÉúΣº¦µÄ´óС½«´Ë²¿·Ö·Ö³ÉÈýÖÖ²»Í¬µÄΣº¦Ä£ÐÍ¡£

1¡¢ÂÛ̳¿É½»»¥µÄµØ·½¡£ºÜ¶àÍøÕ¾£¬±ÈÈçÂÛ̳ÔÊÐíÓû§×Ô¶¨ÒåÓÐÏÞÖÖÀàµÄÄÚÈÝ¡£¾ÙÀýÀ´Ëµ£¬Í¨³£Çé¿öÏ£¬ÍøÕ¾ÔÊÐíÓû§ÌύһЩ±»¶¯µÄÈçͼÏñ»òÁ´½ÓµÈÄÚÈÝ¡£Èç¹û¹¥»÷ÕßÈÃͼÏñµÄurlÖ¸ÏòÒ»¸ö¶ñÒâµÄµØÖ·£¬ÄÇô±¾´ÎÍøÂçÇëÇóºÜÓпÉÄܵ¼ÖÂCSRF¹¥»÷¡£ÕâЩµØ·½¶¼¿ÉÒÔ·¢ÆðÇëÇ󣬵«ÕâЩÇëÇó²»ÄÜ×Ô¶¨ÒåHTTP header£¬¶øÇÒ±ØÐëʹÓÃGET·½·¨¡£¾¡¹ÜHTTPЭÒ鹿·¶ÒªÇóÇëÇó²»ÄÜ´øÓÐΣº¦£¬µ«ÊǺܶàÍøÕ¾²¢²»·ûºÏÕâÒ»ÒªÇó¡£

2¡¢Web¹¥»÷Õß¡£ÔÚÕâÀïweb¹¥»÷Õߵ͍ÒåÊÇÖ¸ÓÐ×Ô¼ºµÄ¶ÀÁ¢ÓòÃûµÄ¶ñÒâ´úÀí£¬±ÈÈçattacker.com£¬²¢ÇÒÓµÓÐattacker.comµÄHTTPSÖ¤ÊéºÍweb·þÎñÆ÷¡£ËùÓеÄÕâЩ¹¦ÄÜÖ»ÐèÒª»¨10ÃÀÔª¼´¿ÉÒÔ×öµ½¡£Ò»µ©Óû§·ÃÎÊattacker.com£¬¹¥»÷Õ߾ͿÉÒÔͬʱÓÃGETºÍPOST·½·¨·¢Æð¿çÕ¾ÇëÇ󣬼´ÎªCSRF¹¥»÷¡£

3¡¢ÍøÂç¹¥»÷Õß¡£ÕâÀïµÄÍøÂç¹¥»÷ÕßÖ¸µÄÊÇÄÜ¿ØÖÆÓû§ÍøÂçÁ¬½ÓµÄ¶ñÒâ´úÀí¡£±ÈÈ磬¹¥»÷Õß¿ÉÒÔͨ¹ý¿ØÖÆÎÞÏß·ÓÉÆ÷»òÕßDNS·þÎñÆ÷À´¿ØÖÆÓû§µÄÍøÂçÁ¬½Ó¡£ÕâÖÖ¹¥»÷±Èweb¹¥»÷ÐèÒª¸ü¶àµÄ×ÊÔ´ºÍ×¼±¸£¬µ«ÎÒÃÇÈÏΪÕâ¶ÔHTTPSÕ¾µãÒ²ÓÐÍþв¡£ÒòΪHTTPSÕ¾µãÖ»ÄÜ·À»¤ÓÐÔ´ÍøÂç¡£

×÷Ó÷¶Î§ÍâµÄÍþв£ºÏÂÃæÎÒÃÇ»¹ÁгöÁËһЩ²»ÔÚ±¾ÂÛÎÄÌÖÂÛ·¶Î§µÄÏà¹ØÎ£º¦Ä£ÐÍ¡£¶ÔÕâЩΣº¦µÄ·ÀÓù´ëÊ©¿ÉÒÔÓëCSRFµÄ·ÀÓù´ëÊ©ÐγɺܺõĻ¥²¹¡£

1¡¢¿çÕ¾½Å±¾£¨XSS£©¡£Èç¹û¹¥»÷ÕßÄܹ»ÏòÍøÕ¾×¢Èë½Å±¾£¬ÄÇô¹¥»÷Õß¾Í»áÆÆ»µ¸ÃÍøÕ¾Óû§»á»°µÄÍêÕûÐԺͱ£ÃÜÐÔ¡£ÓÐЩXSS¹¥»÷ÐèÒª·¢ÆðÍøÂçÇëÇ󣬱ÈÈ罫Óû§ÒøÐÐÕË»§ÀïµÄÇ®×ªÒÆµ½¹¥»÷ÕßµÄÕË»§Àµ«ÊÇͨ³£Çé¿öÏ£¬¶ÔCSRFµÄ·ÀÓù²¢Ã»Óп¼Âǵ½ÕâЩÇé¿ö¡£¿¼Âǵ½¸ü°²È«µÄ×ö·¨£¬ÍøÕ¾±ØÐëʵÏÖ¶ÔXSSºÍCSRFµÄͬʱ·ÀÓù¡£

2¡¢¶ñÒâÈí¼þ¡£Èç¹û¹¥»÷ÕßÄܹ»ÔÚÓû§µÄµçÄÔÉÏÔËÐжñÒâÈí¼þ£¬ÄÇô¹¥»÷Õ߾ͿÉÒÔ¿ØÖÆÓû§µÄä¯ÀÀÆ÷ÏòÄÇЩ¿ÉÐŵÄÍøÕ¾×¢Èë½Å±¾¡£Õâʱºò»ùÓÚä¯ÀÀÆ÷µÄ·ÀÓù²ßÂÔ½«»áʧЧ£¬ÒòΪ¹¥»÷Õß¿ÉÒÔÓú¬ÓжñÒâ²å¼þµÄä¯ÀÀÆ÷À´Ìæ»»Óû§µÄä¯ÀÀÆ÷¡£

3¡¢DNSµÄÖØÐ°󶨡£ÏñCSRFÒ»Ñù£¬DNSÖØÐ°󶨿ÉÒÔʹÓÃÓû§µÄIPµØÖ·À´Á¬½Ó¹¥»÷ÕßÖ¸¶¨µÄ·þÎñÆ÷¡£´¦ÔÚ·À»ðǽ±£»¤ÄڵķþÎñÆ÷»òÕßÄÇЩ»ùÓÚIPµØÖ·ÑéÖ¤µÄ·þÎñÆ÷ÐèÒªÒ»¸ö¶Ô¿¹DNSÖØÐ°󶨵ķÀÓù·½°¸¡£¾¡¹ÜDNSÖØÐ°󶨵Ĺ¥»÷ºÍCSRF¹¥»÷µÄÒâͼ·Ç³£ÏàËÆ£¬µ«ÊÇËûÃÇ»¹ÊÇÐèÒª¸÷×Ô²»Í¬µÄ½â¾ö·½°¸¡£Ò»¸ö¼òµ¥µÄ½â¾öDNSÖØÐ°󶨹¥»÷µÄ·½°¸¾ÍÊÇÒªÑéÖ¤Ö÷»úµÄHTTPÇëÇóheader£¬È·±£°üº¬ÓÐÔ¤ÆÚÖµ¡£»¹ÓÐÒ»¸öÌæ´ú·½°¸¾ÍÊǹýÂËDNSÁ÷Á¿£¬·ÀÖ¹½«ÍⲿµÄDNSÃû³Æ½âÎö³ÉÄÚ²¿Ë½ÓеØÖ·¡£

4¡¢Ö¤Êé´íÎó¡£Èç¹ûÓû§ÔÚ³öÏÖHTTPSÖ¤Êé´íÎóµÄʱºò»¹Ô¸Òâ¼ÌÐøµã»÷·ÃÎÊ£¬ÄÇôHTTPSÄܹ»ÌṩµÄºÜ¶à°²È«±£»¤¾ÍûÓÐÒâÒå¡£ÓÐһЩ°²È«Ñо¿ÕßÖ¸³öÁËÕë¶ÔÕâÒ»ÖÖÇé¿öµÄÍþº¦£¬µ«ÊÇÔÚ±¾ÎÄÖУ¬ÎÒÃǼÙÉèÓû§²»»áÔÚ³öÏÖÁËHTTPSÖ¤Êé´íÎóÖ®ºó¼ÌÐøµã»÷·ÃÎÊ¡£

5¡¢µöÓã¡£µ±Óû§ÔÚ·ÃÎʵöÓãÍøÕ¾µÄʱºò£¬ÔÚÉí·ÝÑéÖ¤µÄʱºòÊäÈë¸öÈËÐÅÏ¢£¬µöÓã¹¥»÷¾Í·¢ÉúÁË¡£µöÓã¹¥»÷ÏÖ½ñ·Ç³£ÆÕ±éÒ²ºÜÓÐЧ£¬ÒòΪÓû§ÓеÄʱºòÕæµÄºÜÄÑÇø·ÖµöÓãÍøÕ¾ºÍÕæÕýµÄÍøÕ¾¡£

6¡¢Óû§¸ú×Ù¡£Ò»Ð©ºÏ×÷ÍøÕ¾»áÀûÓÿçÕ¾ÇëÇóÀ´¶ÔÓû§µÄä¯ÀÀϰ¹ß½¨Á¢Ò»¸ö¹ØÁªÐÐΪ¿â¡£´ó¶àÊýä¯ÀÀÆ÷¶¼Í¨¹ý×éÖ¯µÚÈý·½cookie·¢ËÍÀ´×èÖ¹ÀàËÆµÄ¸ú×Ù£¬µ«ÊÇÀûÓùÒÕ¾ÇëÇó£¬ä¯ÀÀÆ÷µÄÕâÒ»ÌØÐÔ¿ÉÒÔ±»Èƹý¡£

怬CSRF

ÎÞÂÛÊÇÀûÓÃä¯ÀÀÆ÷µÄÍøÂçÁ¬½Ó»¹ÊÇÀûÓÃä¯ÀÀÆ÷µÄ״̬£¬´ó¶àÊý¶ÔCSRFµÄÌÖÂÛ¶¼¼¯ÖÐÔÚÄܸıä·þÎñ¶Ë״̬µÄÇëÇóÉÏÃæ¡£¾¡¹ÜCSRF¹¥»÷ÄÜͨ¹ý¸Ä±ää¯ÀÀÆ÷µÄ״̬À´¶ÔÓû§ÔÚ·ÃÎÊ¿ÉÐÅÍøÕ¾Ê±ºòÔì³ÉΣº¦£¬µ«ÊǶÔËüµÄÖØÊӳ̶Ȼ¹ÊDz»¹»¡£ÔٵǽCSRF¹¥»÷ÀïÃæ£¬¹¥»÷ÕßÀûÓÃÓû§ÔÚ¿ÉÐÅÍøÕ¾µÄÓû§ÃûºÍÃÜÂëÀ´¶ÔÍøÕ¾·¢ÆðÒ»¸öαÔìÇëÇó¡£Ò»µ©ÇëÇó³É¹¦£¬·þÎñÆ÷¶Ë¾Í»áÏìÓ¦Ò»¸öSet-CookieµÄheader£¬ä¯ÀÀÆ÷½ÓÊÕµ½ÒÔºó¾Í»á½¨Á¢Ò»¸ösession cookie£¬²¢¼Ç¼Óû§µÄµÇ½״̬¡£Õâ¸ösession cookie±»ÓÃ×÷°ó¶¨ºóÐøµÄÇëÇó£¬Òò¶øÒ²¿É±»¹¥»÷ÕßÓÃÀ´×÷ΪÉí·ÝÑéÖ¤¡£ÒÀ¾Ý²»Í¬µÄÍøÕ¾£¬µÇ½CSRF¹¥»÷»¹¿ÉÒÔÔì³ÉºÜÑÏÖØµÄºó¹û¡£

ËÑË÷¼Ç¼£º°üÀ¨¹È¸èºÍÑÅ»¢µÈºÜ¶àËÑË÷ÒýÇæÔÊÐíËûÃǵÄÓû§Ñ¡ÔñÊÇ·ñͬÒâ±£´æËûÃǵÄËÑË÷¼Ç¼£¬²¢ÇÒΪÓû§Ìṩһ¸ö½Ó¿ÚÀ´²é¿´ËûÃÇ×Ô¼ºµÄ˽ÈËËÑË÷¼Ç¼¡£ËÑË÷ÇëÇóÀïÃæ°üº¬ÁËÓû§µÄÐÐΪϰ¹ßºÍÐËȤµÄһЩÃô¸Ðϸ½Ú£¬¹¥»÷Õß¿ÉÒÔÀûÓÃÕâЩϸ½ÚÀ´ÆÛÆ­Óû§£¬µÁÇÔÓû§µÄÉí·Ý»òÕß¿ú̽Óû§¡£µ±¹¥»÷ÕßÒÔÓû§Éí·ÝµÇ½µ½ËÑË÷ÒýÇæÀ¾Í¿ÉÒÔ¿´µ½Óû§µÄËÑË÷¼Ç¼¡£Èçͼ1. ÕâÑù£¬Óû§µÄËÑË÷²éѯ¼Ç¼¾Í±»´æ´¢µ½Á˹¥»÷ÕßµÄËÑË÷¼Ç¼À¹¥»÷Õ߾ͿÉÒԵǽ×Ô¼ºµÄÕË»§Ëæ±ã²éѯÓû§µÄËÑË÷¼Ç¼¡£

ͼ1. µÇ½CSRF¹¥»÷ʼþµÄ¸ú×Ùͼ¡£Êܺ¦ÈË·ÃÎʹ¥»÷ÕßµÄÍøÕ¾£¬¹¥»÷ÕßÏò¹È¸èαÔìÒ»¸ö¿çÕ¾µãÇëÇóµÄµÇ½¿ò£¬Ôì³ÉÊܺ¦Õß±»¹¥»÷Õߵǽµ½¹È¸è¡£Ëæºó£¬Êܺ¦ÕßʹÓÃËÑË÷µÄʱºò£¬ËÑË÷¼Ç¼¾Í±»¹¥»÷Õ߼ǼÏÂÀ´¡£

PayPal£ºPayPalÔÊÐíËüµÄÓû§Ï໥֮¼äÈÎÒâ×ªÒÆ×ʽð¡£×ªÒÆ×ʽðµÄʱºò£¬Óû§Òª×¢²áÐÅÓÿ¨»òÕßÒøÐÐÕË»§¡£¹¥»÷Õß¿ÉÒÔÀûÓõǽCSRFÀ´·¢ÆðÒÔϹ¥»÷£º

1¡¢Êܺ¦Õß·ÃÎÊÁ˶ñÒâÉ̼ҵÄÍøÕ¾£¬²¢Ñ¡ÔñʹÓÃPayPalÖ§¸¶¡£

2¡¢Êܺ¦Õß±»Öض¨Ïòµ½PayPal²¢ÇÒÒªÇóµÇ½Ëû/ËýµÄÕË»§¡£

3¡¢ÍøÕ¾µÈ´ýÓû§µÇ½Ëû/ËýµÄPayPalÕË»§¡£

4¡¢¸¶¿îµÄʱºò£¬Êܺ¦ÕßÏÈÊǵǼÇ×Ô¼ºµÄÐÅÓÿ¨£¬µ«ÊÇÐÅÓÿ¨Êµ¼ÊÉÏÒѾ­±»Ìí¼Óµ½¶ñÒâÉ̼ҵÄPayPalÕË»§¡£

iGoogle£ºÓû§¿ÉÒÔͨ¹ýʹÓÃiGoogleÀ´¶¨ÖÆ×Ô¼ºµÄ¹È¸èÖ÷Ò³£¬Ò²°üÀ¨Ò»Ð©²å¼þ¡£ÎªÁËÒ×ÓÃÐÔ£¬ÕâЩ²å¼þÊÇ¡°Ç¶Èëµ½iGoogleµÄ¡±£¬ÕâÒ²¾ÍÒâζ×ÅËûÃǽ«Ó°Ïìµ½iGoogleµÄ°²È«¡£Í¨³£Çé¿öÏ£¬iGoogleÔÚÌí¼Óвå¼þµÄʱºò£¬¶¼»áѯÎÊÓû§×ö³öÐÅÈξö¶¨¡£µ«Êǹ¥»÷Õß¿ÉÒÔͨ¹ýµÇ¼CSRF¹¥»÷À´°ïÖúÓû§×ö³ö¾ö¶¨£¬´Ó¶ø°²×°ÈÎÒâµÄ²å¼þ¡£

1¡¢¹¥»÷Õßͨ¹ýÓû§µÄä¯ÀÀÆ÷ÊÚȨ°²×°Ò»¸öiGoogle²å¼þ£¨º¬ÓжñÒâ½Å±¾£©£¬²¢½«²å¼þÌí¼Óµ½Óû§µÄ¶¨ÖÆ»¯iGoogleÖ÷Ò³¡£

2¡¢¹¥»÷ÕßʹÓû§µÇ½¹È¸è£¬²¢¿ªÒ»¸öµ½iGoogleµÄ¿ò¼Ü¡£

3¡¢¹È¸èÈÏΪÊܺ¦Õß¾ÍÊǹ¥»÷Õߣ¬²¢½«¹¥»÷ÕߵIJå¼þÍÆË͸øÊܺ¦Õߣ¬¶øÇÒÔÊÐí¹¥»÷ÕßÔÚhttps://www.google.comÓòÏÂÔËÐнű¾¡£

4¡¢¹¥»÷ÕßÏÖÔÚ¿ÉÒÔ£º£¨a£©ÔÚÕýÈ·µÄURLÒ³Ãæ¹¹ÔìÒ»¸öµÇ½¿ò£¨b£©µÁÈ¡Óû§×Ô¶¯Ìî³äµÄÃÜÂ루c£©ÔÚÁíÒ»¸ö´°¿ÚµÈ´ýÓû§µÇ½²¢¶ÁÈ¡document.cookie¡£

ÎÒÃÇÒѾ­½«ÉÏÊö©¶´¸æÖªÁ˹ȸ裬ËûÃÇÒѾ­ÔÚÁ½·½ÃæÀ´¼õ»ºÂ©¶´´øÀ´µÄΣº¦¡£Ê×ÏÈ£¬¹È¸èÒѾ­ÆúÓÃÄÚǶµÄ²å¼þ²¢½ûÖ¹¿ª·¢Õß¿ª·¢ÀàËÆµÄ²å¼þ£¬Ö»ÔÊÐíÉÙ²¿·Ö±È½ÏÊÜ»¶Ó­µÄÄÚǶ²å¼þ¡£Æä´Î£¬¹È¸èÒѾ­¿ª·¢ÁË˽ÃÜtoken²ßÂÔÀ´·ÀÓùµÇ½CSRF(ÏÂÃæ½«»áÌÖÂÛ)£¬µ«ÊÇÕâ¸ö²ßÂÔÖ»¶ÔµÇ½Á˵ÄÓû§²ÅÓÐЧ¡£ÎÒÃÇÔ¤¼Æ£¬¹È¸èÒ»µ©³ä·Ö²âÊÔÁËËûÃǵķÀÓù·½°¸²¢¾õµÃÓÐЧ֮ºó£¬»á·ñÈÏËûÃǵĵǽCSRF©¶´¡£

ÏÖÓеÄCSRF·ÀÓù·½°¸

Ò»°ãÍøÕ¾ÓÐÈýÖÖ·ÀÓùCSRF¹¥»÷µÄ·½°¸¡££¨1£©ÑéÖ¤tokenÖµ¡££¨2£©ÑéÖ¤HTTPÍ·µÄReferer¡££¨3£©ÓÃXMLHttpRequest¸½¼ÓÔÚheaderÀï¡£ÒÔÉÏÈýÖÖ·½·¨¶¼Ôڹ㷺ʹÓ㬵«ÊÇËûÃǵÄЧ¹û¶¼²»ÊÇÄÇôµÄÁîÈËÂúÒâ¡£

TokenÑéÖ¤

ÔÚÿ¸öHTTPÇëÇóÀ︽¼ÓÒ»²¿·ÖÐÅÏ¢ÊÇÒ»¸ö·ÀÓùCSRF¹¥»÷µÄºÜºÃµÄ·½·¨£¬ÒòΪÕâÑù¿ÉÒÔÅжÏÇëÇóÊÇ·ñÒѾ­ÊÚȨ¡£Õâ¸ö¡°ÑéÖ¤token¡±Ó¦¸Ã²»ÄÜÇáÒ׵ı»Î´µÇ¼µÄÓû§²Â²â³öÀ´¡£Èç¹ûÇëÇóÀïÃæÃ»ÓÐÕâ¸öÑéÖ¤token»òÕßtoken²»ÄÜÆ¥ÅäµÄ»°£¬·þÎñÆ÷Ó¦¸Ã¾Ü¾øÕâ¸öÇëÇó¡£

TokenÑéÖ¤µÄ·½·¨¿ÉÒÔÓÃÀ´·ÀÓùµÇ½CSRF£¬µ«ÊÇ¿ª·¢ÕßÍùÍù»áÍü¼ÇÑéÖ¤£¬ÒòΪÈç¹ûûÓеǽ£¬¾Í²»ÄÜͨ¹ýsessionÀ´°ó¶¨CSRF token¡£ÍøÕ¾ÒªÏëÓÃÑéÖ¤tokenµÄ·½Ê½À´·ÀÓùµÇ½CSRF¹¥»÷µÄ»°£¬¾Í±ØÐëÏÈ´´½¨Ò»¸ö¡°Ç°session¡±£¬ÕâÑù²ÅÄܲ¿ÊðCSRFµÄ·ÀÓù·½°¸£¬ÔÚÑé֤ͨ¹ýÁËÖ®ºó£¬ÔÙ´´½¨Ò»¸öÕæÕýµÄsession¡£

TokenµÄÉè¼Æ¡£Óкܶ༼Êõ¿ÉÒÔÉú³ÉÑéÖ¤token¡£

session±êʶ·û¡£ä¯ÀÀÆ÷µÄcookie´æ´¢·½Ê½¾ÍÊÇΪÁË·ÀÖ¹²»Í¬ÓòÖ®¼ä»¥Ïà·ÃÎÊcookie¡£Ò»¸öÆÕ±éµÄ×ö·¨ÊÇÖ±½ÓÀûÓÃÓû§µÄsession±êʶ·ûÀ´×÷ΪÑéÖ¤token¡£·þÎñÆ÷ÔÚ´¦Àíÿһ¸öÇëÇóʱ£¬¶¼½«Óû§µÄtokenÓësession±êʶ·ûÀ´Æ¥Åä¡£Èç¹û¹¥»÷ÕßÄܹ»²Â²â³öÓû§µÄtoken£¬ÄÇôËû¾ÍÄܵǼÓû§µÄÕË»§¡£¶øÇÒÕâÑù×öÓиö²»ºÃµÄµØ·½ÔÚÓÚ£¬Å¼¶ûÓû§ÕýÔÚä¯ÀÀµÄÄÚÈݻᷢË͸øµÚÈý·½£¬±ÈÈçͨ¹ýµç×ÓÓʼþÖ±½ÓÉÏÍøÒ³ÄÚÈÝÉÏ´«µ½ä¯ÀÀÆ÷³§É̵Äbug¸ú×ÙÊý¾Ý¿â¡£Èç¹ûÕýºÃÕâ¸öÒ³Ãæ°üº¬ÓÐÓû§µÄsession±êʶ·û£¬ÈκÎÄÜ¿´µ½Õâ¸öÒ³ÃæµÄÈ˶¼ÄÜÄ£ÄâÓû§µÇ½µ½ÍøÕ¾£¬Ö±µ½»á»°¹ýÆÚ¡£

¶ÀÁ¢sessionËæ»úÊý¡£ÓëÖ±½ÓʹÓÃÓû§µÄsession±êʶ·û²»Ò»ÑùµÄÊÇ£¬µ±Óû§µÚÒ»´ÎµÇÂ½ÍøÕ¾µÄʱºò£¬·þÎñÆ÷¿ÉÒÔ²úÉúÒ»¸öËæ»úÊý²¢½«Ëü´æ´¢ÔÚÓû§µÄcookieÀïÃæ¡£¶ÔÓÚÿһ¸öÇëÇ󣬷þÎñÆ÷¶¼»á½«tokenÓë´æ´¢ÔÚcookieÀïµÄֵƥÅä¡£ÀýÈ磬¹ã·ºÊ¹ÓõÄTracÎÊÌâ¸ú×Ùϵͳ¾ÍÊÇÓõĴ˼¼Êõ¡£µ«ÊÇÕâ¸ö·½·¨²»ÄÜ·ÀÓùÖ÷¶¯µÄÍøÂç¹¥»÷£¬¼´Ê¹ÊÇÕû¸öwebÓ¦Óö¼Ê¹ÓõÄÊÇHTTPSЭÒé¡£ÒòΪ¹¥»÷Õß¿ÉÒÔʹÓÃËû×Ô¼ºµÄCSRF tokenÀ´¸²¸ÇÀ´¸²¸ÇÕâ¸ö¶ÀÁ¢sessionËæ»úÊý£¬½ø¶ø¿ÉÒÔʹÓÃÒ»¸öÆ¥ÅäµÄtokenÀ´Î±ÔìÒ»¸ö¿çÕ¾ÇëÇó¡£

ÒÀÀµsessionËæ»úÊý¡£ÓÐÒ»¸ö¸Ä½ø²úÉúËæ»úÊýµÄ·½·¨Êǽ«Óû§µÄsession±êʶ·ûÓëCSRF token½¨Á¢¶ÔÓ¦¹ØÏµºó´æ´¢ÔÚ·þÎñ¶Ë¡£·þÎñÆ÷ÔÚ´¦ÀíÇëÇóµÄʱºò£¬ÑéÖ¤ÇëÇóÖеÄtokenÊÇ·ñÓësession±êʶ·ûÆ¥Åä¡£Õâ¸ö·½·¨Óиö²»ºÃµÄµØ·½¾ÍÊÇ·þÎñ¶Ë±ØÐëҪά»¤Ò»¸öºÜ´óµÄ¶ÔÓ¦¹ØÏµ±í£¨¹þÏ£±í£©¡£

session±êʶ·ûµÄHMAC¡£ÓÐÒ»ÖÖ·½·¨²»ÐèÒª·þÎñ¶ËÀ´Î¬»¤¹þÏ£±í£¬¾ÍÊÇ¿ÉÒÔ¶ÔÓû§µÄsession token×öÒ»¸ö¼ÓÃܺóÓÃ×÷CSRF µÄtoken¡£ÀýÈ磬 Ruby on RailsµÄweb³ÌÐòÒ»°ã¶¼ÊÇʹÓõÄÕâÖÖ·½·¨£¬¶øÇÒËûÃÇÊÇʹÓÃsession±êʶ·ûµÄHMACÀ´×÷ΪCSRF tokenµÄ¡£Ö»ÒªËùÓеÄÍøÕ¾·þÎñÆ÷¶¼¹²ÏíÁËHMACÃÜÔ¿£¬ÄÇôÿ¸ö·þÎñÆ÷¶¼¿ÉÒÔÑéÖ¤ÇëÇóÀïµÄCSRF token ÊÇ·ñÓësession±êʶ·ûÆ¥Åä¡£HMACµÄÌØÐÔÄÜÈ·±£¼´Ê¹¹¥»÷ÕßÖªµÀÓû§µÄCSRF token£¬Ò²²»ÄÜÍÆ¶Ï³öÓû§µÄsession±êʶ·û¡£

¼øÓÚÓгä×ãµÄ×ÊÔ´£¬ÍøÕ¾¶¼¿ÉÒÔʹÓÃHMAC·½·¨À´·ÀÓùCSRF¹¥»÷¡£µ«ÊÇ£¬ºÜ¶àÍøÕ¾ºÍһЩCSRFµÄ·ÀÓù¿ò¼Ü£¨±ÈÈçNoForge, CSRFx ºÍCSRFGuard£©¶¼²»ÄÜÕýÈ·µÄʵÏֱȽÏÒþÃØµÄtoken·ÀÓù¡£Ò»¸ö³£¼ûµÄ´íÎó¾ÍÊÇÔÚ´¦Àí¿çÕ¾ÇëÇóµÄʱºò±©Â¶ÁËCSRF token¡£¾Ù¸öÀý×Ó£¬Ò»¸ö¿ÉÐŵÄÍøÕ¾ÔÚ¶ÔÁíÒ»¸öÍøÕ¾·¢ÆðÇëÇóµÄʱºò¸½¼ÓÉÏÁËCSRF token£¬ÄÇôÄǸöÍøÕ¾¾Í¿ÉÒÔ¶ÔÕâ¸ö¿ÉÐŵÄÍøÕ¾Î±ÔìÒ»¸ö¿çÕ¾ÇëÇó¡£

°¸ÀýÑо¿£ºNoForge.NoForge¾ÍÊÇʹÓ÷þÎñ¶Ë±£´æ¹þÏ£±íµÄ·½Ê½À´ÑéÖ¤Óû§µÄCSRF token¡£ËüÔÚËùÓÐÁ´½ÓºÍ±íµ¥Ìá½»µÄʱºò»á¸½¼ÓÒ»¸öCSRF token£¬Ôì³ÉÕâÖÖ¼¼Êõ²»Ì«ÍêÉÆµÄÔ­ÒòÓÐÒÔÏÂÈý¸ö£º

1¡¢HTMLÊÇÔÚä¯ÀÀÆ÷Àﶯ̬´´½¨µÄ£¬¶ø²»»á±»ÖØÐ¼ÓÉÏCSRF token¡£ÓÐÐ©ÍøÕ¾ÊÇÔÚ¿Í»§¶Ë´´½¨HTMLµÄ¡£±ÈÈçGmail, Flickr, ºÍ Digg¶¼ÊÇÓÃJavaScript À´´´½¨±íµ¥£¬¶øÕâЩ±íµ¥ÕýÊÇÐèÒªCSRF·ÀÓù´ëÊ©µÄ¡£

2¡¢NoForge²¢Ã»ÓжÔÖ¸Ïò±¾Õ¾ºÍÍâÕ¾µÄ³¬Á´½Ó×÷Çø·Ö¡£Èç¹ûÓÐÒ»¸öÖ¸ÏòÍâÕ¾µÄ³¬Á´½Ó£¬ÄÇôÍâÕ¾¿ÉÒÔÓÃÇëÇóÀïÃæ»ñÈ¡µ½Óû§µÄCSRF token¡£±ÈÈ磬Èç¹ûphpBB²¿ÊðÁËNoForge£¬ÄÇôһµ©Óû§µã»÷ÁËÒ»¸öÁ¬½Ó£¬Á¬½ÓµÄÕ¾µã¾Í¿ÉÒÔ»ñÈ¡µ½Óû§µÄCSRF token£¬¼´Ê¹NoForgeÇø·ÖÁËÊDZ¾Õ¾µÄÁ´½Ó»¹ÊÇÍâÕ¾µÄÁ´½Ó£¬ÒòΪReferer »¹Êǻᱩ¶Óû§µÄCSRF token¡£

3¡¢NoForge¶ÔµÇ½CSRF²¢Ã»ÓÐʲôЧ¹û£¬ÒòΪÈç¹ûÓû§ÒѾ­ÓÐÁËsession±êʶ·û£¨µÇ½ÁË£©£¬ÄÇôNoForgeÖ»»áÑéÖ¤CSRF token¡£¾¡¹ÜÕâÖÖȱÏÝÊÇ¿ÉÒÔÐÞ¸´£¬µ«ÊÇÕâҲ˵Ã÷ÁËÒªÏëÕýÈ·µÄʵʩtokenÑéÖ¤²ßÂÔ²¢²»ÊÇÒ»¼þºÜÈÝÒ×µÄÊÂÇé¡£

ËäÈ»ÉÏÊöÈý¸öÔ­Òò¶¼ÊÇ¿ÉÒÔÐÞ¸´µÄ£¬µ«ÊÇÕâЩȱÏݶ¼ËµÃ÷ÁËÒªÏëÕýÈ·µØÊµÊ©tokenÑéÖ¤²ßÂÔ£¬ÊǺܸ´ÔÓµÄÒ»¼þÊÂÇé¡£CSRFx ºÍ CSRFGuard£¬»¹ÓкܶàÍøÕ¾¶¼ËµÃ÷ÁËÕâÒ»ÎÊÌâ¡£

Referer

´ó¶àÊýÇé¿öÏ£¬µ±ä¯ÀÀÆ÷·¢ÆðÒ»¸öHTTPÇëÇ󣬯äÖеÄReferer±êʶÁËÇëÇóÊÇ´ÓÄÄÀï·¢ÆðµÄ¡£Èç¹ûHTTPÍ·Àï°üº¬ÓÐRefererµÄʱºò£¬ÎÒÃÇ¿ÉÒÔÇø·ÖÇëÇóÊÇͬÓòÏ»¹ÊÇ¿çÕ¾·¢ÆðµÄ£¬ÒòΪRefererÀë±êÃ÷ÁË·¢ÆðÇëÇóµÄURL¡£ÍøÕ¾Ò²¿ÉÒÔͨ¹ýÅжÏÓÐÎÊÌâµÄÇëÇóÊÇ·ñÊÇͬÓòÏ·¢ÆðµÄÀ´·ÀÓùCSRF¹¥»÷¡£

²»ÐÒµÄÊÇ£¬Í¨³£Referer»á°üº¬ÓÐһЩÃô¸ÐÐÅÏ¢£¬¿ÉÄÜ»áÇÖ·¸Óû§µÄÒþ˽¡£±ÈÈ磬Referer¿ÉÒÔÏÔʾÓû§¶Ôij¸ö˽ÃÜÍøÕ¾µÄËÑË÷ºÍ²éѯ¡£¾¡¹ÜÕâЩÄÚÈݶÔ˽ÃÜÍøÕ¾Õ¾³¤À´ËµÊǺÃÊ£¬ÒòΪËûÃÇ¿ÉÒÔͨ¹ýÕâЩÄÚÈÝÀ´ÓÅ»¯ËÑË÷ÒýÇæÅÅÃû£¬µ«ÊÇһЩÓû§»¹ÊÇÈÏΪÇÖ·¸ÁËËûÃǵÄÒþ˽¡£ÁíÍ⣬Ðí¶à×éÖ¯Ò²ºÜµ£ÓÇReferer¿ÉÄܻὫÄÚÍøµÄһЩ»úÃÜÐÅϢй¶³öÈ¥¡£

©¶´¡£´ÓÀúÊ·ÉÏÀ´¿´£¬ä¯ÀÀÆ÷µÄһЩ©¶´Ê¹µÃһЩ¶ñÒâÍøÕ¾ÓÐÆÛÆ­RefererµÄ¼ÛÖµ£¬ÓÈÆäÊÇÔÚʹÓôúÀí·þÎñÆ÷µÄʱºò¡£ºÜ¶à¶ÔRefererÆÛÆ­µÄÌÖÂÛ¶¼±êÃ÷ä¯ÀÀÆ÷ÔÊÐíReferer¿ÉÒÔαÔì¡£MozillaÔÚFire-fox 1.0.7ÀïÃæÒѾ­ÐÞ¸´ÁËRefererÆÛÆ­µÄ©¶´¡£Ä¿Ç°µÄIEÔò»¹ÓÐÕâ·½ÃæµÄ©¶´£¬µ«ÊÇÕâЩ©¶´Ö»ÄÜÓ°ÏìXMLHttpRequest£¬²¢ÇÒÖ»ÄÜÓÃÀ´Î±ÔìRefererÌø×ªµ½¹¥»÷Õß×Ô¼ºµÄÍøÕ¾¡£

³ß¶È¡£Èç¹ûÍøÕ¾Ñ¡ÔñʹÓÃRefererÀ´·ÀÓùCSRF¹¥»÷µÄ»°£¬ÄÇÃ´ÍøÕ¾µÄ¿ª·¢ÈËÔ±¾ÍÐèÒª¾ö¶¨µ½µ×ÊÇʹÓñȽϿíËÉ»¹ÊDZȽÏÑϸñµÄRefererÑéÖ¤²ßÂÔ¡£Èç¹û²ÉÓÿíËɵÄRefererÑéÖ¤²ßÂÔ£¬ÍøÕ¾¾ÍÓ¦¸Ã×èÖ¹RefererÖµ²»¶ÔµÄÇëÇó¡£Èç¹ûÇëÇóÀïÃæÃ»ÓÐReferer£¬¾Í½ÓÊÕÇëÇó¡£¾¡¹ÜÕâ¸ö·½·¨ÓÃµÄºÜÆÕ±é£¬µ«ÊÇËüºÜÈÝÒ×±»Èƹý¡£ÒòΪ¹¥»÷Õß¿ÉÒÔÔÚheaderÀïÃæÈ¥µôReferer¡£ÀýÈ磬FTPºÍÊý¾ÝURL·¢ÆðµÄÇëÇóÀïÃæ¾Í²»°üº¬Referer¡£Èç¹ûʹÓÃÑϸñµÄRefererÑéÖ¤²ßÂÔ£¬ÍøÕ¾»¹Òª×èֹûÓÐRefererµÄÇëÇó¡£ÕâÑù×öÖ÷ÒªÊÇΪÁË·ÀÖ¹¶ñÒâÍøÕ¾Ö÷¶¯Òþ²ØReferer£¬µ«Ò²»á´øÀ´¼æÈÝÐÔÎÊÌ⣬±ÈÈç»áÎóɱһ²¿·ÖºÏ·¨µÄÇëÇó£¬ÒòΪÓÐЩä¯ÀÀÆ÷ºÍÍøÂçµÄÉèÖÃĬÈϾÍÊDz»º¬ÓÐRefererµÄ¡£ËùÒÔ˵Õâ¸ö¶ÈÒ»¶¨ÒªÕÆÎպ㬺ܶàʱºòÈ¡¾öÓÚ¾­Ñé¡£ÎÒÃÇ»¹»áÔÚ4.2.1ÀïÌÖÂÛÕâ¸öÎÊÌâ¡£

¸ö°¸Ñо¿£ºFacebook¡£×ݹÛFacebookµÄ´ó²¿·ÖÍøÕ¾¶¼ÊÇʹÓÃtokenÈÏÖ¤µÄ·½Ê½À´·ÀÓùCSRF¹¥»÷µÄ¡£µ«ÊÇ£¬ÔÚFacebookµÄµÇ½¿ò²¿·ÖÔòʹÓõÄÊÇ¿íËɵÄRefererÑéÖ¤²ßÂÔ¡£ÕâÖÖ·½·¨ÔÚÃæ¶ÔµÇ½CSRFµÄ¹¥»÷ʱûÓÐʲô×÷Ó᣾ÙÀýÀ´Ëµ£¬¹¥»÷Õß¿ÉÒÔ½²Óû§´Óhttp://attacker.com/ÖØ¶¨Ïòµ½ftp://attacker.com/index.html £¬È»ºóÔÙ¶ÔFacebook·¢ÆðÒ»¸ö¿çÕ¾µÄµÇ½ÇëÇó¡£ÒòΪÇëÇóÀ´×ÔFTP URL£¬ËùÒÔ´ó¶àÊýä¯ÀÀÆ÷¶¼²»»áÔÚÇëÇóÀï°üº¬Referer¡£

ʵÑé

ΪÁËÆÀ¹ÀÑϸñµÄRefererÑéÖ¤²ßÂԵļæÈÝÐÔ£¬ÎÒÃǽøÐÐÁËÒ»ÏîʵÑéÀ´ºâÁ¿µ½µ×Óжà´ó¸ÅÂÊÒÔ¼°ÔÚʲôÇé¿öÏ£¬ºÏ·¨µÄÇëÇóÀïÃæ²»º¬ÓÐReferer¡£

Éè¼Æ¡£¹ã¸æÊÇÒ»¸öºÜ·½±ã²âÁ¿ä¯ÀÀÆ÷ºÍÍøÂçÌØÕ÷µÄÇþµÀ£¬Òò´ËÎÒÃÇ¿ÉÒÔÀûÓÃ¹ã¸æ×÷ΪʵÑéÆ½Ì¨¡£ÔÚ2008Äê4ÔÂ5ÈÕµ½4ÔÂ8ÈÕÆÚ¼ä£¬ÎÒÃÇ´Ó163,767¸ö¶ÀÁ¢IP¹ºÂòÁË283,945 ¸ö¹ã¸æ£¬·Ö±ðÊÇÁ½¸ö²»Í¬µÄ¹ã¸æÇþµÀ¡£ÔÚÇþµÀA£¬ÎÒÃÇÒÔÿǧ´Îչʾ0.50ÃÀÔªµÄ¼Û¸ñ¹ºÂòÁËÍøÂçÆìÖÄ¹ã¸æ£¬¹Ø¼ü×ÖΪ¡°»ðºü¡±£¬¡°ÓÎÏ·¡±£¬¡°IE¡±£¬¡°ÊÓÆµ¡±£¬¡°YouTube¡±¡£ÔÚÇþµÀB£¬ÎÒÃÇÒÔÿǧ´Îչʾ5ÃÀÔªµÄ¼Û¸ñµÄ¼ä϶¹ã¸æ£¬¹Ø¼ü×ÖΪ¡°°ÅÀÙ¡±£¬¡°½ðÈÚ¡°£¬¡°»¨¡±£¬¡°Ê³Æ·¡±ºÍ¡°Ô°ÒÕ¡±¡£ÎÒÃÇÔÚÿ¸ö¹ã¸æÇþµÀÉÏ»¨ÁË100ÃÀÔª£¬ÇþµÀAÓÐ241,483µã»÷Á¿£¨146,310¸ö¶ÀÁ¢IP£©£¬ÇþµÀBÓÐ42,406µã»÷Á¿£¨18,314¸ö¶ÀÁ¢IP£©¡£

¹ã¸æ·þÎñÊÇÓÉÎÒÃÇʵÑéÊÒÀïµÄÁ½Ì¨Ö÷»úÌṩ£¬Á½¸ö¶ÀÁ¢µÄÓòÃûÊÇ´Ó²»Í¬µÄ×¢²áÉÌ´¦¹ºÂò¡£Ã¿µ±ÏÔʾ¹ã¸æÊ±£¬¹ã¸æ»áÔÚ½ÓÏÂÀ´µÄÿ¸öÇëÇóÀïÃæÉú³ÉÒ»¸öÌØ¶¨µÄ±êʶ·û£¬²¢Ëæ»úÑ¡Ôñһ̨Ö÷»ú×÷ΪÖ÷·þÎñÆ÷¡£Ö÷·þÎñÆ÷ͨ¹ýHTTP»òÕßHTTPSЭÒ齫¿Í»§¶ËHTML·¢Ë͵½ÎÒÃǵķþÎñÆ÷£¬ÕâЩHTMLÄÜ·¢ÆðÒ»¸öGET»òÕßPOSTÇëÇ󡣯äÖУ¬ÇëÇó°üÀ¨Ìá½»±íµ¥£¬Í¼ÏñÇëÇóºÍXMLHttpRequests¡£ÇëÇóµÄ˳ÐòÊÇËæ»úµÄ²¢ÇÒ¸úÓû§µÄ²Ù×÷Î޹ء£µ±¹ã¸æÍ¨¹ýÁËä¯ÀÀÆ÷µÄ°²È«²ßÂÔÖ®ºó£¬¾ÍÏòÖ÷·þÎñÆ÷·¢ÆðÒ»¸öͬÓòµÄÇëÇó£¬Í¬Ê±Ïò´Î·þÎñÆ÷·¢ÆðÒ»¸ö¿çÓòÇëÇó¡£Ã¿¸ö·þÎñÆ÷µÄ³É±¾ÊÇ400ÃÀÔª£¬ÓòÃûÊÇ7ÃÀÔª£¬´ÓÒ»¸öºÏ·¨µÄÖ¤Êé°ä·¢»ú¹¹»ñµÃµÄ90ÌìÓòÑéÖ¤µÄHTTPSÖ¤ÊéÊÇÃâ·ÑµÄ¡£·þÎñÆ÷¸ù¾Ý½ÓÊÕµ½µÄÍøÂçÇëÇóÀ´¼Ç¼ÇëÇó²ÎÊý£¬°üÀ¨Referer£¬User-AgentÍ·£¬ÈÕÆÚ£¬¿Í»§¶ËµÄCÀàÍøÂ磬»á»°±êʶ·û¡£·þÎñÆ÷»¹Í¨¹ýDOM API¼Ç¼ÁËdocument.referrerµÄÖµ£¬µ«ÊDz»¼Ç¼¿Í»§¶ËµÄIPµØÖ·¡£ÎªÁËͳ¼Æ¶ÀÁ¢µÄIPµØÖ·£¬·þÎñÆ÷ÀûÓÃÒ»¸öËæ»ú²úÉúµÄKEY¶ø²»ÊǼǼHMACµÄ·½Ê½£¬Õâ¸öKEY»á±»¶ªÆú¡£·þÎñÆ÷¼Ç¼µÄÐÅÏ¢²»×ãÒÔµ¥¶ÀÈ·¶¨¹ã¸æµÄä¯ÀÀÕßµ½µ×ÓжàÉÙ¡£

Â×Àí¡£ÊµÑéµÄÉè¼Æ×ñÊØÁ½¸ö¹ã¸æÇþµÀµÄ¹æÔò¡£ÊµÑéÖеÄÐÐΪ»ù±¾É϶¼ÊÇweb¹ã¸æÃ¿ÌìµÄÐÐΪ£¬ËùÒÔ¶¼ÄÜÕý³£µÄ´Ó¹ã¸æÉÌÄÇÀïÇëÇó¶îÍâµÄ×ÊÔ´£¬±ÈÈçͼƬ£¬ÒôƵºÍÊÓÆµ¡£¾¡¹ÜÎÒÃÇµÄ¹ã¸æ²úÉúµÄHTTPÇëÇóÊýĿԶ´óÓÚÆÕͨµÄ¹ã¸æ£¬µ«ÊÇÎÒÃÇÐèÒªµÄ´ø¿íÃ÷ÏÔ±ÈÒ»¸öÊÓÆµ¹ã¸æÐèÒªµÄ´ø¿íҪС¡£ÎÒÃǵķþÎñÆ÷Ò²Ïñ¹ã¸æÉÌÒ»Ñù£¬Ö»¼Ç¼ËûÃÇËù¼Ç¼µÄÐÅÏ¢¡£Êµ¼ÊÉÏÎÒÃǵķþÎñÆ÷¼Ç¼µÄÐÅÏ¢Ã÷ÏÔÒª±ÈÉÌÒµµÄ¹ã¸æÉÌÒªÉÙ£¬ÒòΪÎÒÃDz¢²»¼Ç¼¿Í»§¶ËµÄIPµØÖ·¡£

½á¹û¡£ÎÒÃÇÒѾ­½«½á¹ûÔÚͼ2ºÍͼ3Àï×ܽá³öÀ´ÁË£¬ÎÒÃÇ»¹·¢ÏÖÒÔϽá¹ûÖ»ÓÐ95%µÄ¿ÉÐŶȡ£

HTTP·½·¨À ¿çÓòÇëÇó±ÈͬÓòÇëÇó²»°üº¬RefererÍ·µÄÇé¿ö¸üÆÕ±é£¬¶øÔÚPOST·½·¨(¿¨·½ÏµÊý= 2130, pÖµ<0.001) ºÍGET·½·¨(¿¨·½ÏµÊý= 2175, pÖµ<0.001) Àï±È½Ï£¬Ç°Õß²»°üº¬RefererÍ·µÄÇé¿ö¸üΪÆÕ±é¡£

ÔÚ²»°üº¬RefererÍ·µÄͳ¼ÆÖУ¬HTTP±ÈHTTPS¸üΪÆÕ±é£¬°üÀ¨¿çÓòPOST(¿¨·½ÏµÊý= 6754, pÖµ<0.001)ÇëÇ󣬿çÓòGET(¿¨·½ÏµÊý= 6940, pÖµ<0.001)ÇëÇó£¬Í¬ÓòPOST(¿¨·½ÏµÊý= 2286, pÖµ<0.001)ÇëÇóºÍͬÓòGETÇëÇó(¿¨·½ÏµÊý= 2377, pÖµ<0.001)¡£

ÔÚ²»°üº¬RefererÍ·µÄͳ¼ÆÖУ¬¹ã¸æÇþµÀBËùÓÐÐÎʽµÄÇëÇó¶¼±ÈAÒª¸üÆÕ±é¡£ÕâЩÇëÇóÐÎʽ°üÀ¨£ºHTTP¿çÓòPOST(¿¨·½ÏµÊý= 3060, pÖµ<0.001)£¬HTTPͬÓòPOST(¿¨·½ÏµÊý= 6537, pÖµ<0.001)£¬HTTPS¿çÓòPOST(¿¨·½ÏµÊý= 49.13, pÖµ<0.001)ºÍHTTPSͬÓòPOST(¿¨·½ÏµÊý= 44.52, pÖµ<0.001)ÇëÇó¡£

ÎÒÃÇ»¹Í³¼ÆÁË×Ô¶¨ÒåµÄheader X-Requested-By£¨²Î¼û4.3½Ú£©ºÍOrigin£¨¼ûµÚ5Õ£©£¬X-Requested-By´ó¸ÅÓÐ0.029%µ½0.047%µÄHTTP POSTÇëÇó£¬0.084%µ½0.112%µÄHTTP GETÇëÇó£¬0.008%µ½0.018%µÄHTTPS POSTÇëÇóºÍ 0.009%µ½0.020%µÄHTTPS GETÇëÇóÀï²»°üº¬ÓÐRefererÍ·¡£OriginÔòÔÚÓëÉÏÊöÏàͬµÄÇëÇóÀï¶¼²»°üº¬RefererÍ·¡£

ͼ2. ²»°üº¬RefererºÍReferer²»ÕýÈ·µÄÇëÇó(283,945 ¸ö½á¹û)¡£xºÍy·Ö±ð´ú±íÖ÷·þÎñÆ÷ºÍ´Î·þÎñÆ÷µÄÓòÃû

ÌÖÂÛ¡£ÏÂÃæÓÐÁ½¸öÓÐÁ¦µÄÖ¤¾Ý¿ÉÒÔ±íÃ÷ÔÚ²»°üº¬RefererµÄÇëÇóÀͨ³£ÊÇÀ´×ÔÍøÂ磨¹¥»÷£©¶ø²»ÊÇä¯ÀÀÆ÷¡£

1¡¢HTTPÇëÇó±ÈHTTPSÇëÇó²»°üº¬Referer¸üΪÆÕ±éÊÇÒòΪ£¬ÍøÂç´úÀí¿ÉÒÔɾ³ýHTTPÇëÇóÀïµÄheader£¬µ«ÊDz»ÄÜɾ³ýHTTPSÇëÇóÀïµÄheader¡£µ±È»£¬ÔÚһЩÆóÒµµÄÍøÂçÀһЩHTTPSµÄÖն˾ÍÊÇÒ»¸öÍøÂç´úÀí£¬ÕâÖÖÇé¿öÏ´úÀí¿ÉÒÔÐÞ¸ÄHTTPSÇëÇ󣬵«ÊÇÕâÖÖÇé¿öÊDZȽϺ±¼ûµÄ¡£

2¡¢ä¯ÀÀÆ÷ÔÚÈ¥µôRefererµÄʱºòÒ²»áÈ¥µôdocument.referrerµÄÖµ£¬µ«ÊÇÈç¹ûRefererÊÇÔÚÍøÂçÀïÈ¥µôµÄ»°£¬document.referrerÈ´»¹ÔÚ¡£µ«ÊÇÎÒÃÇ·¢ÏÖ£¬RefererÈ¥µôµÄÇé¿ö±Èdocument.referrerÈ¥µôµÄÇé¿öÒª¸üΪÆÕ±é¡£

ʵ¼ÊÉÏ£¬ÔÚʵÑéÖУ¬document.referrerÖµ±»È¥µôÖ÷ÒªÊÇÒòΪÁ½ÖÖÌØÊâµÄä¯ÀÀÆ÷£ºPlayStation 3 ä¯ÀÀÆ÷²»Ö§³Ödocument.referrer£¬OperaÈ¥µôdocument.referrer£¨µ«ÊDz¢²»È¥µôReferer£©ÊÇΪÁË¿çÕ¾HTTPSÇëÇó¡£XMLHttpRequestÖеÄReferer±»È¥µôµÄ±ÈÀý½Ï¸ßÊÇÓÉÓÚFirefox 1.0ºÍ1.5ÖеÄbugÒýÆðµÄ¡£ËùÓеÄÕâЩ½á¹û¶¼±íÃ÷Ö»Óм«ÉÙÊýµÄä¯ÀÀÆ÷±»ÅäÖóɲ»·¢ËÍReferer¡£

Ò²ÓÐÖ¤¾Ý±íÃ÷£¬Referer±»È¥µôÊÇÓÉÓÚÉæ¼°µ½Òþ˽ÎÊÌ⣬µ±ä¯ÀÀÆ÷°ÑReferer´ÓÍøÕ¾A·¢Ë͵½ÍøÕ¾Bʱ£¬Óû§µÄÒþ˽ҲÔÚ±»±©Â¶£¬ÒòÎªÍøÕ¾B¿ÉÒÔͨ¹ýRefererÀ´ÊÕ¼¯Óû§ÔÚÍøÕ¾AµÄä¯ÀÀÐÐΪ¡£Ïà±È֮ϣ¬ÔÚͬÓòÏ·¢ËÍRefererÔò²»»áÒýÆðÒþ˽ÎÊÌ⣬ÒòÎªÍøÕ¾ÍêÈ«¿ÉÒÔͨ¹ýcookieÀ´ÊÕ¼¯Óû§µÄÒþ˽£¨Ò²¾ÍÊÇÍêȫûÓбØÒªÍ¨¹ýRefererÀ´ÊÕ¼¯£©¡£ÎÒÃÇ»¹·¢ÏÖ£¬¿çÕ¾ÇëÇó±ÈͬվÇëÇóÒª¸ü¶àµÄ×èÖ¹Referer£¬ËµÃ÷ÓÉÓÚ¿¼Âǵ½Òþ˽µÄÎÊÌ⣬ËùÒԲŻáÈËΪµÄ×èÖ¹Referer·¢ËÍ¡£

ÓÉ´Ë£¬ÎÒÃǵóöÁ½¸öÖ÷ÒªµÄ½áÂÛ£º

1¡¢Í¨¹ýHTTPSÀ´·ÀÓùCSRF¡£ÔÚHTTPSÇëÇóÀReferer¿ÉÒÔ±»ÓÃÀ´·ÀÓùCSRF¡£ÎªÁËʵʩÓÃRefererÀ´·ÀÓùCSRFµÄ²ßÂÔ£¬ÍøÕ¾±ØÐë¾Ü¾øÄÇЩûÓÐRefererµÄÇëÇó£¬ÒòΪ¹¥»÷Õß¿ÉÒÔ¿ØÖÆä¯ÀÀÆ÷À´È¥µôReferer¡£¶øÔÚHTTPÀï£¬ÍøÕ¾Ôò²»ÄÜһζµÄ¾Ü¾øÃ»ÓÐRefererµÄÇëÇó£¬ÒòΪ¿¼Âǵ½¼æÈÝÐÔ£¬¿ÉÄÜÓÐÏ൱´óÒ»²¿·Ö (´óÔ¼ 3¨C11%)Óû§¿ÉÄܾͷÃÎʲ»ÁËÍøÕ¾ÁË¡£²»Í¬µÄÊÇÔÚHTTPSÀÔò¿ÉÒÔÖ´ÐÐÑϸñµÄRefererÑéÖ¤²ßÂÔ£¬ÒòΪֻÓкÜСµÄÒ»²¿·Ö(0.05¨C0.22%)ä¯ÀÀÆ÷»áÈ¥µôReferer¡£ÌرðÐèÒªÖ¸³öµÄÊÇ£¬ÑϸñµÄRefererÑéÖ¤²ßÂԷdz£ÊʺÏÓÃÀ´·ÀÓùµÇ½CSRF£¬ÒòΪͨ³£Çé¿öÏ£¬µÇ½ÇëÇó¶¼ÊÇͨ¹ýHTTPSЭÒé·¢ÆðµÄ¡£

2¡¢Òþ˽ÎÊÌâ¡£ÑϸñµÄReferer²ßÂÔÊǺܺõÄCSRFµÄ·ÀÓù·½°¸£¬ÒòΪËüʵʩÆðÀ´ºÜ¼òµ¥¡£²»ÐÒµÄÊÇ£¬Òþ˽²ßÂÔ¿ÉÄÜ»á×èÖ¹´Ë·½°¸µÄÁ÷ÐС£Òò´Ë£¬ä¯ÀÀÆ÷Ðµİ²È«ÐÔÄܺÍеÄCSRF·ÀÓù»úÖÆ¶¼±ØÐëÒªÏȽâ¾öºÃÒþ˽ÎÊÌ⣬²ÅÄÜ´ó¹æÄ£µÄ²¿Êð¡£

ͼ3. ¹ã¸æÇþµÀAÖв»°üº¬RefererºÍReferer²»ÕýÈ·µÄÇëÇó(241,483 ¸ö½á¹û)¡£Opera×èÖ¹ÁË¿çÕ¾µÄHTTPS document.referrer£¬Firefox 1.0ºÍ1.5ÓÉÓÚbugÔÚXMLHttpRequestµÄʱºò²»·¢ËÍReferer£¬PlayStation 3£¨Í¼Öм´ÎªPS£©²»Ö§³Ödocument.referrer¡£

×Ô¶¨ÒåHTTP header

ÎÒÃÇÒ²¿ÉÒÔÓÃ×Ô¶¨ÒåHTTPÍ·µÄ·½·¨À´·ÀÓùCSRF¹¥»÷£¬ÒòΪËäÈ»ä¯ÀÀÆ÷»á×èÖ¹ÏòÍâÕ¾·¢ËÍ×Ô¶¨ÒåµÄHTTPÍ·£¬µ«ÊÇÔÊÐíÏò±¾Õ¾Í¨¹ýXMLHttpRequestµÄ·½Ê½·¢ËÍ×Ô¶¨ÒåHTTPÍ·¡£±ÈÈ磬prototype.jsÕâ¸öJavaScript¿â¾ÍÊÇʹÓÃÕâÖÖ·½·¨£¬²¢ÇÒÔö¼ÓÁË X-Requested-ByÍ·µ½XMLHttpRequestÀïÃæ ¡£Google Web Toolkit Ò²½¨Ò鿪·¢ÕßÓÃÔÚXMLHttpRequestÀïÔö¼ÓÒ»¸öX-XSRF-CookieÍ·µÄ·½·¨À´·ÀÓùCSRF¹¥»÷£¬ÆäÖÐXMLHttpRequets°üº¬ÓÐcookieµÄÖµ¡£µ±È»XMLHttpRequetsÀïÃæµÄcookie²¢²»ÐèÒªÓÃÀ´·ÀÓùCSRF£¬ÒòΪֻÐèÒªÓÐÍ·²¿·Ö¾Í×ã¹»ÁË¡£

ÔÚʹÓÃÕâÖÖ·½·¨À´·ÀÓùCSRF¹¥»÷µÄʱºò£¬ÍøÕ¾±ØÐëÔÚËùÓеÄÇëÇóÀïʹÓÃXMLHttpRequest²¢¸½¼ÓÒ»¸ö×Ô¶¨ÒåÍ·£¨±ÈÈçX-Requested-By£©£¬²¢ÇҾܾøËùÓÐûÓÐ×Ô¶¨ÒåÍ·µÄµÄÇëÇó¡£ÀýÈ磬ΪÁË·ÀÓùµÇ½CSRFµÄ¹¥»÷£¬ÍøÕ¾±ØÐëͨ¹ýXMLHttpRequestµÄ·½Ê½·¢ËÍÓû§µÄÉí·ÝÑéÖ¤ÐÅÏ¢µ½·þÎñÆ÷¡£ÔÚÎÒÃǵÄʵÑéÀÔÚ·þÎñÆ÷½ÓÊÕµ½µÄÇëÇóÀïÃæ£¬´óÔ¼ÓÐ99.90¨C99.99%µÄÇëÇóÊǺ¬ÓÐX-Requested-ByÍ·µÄ£¬Õâ±íÃ÷ÕâÒ»·½·¨ÊÊÓÃÓÚ¾ø´ó¶àÊýµÄÓû§¡£

½¨Ò飺Origin×Ö¶Î

ΪÁË·ÀÖ¹CSRFµÄ¹¥»÷£¬ÎÒÃǽ¨ÒéÐÞ¸Ää¯ÀÀÆ÷ÔÚ·¢ËÍPOSTÇëÇóµÄʱºò¼ÓÉÏÒ»¸öOrigin×ֶΣ¬Õâ¸öOrigin×Ö¶ÎÖ÷ÒªÊÇÓÃÀ´±êʶ³ö×î³õÇëÇóÊÇ´ÓÄÄÀï·¢ÆðµÄ¡£Èç¹ûä¯ÀÀÆ÷²»ÄÜÈ·¶¨Ô´ÔÚÄÄÀÄÇôÔÚ·¢Ë͵ÄÇëÇóÀïÃæOrigin×ֶεÄÖµ¾ÍΪ¿Õ¡£

Òþ˽·½Ã棺ÕâÖÖOrigin×ֶεķ½Ê½±ÈReferer¸üÈËÐÔ»¯£¬ÒòΪËü×ðÖØÁËÓû§µÄÒþ˽¡£

1¡¢Origin×Ö¶ÎÀïÖ»°üº¬ÊÇË­·¢ÆðµÄÇëÇ󣬲¢Ã»ÓÐÆäËûÐÅÏ¢ (ͨ³£Çé¿öÏÂÊÇ·½°¸£¬Ö÷»úºÍ»î¶¯ÎĵµURLµÄ¶Ë¿Ú)¡£¸úReferer²»Ò»ÑùµÄÊÇ£¬Origin×ֶβ¢Ã»Óаüº¬Éæ¼°µ½Óû§Òþ˽µÄURL·¾¶ºÍÇëÇóÄÚÈÝ£¬Õâ¸öÓÈÆäÖØÒª¡£

2¡¢Origin×Ö¶ÎÖ»´æÔÚÓÚPOSTÇëÇ󣬶øRefererÔò´æÔÚÓÚËùÓÐÀàÐ͵ÄÇëÇó¡£

Ëæ±ãµã»÷Ò»¸ö³¬Á´½Ó£¨±ÈÈç´ÓËÑË÷ÁбíÀï»òÕ߯óÒµintranet£©£¬²¢²»»á·¢ËÍOrigin×ֶΣ¬ÕâÑù¿ÉÒÔ·ÀÖ¹Ãô¸ÐÐÅÏ¢µÄÒÔÍâй¶¡£

ÔÚÓ¦¶ÔÒþ˽ÎÊÌâ·½Ãæ£¬Origin×ֶεķ½·¨¿ÉÄܸüÄÜÓ­ºÏÓû§µÄ¿Úζ¡£

·þÎñ¶ËÒª×öµÄ£ºÓÃOrigin×ֶεķ½·¨À´·ÀÓùCSRF¹¥»÷µÄʱºò£¬ÍøÕ¾ÐèÒª×öµ½ÒÔϼ¸µã£º

1¡¢ÔÚËùÓÐÄܸıä״̬µÄÇëÇóÀ°üÀ¨µÇ½ÇëÇ󣬶¼±ØÐëʹÓÃPOST·½·¨¡£¶ÔÓÚÒ»Ð©ÌØ¶¨µÄÄܸıä״̬µÄGETÇëÇó±ØÐëÒª¾Ü¾ø£¬ÕâÊÇΪÁ˶Կ¹ÉÏÎÄÖÐÌáµ½¹ýµÄÂÛ̳ÕÅÌùµÄÄÇÖÖΣº¦ÀàÐÍ¡£

2¡¢¶ÔÓÚÄÇЩÓÐOrigin×ֶε«ÊÇÖµ²¢²»ÊÇÎÒÃÇÏ£ÍûµÄ£¨°üÀ¨ÖµÎª¿Õ£©ÇëÇ󣬷þÎñÆ÷ÒªÒ»Âɾܾø¡£±ÈÈ磬·þÎñÆ÷¿ÉÒԾܾøÒ»ÇÐOrigin×Ö¶ÎΪÍâÕ¾µÄÇëÇó¡£

°²È«ÐÔ·ÖÎö£ºËäÈ»Origin×ֶεÄÉè¼Æ·Ç³£¼òµ¥£¬µ«ÊÇÓÃËüÀ´·ÀÓùCSRF¹¥»÷¿ÉÒÔÆðµ½ºÜºÃµÄ×÷Óá£

1¡¢È¥µôOrigin×ֶΡ£ÓÉÓÚÖ§³ÖÕâÖÖ·½·¨µÄä¯ÀÀÆ÷ÔÚÿ´ÎPOSTÇëÇóµÄʱºò¶¼»á´øÉÏÔ´header£¬ÄÇÃ´ÍøÕ¾¾Í¿ÉÒÔͨ¹ý²é¿´ÊÇ·ñ´æÔÚÕâÖÖOrigin×Ö¶ÎÀ´È·¶¨ÇëÇóÊÇ·ñÊÇÓÉÖ§³ÖÕâÖÖ·½·¨µÄä¯ÀÀÆ÷·¢ÆðµÄ¡£ÕâÖÖÉè¼ÆÄÜÓÐЧ·ÀÖ¹¹¥»÷Õß½«Ò»¸öÖ§³ÖÕâÖÖ·½·¨µÄä¯ÀÀÆ÷¸Ä±ä³É²»Ö§³ÖÕâÖÖ·½·¨µÄä¯ÀÀÆ÷£¬ÒòΪ¼´Ê¹Äã¸Ä±ää¯ÀÀÆ÷È¥µôÁËOrigin×ֶΣ¬Origin×ֶλ¹ÊÇ´æÔÚ£¬Ö»²»¹ýÖµ±äΪ¿ÕÁË¡£Õâ¸úRefererºÜ²»Ò»Ñù£¬ÒòΪReferer Ö»ÒªÊÇÔÚÇëÇóÀïÈ¥µôÁË£¬ÄÇ·þÎñÆ÷¾Í̽²â²»µ½ÁË¡£

2¡¢DNSÖØÐ°󶨡£ÔÚÏÖÓеÄä¯ÀÀÆ÷ÀïÃæ£¬¶ÔÓÚͬվµÄXMLHttpRequests£¬Origin×ֶοÉÒÔ±»Î±Ôì¡£Ö»ÒÀÀµÍøÂçÁ¬½Ó½øÐÐÉí·ÝÑéÖ¤µÄÍøÕ¾Ó¦µ±Ê¹ÓÃÔÚµÚ2ÕÂÀïÌáµ½µÄDNSÖØÐ°󶨵ķ½·¨£¬±ÈÈçÑéÖ¤headerÀïµÄHost×ֶΡ£ÔÚʹÓÃOrigin×Ö¶ÎÀ´·ÀÓùCSRF¹¥»÷µÄʱºò£¬Ò²ÐèÒªÓõ½DNSÖØÐ°󶨵ķ½·¨£¬ËûÃÇÊÇÏศÏà³ÉµÄ¡£µ±È»¶ÔÓÚÔÚµÚËÄÕÂÀïÌáµ½µÄCSRF·ÀÓù·½·¨£¬Ò²ÐèÒªÓõ½DNSÖØÐ°󶨵ķ½·¨¡£

3¡¢²å¼þ¡£Èç¹ûÍøÕ¾¸ù¾Ýcrossdomain.xml×¼±¸½ÓÊÜÒ»¸ö¿çÕ¾HTTPÇëÇóµÄʱºò£¬¹¥»÷Õß¿ÉÒÔÔÚÇëÇóÀïÓÃFlash PlayerÀ´ÉèÖÃOrigin×ֶΡ£ÔÚ´¦Àí¿çÕ¾ÇëÇóµÄʱºò£¬tokenÑéÖ¤µÄ·½·¨´¦ÀíµÄ²»ºÃ£¬ÒòΪtoken»á±©Â¶¡£ÎªÁËÓ¦¶ÔÕâЩ¹¥»÷£¬ÍøÕ¾²»Ó¦µ±½ÓÊܲ»¿ÉÐÅÀ´Ô´µÄ¿çÕ¾ÇëÇó¡£

4¡¢Ó¦Óá£Origin×ֶθúÒÔÏÂËĸöÓÃÀ´È·¶¨ÇëÇóÀ´Ô´µÄ½¨Òé·Ç³£ÀàËÆ¡£Origin×Ö¶ÎÒÔÏÂËĸö½¨ÒéµÄ»ù´¡ÉÏͳһ²¢¸Ä½øÁË£¬Ä¿Ç°ÒѾ­Óм¸¸ö×éÖ¯²ÉÓÃÁËOrigin×ֶεķ½·¨½¨Òé¡£

Cross-Site XMLHttp Request¡£Cross-Site XMLHttp RequestµÄ·½·¨¹æ¶¨ÁËÒ»¸öAccess-Control-Origin ×ֶΣ¬ÓÃÀ´È·¶¨ÇëÇóÀ´Ô´¡£Õâ¸ö×ֶδæÔÚÓÚËùÓеÄHTTP·½·¨£¬µ«ÊÇËüÖ»ÔÚXMLHttpRequestsÇëÇóµÄʱºò²Å»á´øÉÏ¡£ÎÒÃǶÔOrigin×ֶεÄÉèÏë¾ÍÊÇÀ´Ô´ÓÚÕâ¸ö½¨Ò飬¶øÇÒCross-Site XMLHttp Request¹¤×÷×éÒѾ­½ÓÊÜÎÒÃǵĽ¨ÒéÔ¸Ò⽫×Ö¶ÎͳһÃüÃûΪOrigin¡£

XDomainRequest¡£ÔÚInternet Explorer 8 Beta 1ÀïÓÐXDomainRequestµÄAPI£¬ËüÔÚ·¢ËÍHTTPÇëÇóµÄʱºò½«RefererÀïµÄ·¾¶ºÍÇëÇóÄÚÈÝɾµôÁË¡£±»Ëõ¼õºóµÄReferer×ֶοÉÒÔ±êʶÇëÇóµÄÀ´Ô´¡£ÎÒÃǵÄʵÑé½á¹û±íÃ÷ÕâÖÖɾ¼õµÄReferer×ֶξ­³£»á±»¾Ü¾ø£¬¶øÎÒÃǵÄOrigin×Ö¶ÎÈ´²»»á¡£Î¢ÈíÒѾ­·¢±íÉùÃ÷½«»á²ÉÓÃÎÒÃǵĽ¨Ò齫XDomainRequestÀïµÄɾ¼õReferer¸ü¸ÄΪOrigin×ֶΡ£

JSONRequest¡£ÔÚJSONRequestÕâÖÖÉè¼ÆÀ°üº¬ÓÐÒ»¸öDomain×Ö¶ÎÓÃÀ´±êʶ·¢ÆðÇëÇóµÄÖ÷»úÃû¡£Ïà±È֮ϣ¬ÎÒÃǵÄOrigin×ֶη½·¨²»½ö°üº¬ÓÐÖ÷»ú£¬»¹°üº¬ÇëÇóµÄ·½°¸ºÍ¶Ë¿Ú¡£JSONRequest¹æ·¶µÄÉè¼ÆÕßÒѾ­½ÓÊÜÎÒÃǵĽ¨ÒéÔ¸Ò⽫Domain×ֶθü¸ÄΪOrigin×ֶΣ¬ÒÔÓÃÀ´·ÀÖ¹ÍøÂç¹¥»÷¡£

Cross-Document Messaging¡£ÔÚHTML5¹æ·¶ÀïÌá³öÁËÒ»¸ö½¨Ò飬¾ÍÊǽ¨Á¢Ò»¸öеÄä¯ÀÀÆ÷API£¬ÓÃÀ´ÑéÖ¤¿Í»§¶ËÔÚHTMLÎļþÖ®¼äÁ´½Ó¡£ÕâÖÖÉè¼ÆÀïÃæ°üº¬Ò»¸ö²»Äܱ»¸²¸ÇµÄoriginÊôÐÔ£¬Èç¹û²»ÊÇÔÚ¿Í»§¶ËµÄ»°£¬ÔÚ·þÎñ¶ËÑéÖ¤ÕâÖÖoriginÊôÐԵĹý³ÌÓëÎÒÃÇÑéÖ¤origin×ֶεĹý³ÌÆäʵÊÇÒ»ÑùµÄ¡£

¾ßÌåʵʩ£ºÎÒÃÇÔÚ·þÎñÆ÷ºÍä¯ÀÀÆ÷¶Ë¶¼ÊµÏÖÁËÀûÓÃorigin×ֶεķ½·¨À´·ÀÖ¹CSRF¹¥»÷¡£ÔÚä¯ÀÀÆ÷¶ËÎÒÃǵÄʵÏÖorigin×ֶη½Ê½ÊÇ£¬ÔÚWebKitÌí¼ÓÒ»¸ö8ÐдúÂëµÄ²¹¶¡£¬SafariÀïÓÐÎÒÃǵĿªÔ´×é¼þ£¬FirefoxÀïÓÐÒ»¸ö466ÐдúÂëµÄ²å¼þ¡£ÔÚ·þÎñÆ÷¶ËÎÒÃÇʵÏÖorigin×ֶεķ½Ê½ÊÇ£¬ÔÚModSecurityÓ¦Ó÷À»ðǽÀïÎÒÃÇÖ»ÓÃ3ÐдúÂ룬ÔÚApacheÀïÌí¼ÓÒ»¸öÓ¦Ó÷À»ðǽÓïÑÔ£¨¼ûͼ4£©¡£ÕâЩ¹æÔòÔÚPOSTÇëÇóÀïÄÜÑéÖ¤Host×ֶκ;ßÓкϷ¨ÖµµÄorigin×ֶΡ£ÔÚʵÏÖÕâЩ¹æÔòÀ´·ÀÓùCSRF¹¥»÷µÄʱºò£¬ÍøÕ¾²¢²»ÐèÒª×ö³öʲô¸Ä±ä£¬¶øÇÒÕâЩ¹æÔò»¹ÄÜÈ·±£GETÇëÇóûÓÐÈκι¥»÷ÐÔ(ǰÌáÊÇä¯ÀÀÆ÷¶ËÒѾ­ÊµÏÖÁËorigin×ֶη½·¨)¡£

session³õʼ»¯

ÔÚsession³õʼ»¯µÄʱºò£¬µÇ½CSRFÖ»ÊÇÆäÖÐÒ»¸öºÜÆÕ±éµÄ©¶´¡£ÔÚsession³õʼ»¯ÁËÖ®ºó£¬web·þÎñÆ÷ͨ³£»á½«Óû§µÄÉí·ÝÓësession±êʶ·û°ó¶¨ÆðÀ´¡£Òò´ËÓÐÁ½ÖÖÀàÐ͵Äsession³õʼ»¯Â©¶´£¬Ò»ÖÖÊÇ·þÎñÆ÷½«¿ÉÐÅÓû§µÄÉí·ÝÓëгõʼ»¯µÄsession°ó¶¨µ½ÁËÒ»Æð£¬ÁíÒ»ÖÖÊÇ·þÎñÆ÷½«¹¥»÷ÕßµÄÉí·ÝÓësession°ó¶¨µ½ÁËÒ»Æð¡£

×÷Ϊ¿ÉÐÅÓû§µÄÑéÖ¤¡£ÔÚÄ³Ð©ÌØ¶¨µÄÇé¿öÏ£¬¹¥»÷Õß¿ÉÒÔʹÓÃÒ»¸ö¿ÉÔ¤¼ûµÄsession±êʶ·ûÇ¿ÖÆÍøÕ¾¿ªÆôÒ»¸öеÄsession¡£ÕâÒ»ÀàÐ͵Ä©¶´Ò»°ã¶¼±»³ÆÎªsession¶¨Î»Â©¶´¡£µ±Óû§ÌṩËûÃǵÄÉí·ÝÐÅÏ¢¸øÒ»¸ö¿ÉÐÅÍøÕ¾À´ÑéÖ¤ºó£¬ÍøÕ¾»á½«Óû§µÄÉí·ÝÓëÒ»¸ö¿ÉÔ¤¼ûµÄsession±êʶ·û°ó¶¨µ½Ò»Æð¡£¹¥»÷Õß´Ëʱ¾Í¿ÉÒÔͨ¹ýÕâ¸ösession±êʶ·ûÀ´°çÑÝÓû§µÄÉí·ÝµÇÂ¼ÍøÕ¾¡£

×÷Ϊ¹¥»÷ÕßµÄÑéÖ¤¡£¹¥»÷ÕßÒ²¿ÉÒÔͨ¹ýÓû§µÄä¯ÀÀÆ÷Ç¿ÖÆÍøÕ¾¿ªÊ¼Ò»¸öеÄsession£¬²¢ÇÒÇ¿ÖÆsessionÓë¹¥»÷ÕßµÄÉí·Ý°ó¶¨µ½Ò»Æð£¨µÚ3ÕÂÒѾ­ËµÃ÷Á˹¥»÷ÊÇÔõôÍê³ÉµÄ£©¡£µÇ¼CSRF¹¥»÷Ö»ÊÇÕâÒ»ÀàÐÍÖеÄ×î¼òµ¥Â©¶´£¬µ«Êǹ¥»÷Õß»¹¿ÉÒÔÓÐÆäËûµÄ·½·¨Ç¿ÖÆÍ¨¹ýÓû§µÄä¯ÀÀÆ÷½«sessionÓë×Ô¼º°ó¶¨µ½Ò»Æð¡£

HTTPÇëÇó

OpenID£ºÏñLiveJournal¡¢Movable TypeºÍWordPressµÈºÜ¶àÍøÕ¾¶¼ÔÚʹÓÃOpenID ЭÒ飬½¨ÒéÕâЩ¿ÉÒÔʹÓÃ×ÔÇ©ÃûËæ»úÊýµÄ·½Ê½À´¶Ô¿¹»Ø¸´¹¥»÷£¬µ«²»Òª½«OpenID sessionÓëÓû§µÄä¯ÀÀÆ÷°ó¶¨µ½Ò»Æð£¬ÒòΪ¹¥»÷Õß¿ÉÒÔÇ¿ÖÆÓû§µÄä¯ÀÀÆ÷³õʼ»¯Ò»¸ösessionÈ»ºó½«sessionÓë×Ô¼º°ó¶¨µ½Ò»Æð¡£¹æ·¶ÖÐÉùÃ÷ÁË£º return_to Õâ¸öURL¿ÉÄܱ»Î¯Íз½ÓÃÀ´ÔÚÓû§µÄÑéÖ¤ÇëÇóÓëÑéÖ¤´ð¸´Ö®¼ä½¨Á¢ÁªÏµ¡£µ«ÊÇLiveJournal, Movable TypeºÍWordPress¶¼ÈÏΪÕâ²»ÊDZØÐëµÄ£¬Ò²Ã»ÓÐʵʩËü¡£ÎªÁ˶Կ¹ÕâÖÖ¹¥»÷£¬ÔÚЭÒé³õʼ»¯µÄʱºòίÍз½Ó¦¸ÃÉú³ÉÒ»¸öеÄËæ»úÊý£¬²¢½«ËüÓëä¯ÀÀÆ÷µÄcookie´æ´¢µ½Ò»Æð£¬½«Ëü°üº¬µ½return_to²ÎÊýÀίÍз½»á½«ÔÚcookieÀïµÄËæ»úÊýÓëreturn_to²ÎÊýÀïµÄËæ»úÊýÆ¥Åä¡£ÕâÖÖ·½·¨ÆäʵÓëtokenÑéÖ¤µÄ·½·¨ºÜÀàËÆ£¬²¢ÇÒÈ·±£ÁË´ÓÒ»¿ªÊ¼OpenID ЭÒéµÄsession¾ÍÄÜÔÚͬһ¸öä¯ÀÀÆ÷ÉÏÍê³É¡£

PHP cookieless£¨²»ÓÃcookieµÄ£©ÑéÖ¤£ºÕâÖÖ·½·¨±»Hushmail µÈÍøÕ¾ÓÃÀ´·ÀÖ¹Óû§µÄµçÄÔÉÏ»¹±£ÁôÓÐcookie¡£Cookieless ÑéÖ¤·½·¨Êǽ«Óû§µÄsession±êʶ·û´æ´¢ÔÚÇëÇóµÄ²ÎÊýÀïÃæ¡£µ«ÊÇÕâ¸ö·½·¨²»Äܽ«sessionÓëÓû§µÄä¯ÀÀÆ÷°ó¶¨µ½Ò»Æð£¬Òò´Ë¹¥»÷Õß¿ÉÒÔÇ¿ÖÆÓû§µÄä¯ÀÀÆ÷³õʼ»¯Ò»¸ösessionÓë¹¥»÷Õ߰󶨵½Ò»Æð¡£ÎªÁË·ÀÖ¹ÕâÖÖ¹¥»÷£¬ÍøÕ¾±ØÐëʹÓÃÁíÍâµÄ·½·¨½«session±êʶ·ûÓëÓû§µÄä¯ÀÀÆ÷°ó¶¨µ½Ò»Æð¡£ÀýÈç£¬ÍøÕ¾¿ÉÒÔ¹¹ÔìÒ»¸ö³¤Ê±¼äµÄframe£¬ÆäÖаüº¬ÓÐsession±êʶ·û¡£ÕâÖÖ·½Ê½ÊÇͨ¹ý½«session±êʶ·û±£´æÔÚÄÚ´æÀïÀ´½«Óû§µÄä¯ÀÀÆ÷Óësession°ó¶¨¡£Ê¹ÓÃPHP cookielessÑéÖ¤·½·¨µÄÍøÕ¾Í¨³£Ò²»á´æÔÚsession³õʼ»¯Â©¶´£¬»áÈù¥»÷Õß¿ÉÒÔÄ£·ÂÒ»¸ö¿ÉÐŵÄÓû§¡£µ±È»£¬ÀàËÆµÄsession¶¨Î»Â©¶´Óкܶà±ê×¼µÄ·ÀÓù·½·¨£¬ÀýÈ磬µ±Óû§µÇ½ºó£¬ÍøÕ¾¿ÉÒÔÔÙ´ÎÉú³ÉÒ»¸ösession±êʶ·û¡£

CookieÖØÐ´

©¶´¡£·þÎñÆ÷¿ÉÒÔÔÚSet-Cookie×Ö¶ÎÀïÓÃÒ»¸öSecure flag·½Ê½¸æËßä¯ÀÀÆ÷´ËcookieÖ»ÄÜͨ¹ýHTTPSЭÒé·¢ËÍ¡£ÏÖ½ðµÄä¯ÀÀÆ÷¶¼Ö§³ÖÕâ¸öÌØÐÔ£¬²¢ÇÒÔÚһЩ¶Ô°²È«ÐÔÒªÇó±È½Ï¸ßµÄÍøÕ¾£¬Õâ¸öÌØÐÔͨ³£±»ÓÃÀ´±£»¤session¡£µ«ÊÇ£¬Õâ¸öSecure flag²¢²»Äܱ£Ö¤ÍêÕûÐÔ¡£¹¥»÷Õß¿ÉÒÔÄ£·ÂÍøÕ¾Í¨¹ýHTTPÏòͬһ¸öÖ÷»ú·¢ËÍSet-Cookie×ֶΣ¬²¢ÔÚÖ÷»úÉÏÉèÁ¢ÁËcookie¡£µ±ä¯ÀÀÆ÷ͨ¹ýHTTPSÏòÍøÕ¾·¢ËÍcookieµÄʱºò£¬ÍøÕ¾²¢Ã»ÓÐÒ»¸ö»úÖÆÀ´È·¶¨cookieÊÇ·ñ±»¹¥»÷ÕßÖØÐ´¡£Èç¹ûÕâ¸öcookieÀïÃæ°üº¬ÓÐÓû§µÄsession±êʶ·û£¬¹¥»÷Õ߾ͿÉÒÔºÜÈÝÒ×µÄͨ¹ýÖØÐ´Óû§µÄcookieÀ´·¢ÆðÒ»¸ösession³õʼ»¯¹¥»÷¡£»ù±¾ÉÏûÓÐÍøÕ¾Äܹ»·ÀÓùÕâÖÖ¹¥»÷£¬ÒòΪËûÃÇÐèÒª¿Í»§¶ËÌṩһ¸öcookieÀ´×÷ÍêÕûÐÔÑéÖ¤¡£µ«ÊÇ£¬ÓÐÈ˽¨ÒéʹÓÃä¯ÀÀÆ÷µÄÌØÐÔ£¬±ÈÈçlocalStorage£¬Ëü¿ÉÒÔÃÖ²¹ÕâÒ»²»×ã¡£»»¾ä»°Ëµ£¬Èç¹ûÍøÕ¾Éù³ÆËüµÄÓ¦ÓòãsessionµÄÑéÖ¤ÍêÈ«¸ú»ùÓÚcookieµÄHTTP²ãµÄsessionÎ޹صϰ£¬¹¥»÷Õß¿ÉÒÔÔÚÑé֤֮ǰ¾ÍÖØÐ´Óû§µÄcookie£¬È»ºó°çÑÝÓû§µÇÂ½ÍøÕ¾¡£¾¡¹Ü°²È«ÈËÔ±ºÜ¶àÄêǰ¾ÍÖªµÀ¹¥»÷Õß¿ÉÒÔÖØÐ´cookie£¬µ«ÊÇä¯ÀÀÆ÷³§É̲¢Ã»ÓÐʲôºÃµÄ¶Ô¿¹°ì·¨¡£³§ÉÌ¿¼Âǵ½ÁËͨ¹ý¾Ü¾øHTTPÇëÇóµÄ·½Ê½À´¶Ô¿¹cookieÖØÐ´µÄ¹¥»÷£¬µ«ÊÇÕâÒ»×ö·¨ÏÔÈ»²»Ì«ºÏÀí¡£¸üÔã¸âµÄÊÇ£¬ÕâÒ»·½·¨²¢²»ÄÜÌṩcookieµÄÍêÕûÐÔ£¬ÒòΪCookie ×ֶα¾Éí²¢²»ÄÜÇø·Öcookie ÀïÊÇ·ñº¬ÓÐSecure flag¡£

·ÀÓù·½·¨¡£ÎªÁ˲»¸Ä±äÏÖÓеÄcookie×ֶζø¾ÍÄܱ£»¤cookieµÄÍêÕûÐÔ£¨ÊÇ·ñ°üº¬ÓÐSecure flag£©£¬ÎÒÃǽ¨Òéä¯ÀÀÆ÷¿ÉÒÔÔÚHTTPSÇëÇóÀïÃæÐ¼ÓÒ»¸öCookie-Integrity×ֶΣ¬×¨ÃÅÓÃÀ´¼ì²âcookieµÄÍêÕûÐÔ״̬¡£ÕâÑùÒ²ÊÇ¿¼ÂÇÁ˼æÈÝÒÔǰ²ßÂÔµÄ×ö·¨¡£ÀýÈç

Cookie: SID=DQAAAHQA¡­; pref=ac81a9¡­; TM=1203¡­

Cookie-Integrity: 0, 2

µ±cookie±»ÉèÖóÉʹÓÃHTTPSЭÒé·¢Ë͵Äʱºò£¬Cookie-Integrity×ֶοÉÒÔÔÚÇëÇóÀïÃæÓÃÀ´ÃèÊöcookie×ֶεÄË÷Òý¡£Èç¹ûÇëÇóÀïÃæµÄcookie¶¼Ã»Óб»ÉèÖóÉHTTPS£¬ÄÇôCookie-Integrity×ֶεÄÖµ¾ÍΪ¿Õ¡£¶ÔCookie-Integrity×ֶεÄÍêÕûÐԵı£»¤ÓëSecure flagÄÜÌṩµÄ»úÃÜÊÇÏศÏà³ÉµÄ£¬²¢ÇÒÕâÑù×öÒ²¾ß±¸ºÜºÃµÄ¼æÈÝÐÔ£¬ÒòΪ·þÎñÆ÷»áºöÂÔ¾ßÓÐÎÞ·¨Ê¶±ðµÄheaderµÄÇëÇó¡£ÏÂÃæÊǼ¸¸öÉè¼ÆµÄ½¨Ò飺

´ø¿í¡£ÔÚÿһ¸öHTTPÇëÇóÖÐÌí¼ÓÄÚÈݱØÈ»»áÔö¼ÓËùÓÐÍøÂçµÄÑÓ³Ù£¬ÎªÁ˽ÚÊ¡´ø¿í£¬ÎÒÃÇÖ»ÔÚcookie×Ö¶ÎÀïÌí¼ÓcookieµÄË÷ÒýÖµ¡£»¹ÓÐÒ»¸ö½¨Òé×ö·¨¾ÍÊÇÌí¼ÓÒ»¸öÀàËÆcookie×ֶεĸ±±¾£¬ÃüÃûΪcookie2¡£

¶àÑùÐÔ¡£µ±Ö÷»ú×¼±¸½¨Á¢Ò»¸öÓëÒÑÓÐcookieͬÃûµÄcookie£¬ÄÇôcookieÍêÈ«¿ÉÒÔ°üº¬Á½¸öͬÃûµÄcookie¡£ÒòΪÔÚ´ËÖÖÇé¿öÏ£¬Ò²ÐíCookie-Integrity×ֶβ»Äܸù¾ÝcookieÃûÀ´·Ö±æËüÃÇ£¬µ«ÊÇÎÒÃÇ¿ÉÒÔÔÚcookie×Ö¶ÎÀïÃæÍ¨¹ýË÷ÒýÖµÀ´Çø±ðËüÃÇ¡£

Rollback¡£ÔÚHTTPSÇëÇóÀïÃæ¼ÓÈëCookie-Integrity×ֶοÉÒÔÓÐЧµÄ·ÀÖ¹rollback¹¥»÷¡£ Èç¹ûûÓÐCookie-Integrity×ֶΣ¬²¢ÇÒÔÚ²»Äܱ£Ö¤cookieÍêÕûÐÔµÄʱºò£¬ÄÇô·þÎñÆ÷´ËʱҲ²»ÄÜÈ·¶¨ÇëÇóÀïÃæµÄcookieÊÇ·ñ¾ß±¸ÍêÕûÐÔ£¨¼ÙÉèÇëÇóÊÇ´ÓÒ»¸öµÍ°æ±¾µÄÖ÷»ú·¢³öµÄ£¬¼´²»Ö§³ÖCookie-Integrity×ֶΣ©¡£

ͬ°ûÓò¡£¼ÙÉèÓÐÕâÑùÒ»ÖÖÇé¿ö£¬example.com·Ö±ð°üº¬ÓÐÒ»¸ö¿ÉÐŵĺÍÒ»¸ö²»¿ÉÐŵÄ×ÓÓò£¬www.example.com ºÍ users.example.com¡£ÔÚ¶Ôexample.comÉèÖÃcookieµÄʱºò£¬²»¿ÉÐŵÄ×ÓÓò¾Í¿ÉÒÔ×¢Èë¿ÉÐÅ×ÓÓòµÄcookie×ֶΡ£Cookie-Integrity×ֶβ¢²»ÄÜ·ÀÖ¹ÕâÖÖ¹¥»÷£¬µ«ÊÇÎÒÃÇ¿ÉÒÔͨ¹ýÔö¼ÓÒ»¸ö×Ö¶ÎÀ´±êʶÿ¸öcookieµÄÀ´Ô´£¨µ±È»ÕâҪȡ¾öÓÚ¶Ô´ø¿íºÍ¸´ÔÓÐԵĿ¼ÂÇ£©¡£

ÎÒÃÇÔÚFirefoxÀïÓÃ202ÐÐJavaScript´úÂëÌí¼ÓʵÏÖÁËCookie-Integrity×ֶΣ¬²¢Ôö¼ÓÁËÒ»¸öIntegrity flag´æ´¢µ½cookieÀïÃæ£¬Ö÷ÒªÓÃÀ´¼Ç¼Õâ¸öcookieÊÇ·ñ±»ÉèÖóÉʹÓÃHTTPS´«Êä¡£

×ܽáºÍ½¨Òé

CSRFÊǵ±½ñÒ»¸ö±»ÀûÓõķdz£¹ã·ºµÄ©¶´¡£ºÜ¶àÍøÕ¾ÐÞ¸´ÁËËûÃǵİüÀ¨µÇ½CSRF©¶´ÔÚÄÚµÄCSRF©¶´¡£»ùÓÚÕâÆªÎÄÕÂÖÐÌáµ½µÄʵÑéºÍ·ÖÎö£¬ÎÒÃǽ¨ÒéÍøÕ¾ÔÚ²»Í¬µÄÇé¿öÏÂʹÓò»Í¬µÄCSRF·ÀÓù²ßÂÔ¡£

µÇ½CSRF¡£ÎÒÃǽ¨ÒéʹÓÃÑϸñµÄRefererÑéÖ¤²ßÂÔÀ´·ÀÓùµÇ½CSRF£¬ÒòΪµÇ½µÄ±íµ¥Ò»°ã¶¼ÊÇͨ¹ýHTTPS·¢ËÍ£¬ÔںϷ¨ÇëÇóÀïÃæµÄReferer¶¼ÊÇÕæÊµ¿É¿¿µÄ¡£Èç¹ûÅöµ½Ã»ÓÐReferer×ֶεĵǽÇëÇó£¬ÄÇÃ´ÍøÕ¾Ó¦¸ÃÖ±½Ó¾Ü¾øÒÔ·ÀÓùÕâÖÖ¶ñÒâµÄÐ޸ġ£

HTTPS¡£¶ÔÓÚÄÇЩרÃÅʹÓÃHTTPSЭÒéµÄÍøÕ¾£¬±ÈÈçÒøÐÐÀ࣬ÎÒÃÇÒ²½¨ÒéʹÓÃÑϸñµÄRefererÑéÖ¤²ßÂÔÀ´·ÀÓùCSRF¹¥»÷¡£¶ÔÓÚÄÇЩÓÐÌØ¶¨¿çÕ¾ÐèÇóµÄÇëÇó£¬ÍøÕ¾Ó¦¸Ã½¨Á¢Ò»·Ý°×Ãûµ¥£¬±ÈÈçÖ÷Ò³µÈ¡£

µÚÈý·½ÄÚÈÝ¡£Èç¹ûÍøÕ¾ÄÉÈëÁ˵ÚÈý·½µÄÄÚÈÝ£¬±ÈÈçͼÏñÍâÁ´ºÍ³¬Á´½Ó£¬ÍøÕ¾Ó¦¸ÃʹÓÃÒ»¸öÕýÈ·µÄÑéÖ¤token µÄ¿ò¼Ü£¬±ÈÈç Ruby-on-Rails¡£Èç¹ûÕâÑùµÄÒ»¸ö¿ò¼ÜЧ¹û²»ºÃµÄ»°£¬ÍøÕ¾¾ÍÓ¦¸Ã»¨Ê±¼äÀ´Éè¼Æ¸üºÃµÄtoken ÑéÖ¤²ßÂÔ£¬¿ÉÒÔÓÃHMAC·½·¨½«Óû§µÄsessionÓëtoken °ó¶¨µ½Ò»Æð¡£

¶ÔÓÚ¸ü³¤Ô¶µÄ½¨Ò飬ÎÒÃÇÏ£ÍûÄÜÓÃOrigin×Ö¶ÎÀ´Ìæ´úReferer£¬ÒòΪÕâÑù¼È±£ÁôÁ˼ÈÓÐЧ¹û£¬ÓÖ×ðÖØÁËÓû§µÄÒþ˽¡£×îÖÕÒª·Ï³ýÀûÓÃtokenÀ´·ÀÓùCSRFµÄ·½Ê½£¬ÒòΪÕâÑùÍøÕ¾¾Í¿ÉÒÔ¸üºÃµÄ±£»¤ÎÞÂÛÊÇHTTP»¹ÊÇHTTPSÇëÇ󣬶ø²»Óõ£ÐÄtokenÊÇ·ñ»áй¶¡£

δÀ´µÄ¹¤×÷¡£Èç¹ûʹÓÃOrigin×ֶεķ½·¨À´·ÀÓùCSRF¹¥»÷£¬ÍøÕ¾Òª×¢ÒâÔÚ´¦ÀíGETÇëÇóµÄʱºò²»ÒªÓÐʲô¸±×÷Ó᣾¡¹ÜHTTP¹æ·¶ÀïÒѾ­ÕâÑùÒªÇ󣬵«ÊǺܶàÍøÕ¾²¢Ã»ÓкܺõÄ×ñÊØÕâÒ»ÒªÇó¡£ÈÃÍøÕ¾¶¼Ö´ÐÐÕâÒ»ÒªÇóÕýÊÇÎÒÃÇδÀ´µÄ¹¤×÷ÖØµã¡£

CSRF¹¥»÷»¹ÐËÆðÁËÒ»¸ö±äÖÖ£¬¼´¹¥»÷ÕßÔÚÒ»¸ö¿ÉÐŵÄÍøÕ¾Ç¶ÈëÒ»¸öframe²¢ÒýÓÕÓû§µã»÷£¨µã»÷½Ù³Ö£©¡£¾¡¹Ü´ÓÎÒÃǵ͍ÒåÉϽ²£¬Õâ¸ö²¢²»ÄÜËãÊÇCSRF¹¥»÷£¬µ«ÊÇËûÃÇÓÐÒ»¸öºÜÏàËÆµÄµØ·½¾ÍÔÚÓÚ£¬¹¥»÷Õß¶¼ÊÇÀûÓÃÓû§µÄä¯ÀÀÆ÷À´¶ÔËûÐÅÈεÄÍøÕ¾·¢ÆðÒ»¸öÇëÇó¡£·ÀÓùÕâÖÖ¹¥»÷µÄ´«Í³°ì·¨¶¼ÊÇframe busting£¬µ«ÊÇÕâÖÖ·½·¨ÓиöÎÊÌâ¾ÍÊÇËüÒÀÀµJavaScript£¬¶øJavaScriptºÜÓпÉÄܻᱻÓû§»òÕß¹¥»÷Õß½ûÓá£ÔÚÕâÀïÎÒÃÇÓиö½¨ÒéÊÇ£¬¿ÉÒÔÔÚOrigin×Ö¶ÎÀïÌí¼ÓһЩÄÚÈÝÓÃÀ´ÃèÊöframeµÄÀ´Ô´£¬Ò²¾ÍÊÇframeÀïÃæµÄ³¬Á´½Ó£¬ÕâÑùÊÜÐÅÈεÄÍøÕ¾¾Í¿ÉÒÔ¸ù¾ÝframeµÄÀ´Ô´À´¾ö¶¨ÊǾܾø»¹ÊǽÓÊÜÕâ¸öÇëÇó¡£

   
3341 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

iOSÓ¦Óð²È«¿ª·¢£¬Äã²»ÖªµÀµÄÄÇЩÊÂÊõ
Web°²È«Ö®SQL×¢Èë¹¥»÷
ÒÆ¶¯APP°²È«ÔÚÉøÍ¸²âÊÔÖеÄÓ¦ÓÃ
´ÓGoogle±¸·Ý»¥ÁªÍø¿´¡°Êý¾Ý°²È«¡±
 
Ïà¹ØÎĵµ

web°²È«Éè¼ÆÓë·À»¤
»¥ÁªÍøº£Á¿ÄÚÈݰ²È«´¦Àí¼¼Êõ
ºÚ¿Í¹¥»÷Óë·À·¶¼¼Êõ
WEBºÚºÐ°²È«¼ì²â
 
Ïà¹Ø¿Î³Ì

WEBÍøÕ¾ÓëÓ¦Óð²È«Ô­ÀíÓëʵ¼ù
webÓ¦Óð²È«¼Ü¹¹Éè¼Æ
´´½¨°²È«µÄJ2EE WebÓ¦ÓôúÂë
ÐÅÏ¢°²È«ÎÊÌâÓë·À·¶
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

iOSÓ¦Óð²È«¿ª·¢
Web°²È«Ö®SQL×¢Èë¹¥»÷
APP°²È«ÔÚÉøÍ¸²âÊÔÖеÄÓ¦ÓÃ
³õ̽PHPµÄSQL×¢Èë¹¥»÷µÄ¼¼Êõ
´ÓGoogle±¸·Ý¿´¡°Êý¾Ý°²È«¡±

WEBÍøÕ¾ÓëÓ¦Óð²È«Ô­ÀíÓëʵ¼ù
webÓ¦Óð²È«¼Ü¹¹Éè¼Æ
´´½¨°²È«µÄJ2EE WebÓ¦ÓôúÂë
×¢²áÐÅÏ¢°²È«×¨ÒµÈËÔ±(CISP)
ÐÅÏ¢°²È«¹ÜÀí
ÐÅÏ¢°²È«ÎÊÌâÓë·À·¶

ÖйúÒøÐÐ ÐÅÏ¢°²È«¼¼Êõ¼°Éî¶È·ÀÓù
WebÓ¦Óð²È«¼Ü¹¹¡¢ÈëÇÖ¼ì²âÓë·À»¤
ij²ÆË°ÁìÓòÖªÃûIT·þÎñÉÌ Web°²È«²âÊÔ
ÆÕÈð¿Ë˹ web°²È«Éè¼Æ¡¢²âÊÔÓëÓÅ»¯
±±¾©ºÍÀûʱ ÐÔÄܺͰ²È«ÐÔ²âÊÔ
SUNÖйú¹¤³ÌÑо¿Ôº JSF¿ò¼Ü¡¢°²È«