web-dev-qa-db-fra.com

Quoi utiliser à la place de wp_kses () dans la sortie utilisateur

J'ai besoin d'un peu d'aide par ici.

Lors du développement d'un thème, je veux m'assurer qu'il n'y a pas de problème de sécurité. Donc, toutes les données dynamiques doivent être correctement échappées pour le contexte dans lequel elles sont rendues.

Je sais comment échapper à ce qui suit:

  • Si 'echo' dans l'attribut, utilisez esc_attr
  • Si l'attribut 'echo' in class, utilisez sanitize_html_class
  • Si 'echo' en texte brut, utilisez esc_html
  • Si 'echo' est en traduction, utilisez esc_html__, esc_html_e, esc_attr_e, etc.

Mais il y a deux domaines dans lesquels je ne sais pas quoi faire.

  1. Quelle méthode devrais-je utiliser si la sortie de l'utilisateur peut contenir des balises HTML, telles que "em" ou "strong"?

Exemple:

<?php $subtitle = get_post_meta($post_id,'subtitle', true); ?>
<h3 class="subtitle"><?php echo $subtitle; ?></h3>

Notez que "wp_kses est une fonction coûteuse, elle ne devrait donc être exécutée que lorsque les données sont enregistrées, et non affichée" Proof here

  1. Quel échappement devrais-je utiliser pour générer des styles CSS?

Exemple:

<style type="text/css"><?php echo $css; ?></style>
6
Michael Khors

Allons voir ce que le noyau ferait.

Dans default-filters.php, voici ce que le contenu en sortie transmet:

add_filter( 'the_content', 'wptexturize'        );
add_filter( 'the_content', 'convert_smilies'    );
add_filter( 'the_content', 'convert_chars'      );
add_filter( 'the_content', 'wpautop'            );
add_filter( 'the_content', 'shortcode_unautop'  );
add_filter( 'the_content', 'prepend_attachment' );

Aucune de ces fonctions n'est réellement dédiée à la sécurité/échappement.

Il en va de même pour les commentaires, qui proviennent de visiteurs aléatoires et même d'auteurs de sites peu fiables:

add_filter( 'comment_text', 'wptexturize'            );
add_filter( 'comment_text', 'convert_chars'          );
add_filter( 'comment_text', 'make_clickable',      9 );
add_filter( 'comment_text', 'force_balance_tags', 25 );
add_filter( 'comment_text', 'convert_smilies',    20 );
add_filter( 'comment_text', 'wpautop',            30 );

En un mot, il est raisonnablement digne de confiance, après avoir été nettoyé des soumissions et revenant de la base de données.

3
Rarst