APIÍþв·À»¤Êµ¼ÊÖ®ÌìÇåWebÀûÓð²È«Íø¹ØÏµÍ³

°ä²¼¹¦·ò 2018-06-25
Ëæ×Å Web 2.0 ʱÆÚµÄµ½À´ £¬ÓÉÓÚ JSON Êý¾ÝÌåʽµ¥Ò» £¬ÈÝÒ׿ª·¢¡£¿ª·¢Õ߸üϲ»¶Ê¹Óà JSON ÌåʽÀ´±àд API £¬Web API Ò²³öÏÖ·¢×÷ÐÔµÄÔö³¤¡£³ö¸ñÊǽü¼¸ÄêÀ´ £¬Ëæ×ÅÉ罻ýÌåºÍÔÚÏß·þÎñµÄ·¢Õ¹ £¬·þÎñµÄÌṩÕ߸üϲ»¶¶Ô±íÌṩʢ¿ªµÄ Web API ¹©¿ª·¢ÕßŲÓ᣿ª·¢Õßͨ¹ýÍøÂçŲÓà Web API ʵÏֵǼÈÏÖ¤¡¢ÐÂÎÅÍÆËÍ¡¢¶©µ¥Ö§¸¶µÈÖ°ÄÜ £¬API Ö®¼äµÄÏ໥ŲÓü«´óµÄÌá¸ßÁË¿ª·¢Ð§ÄÜ £¬¿ª·¢ÕßÄܹ»Ôڶ̹¦·òÄÚʵÏÖÀûÓõÄÉè¼ÆÓ뿪·¢¡£Ö»ÓзþÎñÌṩÕß¶Ô±í¹«¿ªÁË API £¬¿ª·¢Õß¾ÍÄܹ»ºÜµ¥Ò»µÄ½«·þÎñ¼¯³É½ø×Ô¼ºµÄÀûÓà £¬Ö±½ÓµÄÏíÊܸ÷þÎñ £¬·ÖÆçµÄ·þÎñÌṩÕß¼¯ÖÐÔÚһ·×êÓª¹²Í¬·¢Õ¹¡£

Web API ÊÇ֧ʹÓà HTTP ºÍ̸½øÐÐÍøÂçŲÓõÄAPI£¨Application Programming Interface£© £¬ÊÇÒ»¸öÀûÓÃµÄ±í²¿½Ó¿Ú¡£¶ÔÓÚÒ»¸öÀûÓ÷¨Ê½ £¬ÈËÃÇͨ³£²»¹Ø×¢ÄÚ²¿½á¹¹ÊµÏÖϸ½Ú £¬Ö»¹ØÇÐ±í²¿Ö°ÄܵÄʹÓá£ÄÇôŲÓÃÀûÓ÷¨Ê½ÊµÏÖij¸öÖ°ÄܵĹ淶²½Öè¼´¿É³ÆÖ®Îª·¨Ê½µÄ API¡£

¡ôWeb API °²È«Òþ»¼¡ô

ÓÉÓÚ Web APIµÄ¿í·º±é¼°ÓëʹÓà £¬Ó봫ͳµÄ Web °²È«ÎÊÌâÒ»Ñù £¬Ò²´æÔÚÃô¸ÐÐÅÏ¢±»¶ñÒâ»ñÈ¡ £¬Óû§È¨ÏÞ±»¶ñÒâʹÓõÈÎÊÌâ¡£³ýÁËÆøÏóÔ¤±¨¡¢µØÀíµØÎ»µÈÕâÀ๫¹²·þÎñÐÅÏ¢µÄÌṩ £¬ÏÕЩËùÓÐµÄ API ·þÎñ¶¼´æÔÚÓû§ÈÏÖ¤¡¢È¨ÏÞ½ÚÔìµÈ £¬ÒÔ±ãÓÚ·þÎñÌṩÉ̽øÐÐÖÎÀíºÍÊÕ·Ñ¡£

½üÄêÀ´Ëæ×ÅÒÆ¶¯ÀûÓá¢ÔƶËÀûÓõı鼰 £¬Web Õ¾µãÓë Web API ÅäÌ׿ª·¢µÄÇé¾°Ô½À´Ô½¶à £¬API  °²È«ÎÊÌâÒ²ÊÇÓëÈÕ¾ãÔö¡£Èç¹û Web  API ȱµã±»¶ñÒâÀûÓà £¬Óû§ÒþÖÔ±»¹«¿ª»òÕßµÁÓà £¬ÄÇô·þÎñÌṩÕß½«»áʧȥÐÅÓþ¡¢Ê§È¥Óû§ £¬¿ÉÄܵ¼Ö·þÎñÌṩÕßÆÆ²úµ¹¹Ø £¬Ê¼ÖÕÎÞ·¨ÔÙ´ÎÓ®µÃÓû§µÄÐÅÀµ¡£

ÀýÈçInstagram ÔÚ2017ÄêÓÉÓÚ API ´æÔÚ bug £¬²»ÉÙÈÏÖ¤Óû§¶¼·¢ÏÖ×Ô¼ºµÄÓ×ÎÒ×ÊÁÏ£¨Ô̺¬ÓÊÏ䵨ַ¡¢µç»°ºÅÂëµÈ£©¿ÉµÈÏб»ËûÈË»ñÈ¡¡£Ê¼þ²úÉúºó £¬Instagram ¹ÌÈ»²¢Î´¶Ô·ì϶ϸ½Ú×ö¹ý¶àÚ¹ÊÍ £¬Ö»ÊǰµÊ¾·ì϶ÒѾ­½¨¸´¡£Instagram ¶ÔËùÓеÄ×¢²áÓû§·¢Á˵ç×ÓÓʼþ £¬ÌáÐÑËûÃÇÌá·ÀÕâ´Î¹¥»÷ £¬²¢Ó×ÐÄ¿ÉÄÜ»á³öÏֵĴ¹µö¹¥»÷ £¬»¹ÓÐÄÇЩͨ¹ýÉ繤¼¿Á©£¨Óʼþ £¬¶ÌÐÅ £¬µç»°µÈ·½Ê½£©Ëù´øÀ´µÄ¹¥»÷¡£

¡ñ °²È«Òþ»¼Ò»£º
¿Í»§¶ËÓë·þÎñÆ÷Ö®¼äµÄ¼àÌýÓëÐá̽

Web API ºÍͨ³£µÄ Web Õ¾µãÒ»Ñù £¬Í¨¹ý HTTP ºÍ̸ÔÚ»¥ÁªÍøÉϽøÐÐÊý¾Ý´«Êä £¬ÓÉÓÚHTTPºÍ̸×ÔÉí²¢Î´ÓÐÈκμÓÃܵÄÉè¼Æ £¬Òò¶ø²»Äܱ£ÕÏͨѶ¹ý³ÌÖв»±»¼àÌý¡£Ô½À´Ô½¶àµÄ¹«¹²Wi-Fi±»ºÚ¿Í¶¢ÉÏ £¬Í¨³£ºÚ¿ÍÉè·¨ºÍÊܺ¦Óû§ÏνÓÔÚͳһ¾ÖÓòÍøÄÚ £¬Ö»Óдò¿ªÐá̽¼àÌý¹¤¾ß £¬Êܺ¦ÕßÔÚÍøÂçÖеĴ«Êä¹ýµÄÃô¸ÐÐÅÏ¢½«±»ºÚ¿Í»ñÈ¡¡£ÈôÊDZ»ÇÔÈ¡µÄÐÅÏ¢ÖÐÖ±½Óº¬ÓÐÓ×ÎÒÐÅÏ¢ºÍÃÜÂë £¬ºÚ¿Í¿ÉÄÜͨ¹ýÕâ¸öÐÅÏ¢Ö±½ÓµÇ¼Êܺ¦È˵ÄÓû§ £¬½øÒ»²½¿ÉÄÜÔì³ÉÐÅϢй¶»ò²Æ¸»Ëðʧ¡£Áí±íÒ»ÖÖ £¬ºÚ¿ÍÒ²¿ÉÄܽٳÖÊܺ¦ÕßÓû§µÄ»á»° £¬·þÎñÆ÷½«ÎÞ·¨·Ö±æÊܺ¦Õß»¹ÊǺڿÍ £¬ºÚ¿ÍÄܹ»½øÐÐÊܺ¦ÕßȨÏÞÁìÓòÄÚµÄËùÓвÙ×÷¡£

Web API ÔÚͨѶʱʹÓÃÁË HTTPS ºÍ̸ͨѶ £¬½«¼«´ó¼ÓÇ¿»á»°µÄ°²È«ÐÔ¡£ÄÇôÊDz»ÊÇÖ»ÓÐʹÓÃÁËHTTPSºÍ̸ͨѶ¾ÍÄܱ£ÕϻỰ²»±»½Ù³Ö £¬Ãô¸ÐÐÅÏ¢²»±»»ñÈ¡ÄØ£¿´ð°¸ÊÇ·ñ¶¨µÄ¡£

2014Äê4Ô·¢×÷µÄHeartbleed°²È«·ì϶ £¬µ¼Ö¹¥»÷Õß¿ÉÄÜ»ñÈ¡µ½·þÎñÆ÷Éϱ£ÁôµÄÃ÷ÎÄÐÅÏ¢¡£Áí±í £¬Ê¹Óà HTTPS¼ÓÃÜͨѶʱ £¬Ò²ÓпÉÄÜ´æÔÚÖÐÑëÈ˹¥»÷ £¬Òò¶ø±ØÒª±£ÕÏʹÓÃÓÐЧµÄSSLÖ¤Êé½øÐмÓÃÜÈÏÖ¤¡£

¡ñ °²È«Òþ»¼¶þ£º
ʹÓÃä¯ÀÀÆ÷½Ó¼ûAPIʱ²úÉúµÄ°²È«Òâ±í

Web API ÊÇרÃÅΪ·¨Ê½¼äÏ໥ŲÓöøÉè¼ÆµÄ £¬ÈôÊÇÒâ±íµÄʹÓÃä¯ÀÀÆ÷À´½Ó¼û Web API ÔòÒ²¿ÉÄÜ´æÔÚ°²È«ÎÊÌâ¡£

? XSS¹¥»÷

XSS¹¥»÷½«Óû§µÄ·¸·¨ÊäÈëµÄJavaScript¾ç±¾ÔÚÏìÓ¦Ò³ÃæµÄHTMLÖÐÖ´ÐС£¹¥»÷Õß¿ÉÄÜÀûÓÃXSS·ì϶½Ù³Ö»á»°¡¢µÁÈ¡Cookie¡¢´Û¸ÄÒ³ÃæµÈ²Ù×÷¡£ÔÚWeb API ·µ»Ø JSON Êý¾Ýʱ £¬ÈôÊÇContent-Type ÉèÖò»ºÏÀí±ã»áÔì³É XSS ·ì϶¹¥»÷¡£

µ±·þÎñÆ÷·µ»Ø¸Ã JSON Êý¾Ýʱ £¬½«ÏìӦͷÖеÄContent-TypeÉèÖÃΪtest/html »òÕßÉèÖÃΪContent-Type: text/plain£¨IEÏÂÄܹ»Ö´ÐУ©Ê± £¬¸Ã JSON Êý¾Ý±»Ú¹ÊÍΪ HTML ´úÂë £¬ä¯ÀÀÆ÷Ö±½ÓÖ´ÐÐÁËÆäÖеÄJavaScript´úÂë¡£

? CSRF¹¥»÷

Web API ·À»¤CSRF ¹¥»÷µÄ²½ÖèºÍͨÀýµÄ Web ÍøÕ¾²¢Ã»ÓÐʲô·ÖÆç¡£Í¨³£±ØÒª²»ÈÝͨ¹ýGET²½ÖèÅú¸Ä·þÎñ¶ËµÄÊý¾Ý £¬¶øÊÇѡȡ POST¡¢PUT¡¢DELETEµÈ²½Öè½øÐг߶Ȼ¯²Ù×÷¡£¼´±ãÉèÖÃÁ˲»ÔÊÐíGET·½Ê½Åú¸Ä·þÎñÆ÷Êý¾Ý £¬CSRFÒÀÈ»Äܹ»Í¨¹ýForm±íµ¥Ê¹ÓÃPOST²½ÖèÌáÒé¹¥»÷ £¬²¢ÇÒ²»ÊÜͬԴսÊõµÄÓ°Ïì¡£

¡ñ °²È«Òþ»¼Èý£º
ÒµÎñ²ãÃæµÄ¶ñÒâ½Ó¼û

? ´Û¸ÄID·¸·¨»ñÈ¡Óû§Ãô¸ÐÐÅÏ¢

´Û¸ÄÒªÇó²ÎÊý»ñÈ¡Ãô¸ÐÐÅÏ¢ £¬¹¥»÷ÕßÄܹ»Í¨¹ýÅú¸Ä¿Í»§¶Ë·¢Ë͵½·þÎñÆ÷µÄ²ÎÊý £¬Ì°Í¼»ñȡȨÏÞÁìÓòÖ®±íµÄÃô¸ÐÐÅÏ¢¡£ÀýÈçʹÓÃÒÔÏ´ó¾ÖµÄ

URL:
https://api.example.com/v1/user/123?info=email

´Ó´ó¾ÖÉÏÀ´¿´ £¬URLÖеÄ123¿ÉÄÜΪÓû§ID £¬Èç¹ûÌá½»¸ÃURLÒªÇóÄܹ»»ñÈ¡µ½IDΪ123Óû§µÄemailÐÅÏ¢ £¬ÄÇô¹¥»÷Õßͨ¹ýÅú¸ÄÓû§ID¾ÍÄÜ»ñÈ¡µ½ÆäËûÓû§µÄemailÐÅÏ¢¡£

ÏÂÃæ¾ßÌå·ÖÎöÒ»ÏÂÕâ¸öÎÊÌâ £¬Í¨³£µÄÓÐЩWeb API Éè¼Æ¶ØÄÀ £¬Í¨³£ÔÚURLÀïÃæÊ¹ÓÃuser¹Ø¼ü×Ö»òÕßÔÚ²ÎÊýÀïÃæÊ¹ÓÃemail¹Ø¼ü×ÖÀ´Åú×¢ÒµÎñµÄһЩÓйØÐÅÏ¢¡£Éè¼ÆÕß³õÖÔÊÇΪÁË¿ª·¢ÕßÔ½·¢µ¥Ò»ÁËÈ»µÄʹÓÃAPIÀ´ÊµÏÖ·¨Ê½Å²Óà £¬µ«ÊÇÒ²¸ø¹¥»÷Õß´øÀ´¿É³ËÖ®»ú¡£¹¥»÷Õßͨ¹ý¶ÈÎöURLµÄ´ó¾ÖÌØµã²¢½áºÏ¾ßÌåµÄÒµÎñ¶Ô¹Ø¼ü×Ö½øÐд۸Ä £¬Ì°Í¼·¸·¨»ñÈ¡Ãô¸ÐÐÅÏ¢¡£

? ²ÎÊýÒì³£ÊäÈëµ¼ÖÂδÊÚȨ²Ù×÷

APIµÄÉè¼ÆÕßÔÚÉè¼ÆÖ®³õÊÇΪÁË·½±ãµÄʹÓÃAPI½øÐз¨Ê½¼äµÄŲÓà £¬ÓÐʱ˼¿¼²»µ½Ì«¶àµÄÒì³£ÊäÈëÔì³ÉµÄ°²È«Òþ»¼¡£ÀýÈç³ÛÃûµÄWordPressÍøÕ¾ÏµÍ³ÒѾ­´æÔÚREST API ÓÉÓÚÒì³£ÊäÈëÔì³ÉȨÏÞÈÆ¹ý £¬¹¥»÷ÕßÄܹ»Í¨¹ýAPI´Û¸ÄÍøÕ¾Ò³ÃæÄÚÈÝ¡£

WordPress 4.7ÒÔÉϵİ汾 £¬WordPress REST APIÌṩÁËÒ»×éÒ×ÓÚʹÓõÄHTTP¶Ëµã £¬Óû§Äܹ»ÒÔµ¥Ò»µÄJSONÌåʽ½Ó¼ûÍøÕ¾µÄÊý¾Ý £¬Ô̺¬Óû§ £¬Ìû×Ó £¬·ÖÀàµÈ¡£¼ìË÷»ò¸üÐÂÊý¾ÝÓë·¢ËÍHTTPÒªÇóÒ»Ñùµ¥Ò»¡£API ÌṩÁ˶ÔÓû§¡¢ÎÄÕ¡¢·ÖÀàµÈ·ÖÆçÖ°ÄܵĽÚÔì £¬Ò²Äܹ»Í¨¹ý API ¼ìË÷»òÅú¸ÄÎÄÕ¡£ÔÚWorePress 4.7.0ºÍ4.7.1°æ±¾ÖдæÔÚ·ì϶ £¬ÓÉÓÚȨÏÞ½ÚÔìʧЧµ¼ÖÂÄÚÈÝ×¢Èë»òÅú¸Ä £¬¹¥»÷Õßͨ¹ýÅú¸ÄidΪһ¸öÒì³£Öµ¾ÍÄܹ»ÊµÏÖÍøÕ¾ÄÚÈݵĴ۸Ä £¬¶ø²»±ØÒªÈκÎÈÏÖ¤ÐÅÏ¢¡£

Wordpress ÌṩµÄ²¿ÃÅ API Ö°ÄÜ:

²é¿´ÎÄÕÂÁбí
GET /index.php/wp-json/wp/v2/posts

¼ìË÷ÎÄÕÂ
GET /index.php/wp-json/wp/v2/posts/1

Åú¸ÄÎÄÕÂ
POST /index.php/wp-json/wp/v2/posts/1?id=1
Content-Type: application/json
{"title":"test"}

Ìá½»ÒÔÉÏÅú¸ÄÎÄÕµÄÒªÇó £¬·þÎñÆ÷·µ»Ø401 δÈÏÖ¤¡£

ÈôÊÇÉÔ΢Åú¸ÄÒÔÉϵÄURLÄÚÈÝ £¬ÀýÈçÅú¸ÄΪPOST /index.php/wp-json/wp/v2/posts/1?id=1abc £¬¼´½«id²ÎÊýµÄÖµÓÉ1Åú¸ÄΪ1abc £¬Ôٴγ¢ÊÔÌá½»¡£·þÎñÆ÷·µ»Ø200 OK £¬WordPressÍøÕ¾µÄµÚһƪÎÄÕ±êÌâ±»Åú¸ÄΪtest £¬¹¥»÷³É¹¦¡£

¡ôWAF¼ì²âÓë·À»¤¡ô

Web APIºÍͨ³£µÄÀûÓÃÀàËÆ¶¼ÊÇͨ¹ýHTTPºÍ̸¶Ô±í·þÎñ £¬Í¨³£WebÀûÓÃÖдæÔڵķì϶ºÍȱµã £¬ÔÚWeb API ÖÐͬÑùÒ²»á´æÔÚ¡£GA»Æ½ð¼×WAF²úÆ·ÓÐרÃÅAPI·À»¤Ä£¿é £¬Í¨¹ý¸Ã·À»¤Ä£¿éÓëWAFÖ°ÄÜÏà½áºÏ¿É¶ÔWeb APIµÄÎÊÌâ½øÐмì²âÓë·À»¤ £¬Web API·À»¤Ä£¿é¼°API¹¥»÷¼ì²âÉϱ¨ÊÂÎñ £¬ÈçÏ£º
 292106229195

292106226226

292106225964

GA»Æ½ð¼×WAF²úÆ·ÊÊÓ¦´ÓÓ×ÐÍÆóÒµµ½´óÐÍÊý¾ÝÖÐÐĵȸ÷Àà¹æÄ£ºÍ¿Í»§ÒµÎñÄ£ÐÍϵÄÍøÂç»·¾³ £¬²¢¿í·ºÀûÓÃÓÚ½ðÈÚ¡¢ÔËÓªÉÌ¡¢µ±¾Ö¡¢ÄÜÔ´¡¢´óÆóÒµ¡¢Ñ̲ݡ¢Ë°Îñ¡¢½»Í¨¡¢ÎÀÉú¡¢½ÌÓýµÈÐÐÒµÁìÓò¡£

GA»Æ½ð¼××÷ΪÖйúÐÅÏ¢°²È«ÐÐÒµµÄÁ캽ÆóÒµ £¬Ò»Ïò±ü³Ð³ÏÐźʹ´ÐÂÐÄÁé £¬ÖÂÁ¦ÓÚÌṩӵÓйú¼Ê¾ºÕùÁ¦µÄ¡¢×ÔÖ÷´´ÐµÄWAF°²È«²úÆ·¡£GA»Æ½ð¼×WAF²úÆ·ÈëΧGartnerħÁ¦ÏóÏÞ £¬Æ¾¾ÝµÚÈý·½Frost& SullivanȨÍþ»ú¹¹WAFÊг¡Õ¼ÓÐÂÊÂ½Ðø5ÄêÅÅÃûµÚÒ» £¬GA»Æ½ð¼×WAF²úÆ·Â½Ðø¶àÄêÔÚ´óÖйúÇøWAFÊг¡ÃûÁÐǰé¡£