Support » Allgemeine Fragen » Mit esc_html die Ausgabe von Tags erlauben

  • Gelöst wootimes

    (@wootimes)


    Hallo zusammen,

    ich statte mein WP Theme gerade mit escapten Ausgaben aus. Teilweise verwende ich Felder, in dem er Nutzer Text eingeben kann. Hier soll es auch möglich sein, dass er u.a. Text Fett markiert (strong) oder Links setzen kann (a href=““). Wenn ich bei der Ausgabe „esc_html“ verwende, funktioniert das natürlich nicht mehr.

    Wie kann ich bei solchen Felder vorgehen?

    Viele Grüße,
    Martin

Ansicht von 6 Antworten - 1 bis 6 (von insgesamt 6)
  • Moderator Torsten Landsiedel

    (@zodiac1978)

    Input oder Output?
    http://wordpress.stackexchange.com/questions/141849/when-to-use-esc-html-and-when-to-use-sanitize-text-field

    Ersteres lässt den Inhalt intakt und ändern nur die Ausgabe, so dass sie vom Browser nicht mehr interpretiert wird. Letzteres entfernt per http://php.net/manual/de/function.strip-tags.php die HTML-Tags.

    Wenn du die Funktion direkt nutzt, kannst du auch erlaubte Tags angeben.

    Kommt also darauf an, ob du die Tags erhalten möchtest oder nicht.

    Gruß, Torsten

    Moderator espiat

    (@espiat)

    Hi.

    Dies kannst du zB mit wp_kses:

    echo wp_kses( '<a href="http://www.link.de/">link</a><strong>FETT</strong>' , array(
        'a' => array(
            'href' => array(),
        ),
    
        'strong' => array(),
    ));

    Siehe: https://vip.wordpress.com/documentation/vip/best-practices/security/validating-sanitizing-escaping/ , https://codex.wordpress.org/Data_Validation

    • Diese Antwort wurde geändert vor 2 Jahre, 6 Monate von  espiat.

    @torsten: Danke für dein Feedback. Also könnte ich eine Funktion schreiben wie:

    if ( ! function_exists( 'crediv_strip_tags' ) ) : 
    
    	function crediv_strip_tags() {
    		global $mystriptags;
    		$mystriptags = '<p><a><strong>';
    	}
    
    endif;
    
    add_action( 'template_redirect', 'crediv_strip_tags' );

    Und dann das Feld so ausgeben lassen:

    <?php 
    global $mystriptags;
    echo strip_tags($custom_popup_content, $mystriptags); 
    ?>

    Das entspricht dann auch einer escapten Ausgabe?

    Sehe ich das richtig, wenn man bspw. ein Feld hat, worüber man einen Google Analytics Code im Backend eingeben kann, der dann ausgegeben wird. Das dieses Feld anfällig für Schafcode wäre, weil ja hier nicht JS escaped werden kann, da ansonsten ja der Tracking Code auch nicht mehr funktioniert.

    Moderator Torsten Landsiedel

    (@zodiac1978)

    Nee, nicht ganz.

    Bevor du $custom_popup_content in der DB/Option speicherst, strippst du die Tags raus (sanitize on input).

    Alternativ lässt du den Wert so wie er ist in die DB und escapest beim Ouput, z.B. mit wp_kses (siehe Post von espiat).

    Schau dir nochmal in Ruhe https://codex.wordpress.org/Data_Validation an, da wird das ganz gut erklärt.

    Gruß, Torsten

    @torsten: Ok, danke ich werde mich mal intensiver mit diesem Thema beschäftigen. Was ich jedoch nicht verstehe ist, warum strip_tags(); nicht ausreichend ist. Wenn man es auf diese Weise macht, kann man doch ebenso kein Javascript über das Feld einschleusen oder nicht?

    Ich habe es jetzt so gelöst:

    if ( ! function_exists( 'smallbusiness_cd_kses' ) ) : 
    
    	function smallbusiness_cd_kses( $output ) {
    
    		// output full feature allowed html tags
    		return wp_kses( $output , wp_kses_allowed_html('post') );
    		
    	}
    
    endif;
    
    add_action( 'template_redirect', 'smallbusiness_cd_kses' );

    Im Template rufe ich es dann so auf:

    <?php echo smallbusiness_cd_kses( $my_custom_html ); ?>

    Damit sollte es jetzt sicher genug sein. 🙂

Ansicht von 6 Antworten - 1 bis 6 (von insgesamt 6)
  • Das Thema „Mit esc_html die Ausgabe von Tags erlauben“ ist für neue Antworten geschlossen.