web-dev-qa-db-fra.com

Wp_insert_post valide-t-il l'entrée?

Si j'utilise wp_insert_post dans un plugin, devrai-je vérifier le contenu pour détecter les problèmes d'injection SQL et XSS ou la fonction wp_insert_post le fera-t-elle pour moi?

3
Can't Tell

La réponse courte;Absolument.

wp_insert_post() seul SQL échappera au contenu. Utilisez la bibliothèque KSES _ et wp_kses () pour filtrer les nuisibles, ou esc_html() pour échapper all HTML.

Plus important encore, consultez le codex sur la validation des données } _ (lire: désinfection).

A Remarque sur KSES:Utilisez wp_filter_kses () ou wp_kses_data() pour appliquer les mêmes règles KSES que les commentaires de publication. La différence subtile entre les deux est que le premier s'attend à ce que les données s'échappent avec des barres obliques (et renvoie les mêmes), alors que ce n'est pas le cas pour le second.

WordPress (bizarrement)applique des guillemets magiques, donc $_POST, $_GET (et le reste) aura des barres d'échappement ajoutées par défaut.

A Note sur wp_insert_post ():/ Cette fonction s'attend également à ce que le tableau de données comporte des barres obliques; vous devrez donc le nettoyer avec add_magic_quotes () } si ce n'est pas le cas. Cas.

Update:et mis en pratique;

$_POST['post_title'] = wp_filter_nohtml_kses( $_POST['post_title'] ); // also expects & returns slashes
$_POST['post_content'] = wp_filter_kses( $_POST['post_content'] );

$post_ID = wp_insert_post( $_POST );

// add to the fun - wp_update_post() will add slashes if $postdata is an object!
$update = ( object ) stripslashes_deep( array( 'ID' => $post_ID ) + $_POST );
$update->post_title .= ' Updated!';
wp_update_post( $update )
7
TheDeadMedic