APIÍþв·À»¤Êµ¼ùÖ®ÌìÇåWebÓ¦ÓÃÇå¾²Íø¹ØÏµÍ³
Ðû²¼Ê±¼ä 2018-06-25Web 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Êг¡Ñ¹µ¹Ò»ÇС£


¾©¹«Íø°²±¸11010802024551ºÅ