дһ¸ö°²È«µÄÓ¦ÓóÌÐò
дһ¸ö°²È«µÄÓ¦ÓóÌÐò
FoundstoneÑÇÌ«×Ü¼à ³ÂÑåÃú¡¡¡¡2004/02/16
ÉÏÖÜÌáµ½Ó¦ÓóÌÐòÔÚÉè¼Æ½×¶Îʱ£¬¾Í¿ÉÄÜÒòΪÊèºöÓÚ¿¼ÂÇÐí¶à°²È«ÒòËØ£¬¶øÂñÏÂÆäºóµÄ¿ª·¢ÉúÃüÁ÷³ÌÖеݲȫըµ¯¡£Èç¹ûµÈµ½²âÊÔ½×¶Îʱ²Å·¢ÏÖÎÊÌ⣬²»Ö»µÃ»¨ÉÏÊý±¶µÄʱ¼äÓë×ÊÔ´½øÐÐÐÞ²¹£¬ÍùÍùÒ²»áÊÇÖα겻Öα¾¡£»»ÑÔÖ®£¬ÔÚ²»ÉáÆúÔÓÐͶ×ʵÄÇé¿öÏ£¬¼¸ºõÊDz»¿ÉÄܸıäÔÏÈÉè¼ÆÒÔ½â¾ö¸ù±¾µÄ°²È«ÎÊÌâ¡£
´Ó´ËÖ®ºó£¬Õâ¸öÓ¦ÓóÌÐò½«´¦ÓÚ°¤´òµÄ½×¶Î£¬µÈ´ý×ÅÒ»¸ö¸öµÄ°²È«ÎÊÌâÏà¼Ì·¢ÏÖ£¬ÔÙÒ»¸ö¸ö½øÐнâ¾ö£¬¶øÐÞÐÞ²¹²¹ËùÒªµÄ×ÊÔ´¿ÉÄÜÔ¶³¬¹ýµ±³õͶÈ뿪·¢ËùʹÓõÄ×ÊÔ´¡£±¾ÆªÎÄÕ½«Ìá³öÔÚʵÐн׶Î(Implementation) ʱËù¿ÉÄÜ·¢ÉúÎÊÌâÓëÏà¶ÔµÄ½â¾ö·½Ê½¡£
ÔÚʵÐн׶Σ¬±ØÐ뿼ÂǵÄÊÇÈçºÎ׫д³ö°²È«µÄÓ¦ÓóÌÐò¡£ÎÒÃÇÏȺöÂÔÉè¼Æ½×¶ÎÒòΪÍüÁ˽«°²È«¿¼Âǵ¼ÈëÓ¦ÓóÌÐòÉè¼ÆÖÐËù³öÏÖÎÊÌ⣬ÔÝʱרעÔÚÂÛÊö³ÌÐòÉè¼ÆÓëʵÐеݲȫÎÊÌâ¡£
ÔÚÕâ½×¶ÎÄÚ£¬ÈÝÒ׳öÏÖµÄÎÊÌâÓÐÁ½´óÀࣺµÚÒ»ÀàÊdzÌÐò´íÎó (Code defect)£»µÚ¶þÀàÊÇÂß¼´íÎó (Logic error)¡£Ç°Õß¿ÉÀûÓò»Í¬µÄ×Ô¶¯»¯¹¤¾ß£¬Õì²é´íÎóÖ®´¦ÇÒ¼ÓÒÔ½â¾ö£¬µ«ÈôÊÇ·¢ÉúµÚ¶þÖÖ´íÎ󣬾ͺÜÄÑ͸¹ý×Ô¶¯»¯¹¤¾ßÀ´³ý´í¡£
³ÌÐò´íÎó
³£¼ûµÄ³ÌÐò´íÎó (Code defect) Óм¸ÖÖ¡£µÚÒ»ÖÖÊÇʹÓò»°²È«µÄº¯Êýºô½Ð£¬ÀýÈ磬ÔÚ C ÀïÃæÊ¹Óà strcpy ºô½Ðʱ£¬Èç¹ûûÓÐ×¢ÒâÏà¹ØµÄÊý¾Ý¼ì²é£¬¾ÍºÜÈÝÒ×Ôì³É»º³åÇøÒçλµÄ©¶´¡£ÕýÒ²Òò´Ë£¬Ò×ÓÚÑÜÉúµÚ¶þÖÖ³ÌÐò´íÎ󣡸Êý¾ÝÓÐЧÐÔ¼ì²é¡¹¡£
´ó²¿·ÖµÄ Web Ó¦ÓóÌÐò¶¼½ÓÊÜʹÓÃÕßÊäÈëÊý¾Ý£¬¶ø´ó²¿·ÖµÄ³ÌÐòÒ²¶¼ÏàÐÅʹÓÃÕßÊäÈëµÄÊý¾ÝÇÒÖ±½ÓʹÓá£Èç¹û³ÌÐòÔÚ½ÓÊÕÊý¾ÝÊäÈëʱ£¬ÉèÓмì²éÊý¾Ý³¤¶ÈµÈ¹Ø¿¨£¬¾ÍÄܱÜÃâǰÊöµÄ»º³åÇøÒçλ©¶´¡£ÁíÍ⣬»¹ÓÐһЩ³£¼ûµÄ³ÌÐò´íÎóÒ²Êǰ²È«Ö¢½á£¬ÀýÈ磬ûÓд¦Àí³ÌÐòÖ´ÐÐʱ·¢ÉúµÄÒâÍâÇé¿ö (Exception Handling)¡£
Âß¼´íÎó
ÿһ¸öÓ¦ÓóÌÐòÉè¼ÆÊ±£¬¶¼»áÒÀÕÕÒ»¶¨µÄÉÌÒµÂß¼¿¼ÂÇ£¬¶ø³ÌÐòÉè¼ÆÓëʵ×÷Ö»²»¹ýÊǽ«ÄÇЩ¿¼ÂÇÖеÄÉÌÒµÂß¼ÓëÒªÇ󣬽øÒ»²½×ª»¯³ÉΪ¼ÆËã»úÓïÑÔ¡£µ±³ÌÐòÉè¼ÆÊ¦¶ÔÓÚ½«ÉÌÒµÂ߼ת»¯Îª³ÌÐòÂß¼µÄÈÏÖª²»Í¬Ê±£¬¾Í¿ÉÄܲúÉúһЩÂß¼ÉϵijÌÐò´íÎó¡£ÓÐʱºò£¬ÕâЩ´íÎóÒ²¿ÉÄÜÊdzÌÐòÉè¼ÆÊ¦µÄÊèºö¡£
È¥Äê΢Èí Passport ¾ª±¬µÄ°²È«Â©¶´¾ÍÊÇÕâÀàµÄÂß¼´íÎó¡£ÔÚʹÓÃÕßÖØÉèÃÜÂëµÄ²½ÖèÖЬ£¬Ô±¾ÊÇÓÐһϵÁв½ÖèÒªÍê³É£¬Ã¿Ò»²½¶¼ÒÀÀµÉÏÒ»²½µÄ½á¹ûÀ´½øÐУ¬ÒÔ±£³Ö³ÌÐòÖ´ÐÐʱµÄ״̬ (State)¡£¿ÉÄÜÊÇÔÚ³ÌÐò¸üа汾Öгö´í£¬»òÕßÊÇÆäËüµÄ¿ª·¢¹ý³Ì·¢ÉúÎÊÌ⣬µ¼ÖÂÔÀ´Éè¼ÆµÄÂ߼δÄܱ£³Ö£¬ÈκÎÈ˶¼¿ÉÖ±½ÓºöÂÔÇ°ÃæµÄÈý¸ö²½Ö裬¶øÖ±½ÓÌøµ½×îºóÒ»²½È¥ÖØÉèÈÎÒâÒ»¸öÕ˺ŵÄÃÜÂë¡£
ÆäËüÀàËÆµÄÎÊÌ⻹Óкܶ࣬ÔçÆÚ΢Èí IIS É쵀 Unicode Óë superfluous decode ©¶´Ò²ÊÇÏàËÆµÄÇé¿ö¡£´ËÍ⣬Âß¼´íÎóÒ²¿ÉÄÜÊÇ´æÓжñÒâµÄ¡£ÀýÈ磬ÔÚÏßÒøÐгÌÐò¿ª·¢Éè¼ÆÈËÔ±ÔÚÔÚÏßÒøÐÐÀïÔ¤ÏÈÂñÉèºóÃųÌÐò£¬µÈ´ýÀëÖ°Ö®ºó±ãÄÜÀûÓḺóÃÅ¡¹´Óʲ»·¨¹´µ±¡£
ʵ¼ÊÉÏ£¬ÔÚÕû¸öÈí¼þ¿ª·¢µÄÉúÃüÁ÷³ÌÖУ¬Ð´Ò»¸öÓ¦ÓóÌÐòʱËù³öÏÖ°²È«ÎÊÌâÊýÄ¿£¬ÏòÀ´¸ßÓÚÆäËü½×¶Î¡£ÎÒÃÇÏÈÇ°Ôø¼òµ¥ÃèÊöÁ˼¸ÖÖ³£¼ûµÄ´íÎ󣬽ÓÏÂÀ´¾ÍÒª¿´¿´ÈçºÎÃÖ²¹£¬Èô»¹ÊÇÀ´²»¼°¸ü¸ÄÏÖÓеÄÈí¼þ¿ª·¢ÉúÃüÁ÷³Ì£¬×¢ÖسÌÐòÉè¼Æ°²È«Óë¼Óǿʺó¼ì²â£¬¾Í³ÉÁËÍöÑò²¹ÀÎÓÌδÍíÒÓµÄ×÷·¨¡£
½â¾ö·½°¸
ÒªÔö½øÈí¼þ¿ª·¢ÔÚ³ÌÐòʵ×÷½×¶ÎµÄ°²È«ÐÔ£¬½ÌÓý³ÌÐò¿ª·¢ÈËÔ±¿ª·¢°²È«Ó¦ÓóÌÐòµÄÖØÒªÐÔ£¬ÒÔ¼°ÈçºÎÕýÈ·µØÐ´³ö°²È«µÄ³ÌÐòÊÇÖα¾Ö®µÀ¡£ÆäËüµÄ¸¨Öú´ëÊ©°üÀ¨Ìṩ³ÌÐò׫дָÄÏÓëÒ»°ã»¯µÄ°²È«Ä£¿é£¬ÀýÈ磬Êý¾ÝÑéÖ¤½Ó¿Ú (Input Validation API)£¬Í¬Ê±Ç¿»¯°²È«²âÊÔÓë¼ì²éÔʼ³ÌÐò´úÂëµÈ²½Öè¡£
ÔÚ³ÌÐò¿ª·¢ÈËÔ±µÄ½ÌÓý·½Ã棬´«ÊÚ¿ª·¢¼¼ÊõÖ®Í⣬ҲÐèÈóÌÐò¿ª·¢ÈËÔ±Á˽⿪·¢°²È«³ÌÐòµÄ±ØÒªÐÔ¡£ÁíÍ⣬Õë¶ÔÏîÄ¿¹ÜÀíÈËÔ±Ò²±ØÐë½ÌÓýËûÃÇ£¬ÈçºÎÄÜ×·×ÙÇÒ¿ØÖÆÕû¸öÓ¦ÓóÌÐò¿ª·¢Á÷³ÌÖеĸ÷ÏȫÎÊÌâ¡£ Ìṩ³ÌÐò׫дָÄÏ (Guideline) ÊÇÈóÌÐò¿ª·¢ÈËÔ±ÒÀÒ»¶¨µÄ¹æÔò¿ª·¢³ÌÐò£¬²¢ÇÒÔö¼ÓÓ¦ÓóÌÐòµÄ¿Éά»¤¶È£¬Í¬Ê±½µµÍÒþ²ØµÄ°²È«Î£»ú¡£ÔÚ´ËÔÔòÏ£¬Ò²ÈÝÒ×ÈýÓÊܵÄÈ˼ì²éÈí¼þÊÇ·ñ·ûºÏÒ»¶¨µÄÒªÇó¡£
¶ÔÓÚ´óÐÍÆóÒµÀ´Ëµ£¬Ìṩһ°ã»¯µÄ°²È«Ä£¿é¸üÎªÖØÒª¡£Ò»Ð©°²È«·½ÃæµÄÄ£¿é¿ÉÒÔÓÉÒ»×éÈËÔ±¿ª·¢Î¬»¤ÔÙ½»¸¶¸øÓèÆäËüµÄÑз¢ÍŶÓʹÓã¬Èç´Ë£¬²»Ö»ÄÜÌá¸ß¿Éά»¤ÐÔ£¬Ò²ÄܱÜÃâ³ÌÐò¿ª·¢ÈËÔ±×ÔÒÔΪÊǵÄÌìÂíÐпգ¬Æä±³ºóËù¿ÉÄܲúÉúµÄ°²È«ÎÊÌâ¡£
´ÓÒÔÍùÆóÒµ¶àÒÀÀµÄÚ²¿Æ¸¹ÍÈËÔ±¿ª·¢ËùÐèµÄÓ¦ÓÃÈí¼þ£¬·¢Õ¹ÖÁ½ñÈÕÔ½À´Ô½¶àµÄ¹«Ë¾Ñ¡Ôñ½«Èí¼þ¿ª·¢ÒµÎñίÍ⣬ÔÚÕâÑùµÄ¸Ä±äÏ£¬ÈôÒªÍ×ÉÆ¿ØÖÆÈí¼þÖÊÁ¿±¾À´¾ÍÏ൱À§ÄÑ£¬ÏÖÔÚÓÖÒª¿¼ÂDZÜÃâÓë¹Ü¿ØÈí¼þµÄ°²È«ÎÊÌ⣬Èç¹û²»×Ô¸ù±¾µÄ¿ª·¢ÉúÃüÁ÷³ÌÏÂÊÖ£¬¿ÉÄÜ»¹ÊÇ»áÍ£Áô¡¸ÕÒ¶´²¹¶´¡¹¶øÆ£ÓÚ±¼ÃüµÄÇé¿ö¡£Ï*Ü£¬ÎÒÃǽ«½øÒ»²½ÌÖÂÛ²âÊÔÓ¦ÓóÌÐò°²È«³Ì¶ÈµÄ·½·¨£¬Ìṩ¸÷λ¶ÁÕ߲ο¼¡£
ËÑË÷¸ü¶àÏà¹ØÖ÷ÌâµÄÌû×Ó:
Ó¦ÓóÌÐò