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
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 7 Jahren, 10 Monaten von Marcus Spanier.
@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.
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. 🙂