Drupal Ô¶³Ì´úÂëÖ´Ðзì϶°²È«¹«¸æ

°ä²¼¹¦·ò 2019-02-22

·ì϶±àºÅºÍ¼¶±ð


CVE±àºÅ£ºCVE-2019-6340 £¬Î£ÏÕ¼¶±ð£ºÑϳÁ £¬ CVSS·ÖÖµ£º¹Ù·½Î´ÆÀ¶¨


Ó°ÏìÁìÓò


ÊÜÓ°Ïì°æ±¾£º 

·ì϶ӰÏìDrupal 8.6.x¡¢Drupal 8.5.x ¼° Drupal 7ÖеIJ¿ÃÅ×é¼þ¡£¾ßÌå°æ±¾ÐÅÏ¢ÈçÏ£º

Drupal 8.6.9 ¼°ÒÔϰ汾

Drupal 8.6.10 ¼°ÒÔϰ汾

Ó°Ïì×é¼þ

RESTful Web Services

JSON:API

Link

Metatag

Video

Paragraphs

Translation Management Tool

Font Awesome lcons


·ì϶¸ÅÊö


2ÔÂ20ÈÕ £¬Drupal ¹Ù·½Åû¶ÁËÒ»¸ö Drupal µÄÔ¶³ÌºÅÁîÖ´Ðзì϶ £¬·ì϶ÊÇÓÉDrupal δ¶ÔRESTful WebµÄÊý¾Ý½øÐÐÑϸñЧÑéÔì³É¡£ÈôÊÇÍøÕ¾¿ªÆôÁËRESTful Web·þÎñ £¬²¢ÇÒ½ÓÊÜPATCH ¡¢POSTÒªÇó £¬»òÕ¾µãÖпªÆôÁËÆäËûweb·þÎñÄ£¿é £¬½«»á³öÏÖ·´ÐòÁл¯ÎÊÌâ £¬½ø¶øÔì³É´úÂëÖ´ÐС£


ƾ¾ÝDrupal µÄÅäÖà £¬´Ë·ì϶¿ÉÄܲ»±ØÒªÈκÎȨÏÞ¼´¿É´¥·¢¡£µ«ÊÇÈôÊDZ»ÀûÓà £¬¹¥»÷ÕßÔòÄܹ»Ö±½ÓÔÚWeb·þÎñÆ÷ÉÏÖ´ÐÐËÁÒâPHP´úÂë £¬Ôì³É·þÎñÆ÷±»ÈëÇÖ¡¢Óû§ÐÅϢй¶µÈºó¹û¡£


RESTful ·þÎñĬÈϲ»¿ªÆô £¬´ó´ó½µµÍ·ì϶·çÏÕ¡£Îª°²È«Æð¼û £¬½¨ÒéʹÓÃDrupal µÄÓû§ÊµÊ±½øÐа汾Éý¼¶¡£


·ì϶ϸ½Ú


1. ·ì϶¶¨Î»

·ì϶¹«¸æÖ¸³öÁË Drupal 8 ÔÚ¿ªÆôÁË RESTful Web Services Ä£¿é £¬Í¬Ê±ÔÊÐíÁË PATCH / POST ²½ÖèÒªÇóºó £¬Äܹ»Ôì³É´úÂëÖ´Ðзì϶¡£


ƾ¾Ý commit log£¨https://github.com/drupal/core/commit/24b3fae89eab2b3951f17f80a02e19d9a24750f5£©Äܹ»¶¨Î»µ½·ì϶µÄ´¥·¢Ô­ÒòÔÚÓÚ·´ÐòÁл¯µÄ²Ù×÷£º


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾



Äܹ»´§Ä¦Ó¦¸ÃÊÇÔÚ½øÐÐ REST API ²Ù×÷µÄ¹ý³ÌÖÐ £¬options ²ÎÊýµÄÄÚÈÝ´øÈëµ½ unserialize º¯Êýµ¼ÖµÄ¡£Í¨¹ý diff Äܹ»·¢ÏÖ LinkItem.php ºÍ MapItem.php ¶¼Êܵ½Ó°Ïì £¬ÕâÀï´Ó LinkItem À´ÏòÉÏÍÚ¾ò·ì϶µã¡£


²é¿´ core\modules\link\src\Plugin\Field\FieldType\LinkItem.php£º


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


ÊáÀíÁËÆäÕû¸öŲÓÃÁ´ £¬´Ó REST ÒªÇóÆðÍ· £¬ÏÈͨ¹ýÓû§´«ÈëµÄ JSON µÄ _links.type »ñÈ¡ÁËÆä¶ÔÓ¦µÄ Entity £¬ÔÙ»ñÈ¡ Entity ÄÚµÄ Fields Áбí £¬±éÀúÕâ¸öÁбíµÃµ½ key £¬´ÓÓû§´«ÈëµÄ JSON ÄÚÈ¡³ö key £¬Æ´½Ó³ÉΪ field_item:key µÄ´ó¾Ö£¨¹ý³ÌÂÔ£© £¬×îÖÕÔÚ getDefinition ÄÚ²éÕÒÁË definitions Êý×éÄÚµÄ×ֶνç˵ £¬µÃµ½Ò»¸ö¶ÔÓ¦µÄ Field µÄÊ·ý¶ÔÏó £¬¹ý³Ì´óÌåÈçÏ£º


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


½Ó×Å FieldNormalizer µÄ denormalize ²½ÖèŲÓÃÁË Field µÄ setValue ²½Öè¡£


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


Ò²¾ÍÊÇ˵ £¬ÎÒÃÇÈôÊÇÄܹ»½« $field_item ½ÚÔìΪ LinkItem »òÕß MapItem £¬¼´¿É´¥·¢·´ÐòÁл¯¡£


2. ´¥·¢µã»ú¹Ø
ÎÒÃÇÔÚ Drupal ºó¶ÜÅäÖúà RESTful Web Service ²å¼þ £¬Ñ¡ÔñÒ»¸öÄܹ»½øÐÐ POST

µÄ²Ù×÷¡£ÎªÁ˾¡¿ÉÄÜ·ÂÕÕÍøÕ¾ÖÎÀíÔ±µÄÅäÖà £¬ÎÒÃÇÕâÀïÔÊÐí¶ÔÓÚ/user/registerµÄ POST²Ù

×÷¡£ÓÚÇéÓÚÀí £¬Óû§×¢²á´¦±ØÈ»Äܹ»×÷ΪÄäÃûÓû§À´½øÐвÙ×÷¡£¿ªÆô/user/register £º


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


ÉèÖÃÔÊÐíÄäÃûÓû§ÀûÓà POST À´½Ó¼û /user/register ¡£


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


ÉÏÎÄÖÐÌáµ½ £¬ÎÒÃDZØÒªÒ»¸öEntityÄÚ´æÔÚLinkItem Field¡£Í¨¹ý¶ÔÓÚEntityµÄ²éÕÒ £¬¶¨Î»µ½MenuLinkContentºÍShortcutʹÓÃÁËLinkItem £¬ÀûÓÃShortcutÀ´½øÇ°½øÒ»²½µÄ²âÊÔ¡£


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


Shortcut µÄ _links.type Ϊ http://127.0.0.1/rest/type/shortcut/default £¬Äܹ»ÔÚµ¥²½µÄʱ³½ÕÒµ½ £¬¹ý³Ì²»Ðð¡£Ïò /user/register ·¢ËÍ POST ÒªÇó £¬Í¬Ê±ÔÚ PHPStorm ÄÚ½«¶ÏµãÏÂÔÚ


ore\modules\hal\src\Normalizer\FieldItemNormalizer.php µÄ denormalize º¯Êý£º


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


Äܹ»·¢ÏÖ £¬ÔÚŲÓà setValue ²½ÖèµÄÏÖ³¡ £¬$field_itemΪLinkItem¡£¸úÈësetValue ²½Öè £¬Æ¾¾ÝÂß¼­ £¬ÈôÊÇ$valuesΪһ¸öÊý×é¡£ÇÒ$values['options']´æÔÚ £¬ÄÇô¾ÍÖ´Ðз´ÐòÁл¯²Ù×÷¡£ÎÒÃÇÅú¸ÄpayloadΪ¼´¿É´¥·¢·´ÐòÁл¯¡£


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


¹¥»÷ÕßÀûÓô˷´ÐòÁл¯Äܹ»ÔÚ·þÎñÆ÷ÉÏÖ´ÐÐËÁÒâ´úÂë¡£


½¨¸´½¨Òé


½¨¸´¹æ»®ÈçÏ£º

Drupal 8.6.x°æ±¾Éý¼¶µ½8.6.10

Drupal 8.5.x»ò¸üÔçÆÚ°æ±¾°æ±¾Éý¼¶µ½8.5.11°æ±¾

Drupal 7ÔÝÎÞ¸üÐÂ

»º½â´ëÊ©ÈçÏ£º

½ûÓÃRESTful Web ServicesÄ£¿é

ÅäÖ÷þÎñÆ÷²»ÔÊÐíPOST/PATCHÒªÇó


²Î¿¼Á´½Ó

https://www.drupal.org/sa-core-2019-003