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 ÖÐͬÑùÒ²»á±£´æ¡£×ðÁú¿­Ê±WAF²úÆ·ÓÐרÃÅAPI·À»¤Ä£¿é £¬Í¨¹ý¸Ã·À»¤Ä£¿éÓëWAF¹¦Ð§ÏàÍŽá¿É¶ÔWeb APIµÄÎÊÌâ¾ÙÐмì²âÓë·À»¤ £¬Web API·À»¤Ä£¿é¼°API¹¥»÷¼ì²âÉϱ¨ÊÂÎñ £¬ÈçÏ£º
 



×ðÁú¿­Ê±WAF²úƷ˳Ӧ´ÓСÐÍÆóÒµµ½´óÐÍÊý¾ÝÖÐÐĵÈÖÖÖÖ¹æÄ£ºÍ¿Í»§ÓªÒµÄ£×ÓϵÄÍøÂçÇéÐÎ £¬²¢ÆÕ±éÓ¦ÓÃÓÚ½ðÈÚ¡¢ÔËÓªÉÌ¡¢Õþ¸®¡¢ÄÜÔ´¡¢´óÆóÒµ¡¢Ñ̲ݡ¢Ë°Îñ¡¢½»Í¨¡¢ÎÀÉú¡¢½ÌÓýµÈÐÐÒµÁìÓò¡£

×ðÁú¿­Ê±×÷ΪÖйúÐÅÏ¢Çå¾²ÐÐÒµµÄÁ캽ÆóÒµ £¬Ò»Ö±³Ð¼Ì³ÏÐźÍÁ¢Ò쾫Éñ £¬ÖÂÁ¦ÓÚÌṩ¾ßÓйú¼Ê¾ºÕùÁ¦µÄ¡¢×ÔÖ÷Á¢ÒìµÄWAFÇå¾²²úÆ·¡£×ðÁú¿­Ê±WAF²úÆ·ÈëΧGartnerħÁ¦ÏóÏÞ £¬Æ¾Ö¤µÚÈý·½Frost& SullivanȨÍþ»ú¹¹WAFÊг¡Õ¼ÓÐÂÊÒ»Á¬5ÄêÅÅÃûµÚÒ» £¬×ðÁú¿­Ê±WAF²úÆ·Ò»Á¬¶àÄêÔÚ´óÖйúÇøWAFÊг¡Ñ¹µ¹Ò»ÇС£