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Êг¡Ñ¹µ¹Ò»ÇÐ ¡£