web-dev-qa-db-ger.com

Sichere Validierung von wp_editor in den Theme-Optionen

Also fand ich gerade diesen tollen WPSE Thread über Sicherheit für Themes/Plugins . Es beantwortete die meisten meiner Fragen, wurde jedoch erstellt, bevor die neue Funktion wp_editor() erstellt wurde.

Ich habe zwei TinyMCE-Editoren in meinen Designoptionen und frage mich, ob ich esc_html() oder esc_textarea() in einem Validierungs-Callback verwenden muss, bevor ich die Designoption speichere. Es scheint mir, dass TinyMCE sich um viele dieser Dinge kümmert (sowie um die Einstellungen-API-Sicherheit, für die gesorgt ist), aber es gibt immer noch nicht viele Dokumentationen zu wp_editor().

Alle Ressourcen und Antworten geschätzt.

3
mrwweb

esc_html() und esc_textarea() sind ihrem Namen entsprechend Escape-Funktionen und eigentlich für die Anzeige gedacht, anstatt sie zu bereinigen oder zu validieren. Ich würde wp_kses() oder wp_kses_post() (das ist nur wp_kses() mit dem globalen $allowedposttags) verwenden, um Eingaben aus einem wp_editor()-Feld vor dem Speichern zu bereinigen.

9
helenhousandi

Der TinyMCE hat einen Filter für alle erlaubten Tags. Sie können die Tags ändern, es werden standardmäßig für Ihre Optionen Filter gesetzt und der Editor filtert die Tags. Es ist nicht notwendig, dass Sie nach dem Speichern filtern.

Beispiel für erweiterte Tags:

function fb_change_mce_options( $initArray ) {
    // Comma separated string od extendes tags
    // Command separated string of extended elements
    $ext = 'pre[id|name|class|style],iframe[align|longdesc|name|width|height|frameborder|scrolling|marginheight|marginwidth|src]';
    if ( isset( $initArray['extended_valid_elements'] ) ) {
        $initArray['extended_valid_elements'] .= ',' . $ext;
    } else {
        $initArray['extended_valid_elements'] = $ext;
    }
    // set tiny paramter verify_html
    $initArray['verify_html'] = true;
    return $initArray;
}
add_filter( 'tiny_mce_before_init', 'fb_change_mce_options' );

Sie können die Tags auch filtern. Alle Tags innerhalb des Arrays $initArray sind zulässig. Es ist einfach, Tags aus dem Array zu entfernen. unset( $initArray['pre'] )

lesen Sie die Elemente im Array über var_dump( $initArray );

Beste

6
bueltge