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?
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 )