Der Berechtigungsverarbeitungsmechanismus von WordPress wird hauptsächlich durch die Bereitstellung verschiedener Funktionen für verschiedene Rollen implementiert. Wenn die Store-Administratorrolle definiert ist, werden edit_users dieser Rollenfunktion zugewiesen, damit sie dies tun können Verwalten Sie die Kundenkonten des Shops direkt. Der gesamte Berechtigungszuweisungsprozess findet während des Installationsprozesses des Plug-Ins statt. woocommerce/includes/class-wc-install.php:
//Shop manager role.add_role( 'shop_manager', // Internal name of the new role 'Shop manager', // The label for displaying array( // Capabilities ⋮ 'read_private_posts' => true, 'edit_users' => true, 'edit_posts' => true, ⋮ ));
Die Rollenberechtigungsinformationen werden in der Datenbank als WordPress-Kerneinstellungen gespeichert, was bedeutet, dass die Benutzerrolle jetzt sogar unabhängig vom Plugin ist Wenn das Plugin nicht aktiviert ist, hat es keine Auswirkungen auf die zugehörigen Rollenberechtigungen.
Wenn ein authentifizierter Benutzer versucht, andere Benutzerinformationen zu ändern, wird die Funktion current_user_can() aufgerufen und stellt dann sicher, dass nur privilegierte Benutzer diesen Vorgang ausführen können. Beispiel für einen Funktionsaufruf Current_user_can():
$target_user_id= $_GET['target_user_id'];if(current_user_can('edit_user',$target_user_id)) { edit_user($target_user_id);}
Die Verifizierungslogik des Aufrufs lautet wie folgt: Dieser Benutzer möchte die ID $target_user_id verwenden, um einen bestimmten Benutzer zu ändern. Hat er die Berechtigung zur Ausführung?
In der Standardkonfiguration ermöglicht die Funktion edit_users Benutzern mit Berechtigungen (z. B. Shop-Administratoren), andere Benutzer, sogar Administratorbenutzer, zu bearbeiten und dann Vorgänge wie Kennwortaktualisierungen durchzuführen. Aus Sicherheitsgründen muss WooCommerce angeben, ob der Shop-Administrator Benutzer bearbeiten kann, daher muss das Plug-in Meta-Berechtigungen hinzufügen. Metafunktionen können von current_user_can() aufgerufen werden. Der von der Funktion im Standardverhalten zurückgegebene Wert ist wahr, aber der von der Meta-Berechtigungsfunktion zurückgegebene Wert kann bestimmen, ob der aktuelle Benutzer einen solchen Vorgang ausführen kann. Unten ist der abstrakte Funktionscode des WooCommerce-Meta-Berechtigungsfilters aufgeführt:
function disallow_editing_of_admins( $capability, $target_user_id ) { // If the user is an admin return false anddisallow the action if($capability == "edit_user"&& user_is_admin($target_user_id)) { return false; } else { return true; }}add_filter('map_meta_cap', 'disallow_editing_of_admins');
Wenn beispielsweise current_user_can('edit_user', 1) aufgerufen wird, ermittelt der Filter, dass die ID 1 ist ($ target_user_id ) ist ein Administrator und bestimmt anhand des Ergebnisses, ob dem Benutzer die Bedienung gestattet werden soll.
Standardmäßig können nur Administratoren Plug-Ins deaktivieren. Diese Sicherheitslücke ermöglicht es dem Shop-Administrator jedoch, jede beschreibbare Datei auf dem Server zu löschen, sodass wir verhindern können, dass WordPress das Plug-in lädt, indem wir die Hauptdatei von WooCommerce, woocommerce.php, löschen.
Diese Sicherheitslücke beim Löschen von Dateien besteht in der Protokollierungsfunktion von WooCommerce. Die Protokolle werden im wp-content-Verzeichnis in Form von .log-Dateien gespeichert. Wenn der Store-Administrator eine Protokolldatei löschen möchte, muss er den Dateinamen als GET-Parameter übergeben. Der unten gezeigte Codeausschnitt ist der anfällige Teil:
class WC_Admin_Status{ public static function remove_log() { ⋮ $log_handler = newWC_Log_Handler_File(); $log_handler->remove(wp_unslash($_REQUEST['handle']));}
class WC_Log_Handler_File extends WC_Log_Handler{ public function remove($handle) { ⋮ $file = trailingslashit(WC_LOG_DIR) .$handle; ⋮unlink($file);
Das Problem hierbei ist, dass der Dateiname ($handle) zum Protokollverzeichnis (wp-content/wc-logs/) hinzugefügt wird. und dann an die Funktion unlink() übergeben. Beim Festlegen von „$handle../../plugins/woocommerce-3.4.5/woocommerce.php“ wird die Datei wp-content/wc-logs/../../plugins/woocommerce-3.4.5/woocommerce php wird entfernt und führt zur Deaktivierung von WooCommerce.
Das obige ist der detaillierte Inhalt vonSo beheben Sie die Sicherheitslücke beim Löschen willkürlicher Dateien im WordPress-Plugin WooCommerce. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!