it-swarm.com.de

Ist wp_nonce_field anfällig, wenn Sie den Aktionsnamen kennen?

Ist wp_nonce_field anfällig, wenn Sie den Aktionsnamen kennen? Ich füge gerade ein verstecktes Feld mit name = dem Namen der Aktion in meinem Formular hinzu, damit mein Plugin es identifizieren kann. Ich möchte wissen, ob Sicherheitsprobleme vorliegen, wenn ich meinen Aktionsnamen "sichtbar" mache.

bearbeiten: Ich automatisiere gerade meinen Workflow für die Formularübermittlung. Wenn es also ein Problem ist, den Aktionsnamen anzuzeigen, kann ich ihn verschlüsseln. Ex. Ich rufe MyFormPlugin::generateAction( 'submitQuestion' ); in meinem Formular auf, um das Aktionsfeld nonce und mein verstecktes "form_action" zu generieren.

class MyFormPlugin{

    public static function generateAction( $action, $referer = true ){
        $nonce_field = wp_nonce_field( self::secured_action( $action ), "mfp_nonce" , $referer , FALSE );
        return $nonce_field.'<input type="hidden" name="form_action" value="'.$action.'"/>';
    }

    public static function secured_action( $action ){
        return md5( $action.'randomsalt');
    }

    public function verify_nonce( $action ){
        $nonce = $_POST[ 'mfp_nonce' ];
        return wp_verify_nonce( $nonce, self::secured_action( $action ) );
    }
}

sieht das sicher aus?

4
yeahman

Kurze Antwort: Nein. Sie können normale Zeichenfolgen für Aktionen verwenden. Wenn Sie sie ändern, ändert sich nichts.

Das Nonce setzt sich aus drei Hauptinformationen zusammen:

  • Zeit: Die aktuelle time() geteilt durch 43200 wird in das Nonce eingearbeitet. Dadurch kann die Nonce alle 12 Stunden gewechselt werden (43200 Sekunden in 12 Stunden).

  • Die von Ihnen bereitgestellte Aktionszeichenfolge. Mehr dazu weiter unten.

  • Die Benutzer-ID. Jeder Benutzer bekommt andere Nonces.

Jetzt werden diese Elemente verkettet, und dann ist die Nonce selbst (ein kleinerer Teil davon) die wp_hash() dieser kombinierten Zeichenfolge. Die Funktion wp_hash() salzt den Hash automatisch, in diesem Fall unter Verwendung der Konstanten NONCE_KEY und NONCE_SALT, die in Ihrer Datei wp-config.php definiert werden sollten und für Ihre bestimmte Site eindeutig sein sollten.

(Beachten Sie, dass WordPress zufällige 64-Zeichen-Werte für die Schlüssel/Salze intern generiert und in der Datenbank speichert, wenn Sie zufällig die Standardeinstellung "Ihre eindeutige Phrase hier einfügen" in dieser Datei verwenden.) Standardwerte als tatsächliche Salze. Sie können auch keine doppelten Schlüssel oder Salze für einen der Werte verwenden. Trotzdem sollten Sie die Schlüssel und Salze in der Datei wp-config.php definiert haben und sich nicht darauf verlassen Hier können zufällige Zeilen für diese Datei abgerufen werden: https://api.wordpress.org/secret-key/1.1/salt/ )

Um also eine Nonce zu duplizieren, benötigen Sie all diese Informationen. Zeit und Benutzer-ID können wahrscheinlich abgeleitet werden. Die Aktionszeichenfolge ist möglicherweise bekannt. Aber das Salz ist ein geheimer Wert, der einem Angreifer nicht bekannt sein sollte, und dies macht es unmöglich, das Nonce zu duplizieren.

Die Zeichenfolge "action" sollte jedoch für den jeweiligen Fall so eindeutig wie möglich sein. Sie sollte für jede Aktion unterschiedlich sein, z. B. delete_thing vs. update_thing vs. create_thing. Und es sollte eine "ID" enthalten, wenn es auf eine bestimmte Sache einwirkt, so wie "delete_thing_123" für diese bestimmte Sache.

Es ist nicht unbedingt sicherer, komplexe Daten wie den MD5-Hash von etwas in die Aktionszeichenfolge aufzunehmen. Die Nonce wird bereits mit der HMAC-Message-Digest-Methode mit gesalzenen geheimen Werten erstellt. Das Nonce ist jedoch für dieselbe Aktion dasselbe, daher sollte die Aktion für den jeweiligen Fall spezifisch sein, um das Nonce für mehrere Fälle unvorhersehbar zu machen. Ein Nonce, das zum Löschen eines Elements verwendet wird, löscht kein Element oder Objekt.

Beachten Sie auch, dass Aktionswerte zum Generieren von Nonces vollständig intern generiert werden sollten. In keinem Fall sollten Benutzereingaben verwendet werden, um die Aktion zu bestimmen, die die Nonce erzeugt. Wenn ein Benutzer Daten einspeisen kann, um die Aktionszeichenfolge zu bestimmen, kann er im Voraus Nonces erhalten. Nonces müssen eindeutige statische Zeichenfolgen sein, denen möglicherweise IDs zugeordnet sind.

TL; DR: Verwenden Sie eine einfache Zeichenfolge mit einer ID (wenn eine ID sinnvoll ist). Es ist gut so.

10
Otto