web-dev-qa-db-fra.com

Comment désinfecter la saisie de l'utilisateur?

Quelle est la manière correcte de désinfecter les données de formulaire avant de les soumettre à la base de données? J'ai la saisie de texte suivante:

<form method="post" action="options.php">
    <?php wp_nonce_field('update-options'); ?>

<input style="width:100%" type="text" name="data[title]" id="title" value="<?php $title = get_option('data_test'); echo $title['title']; ?>" /></p>

    <input type="hidden" name="action" value="update"/>
    <input type="hidden" name="page_options" value="lu_ban_data"/>
    <input style="float:left;margin-top: 10px; margin-bottom: 10px; vertical-align: middle; clear: both;" class="button-primary" type="submit" value="<?php _e('save changes') ?>" />
</form>

J'ai essayé de faire echo sanitize_text_field($title['title']);, mais il ne supprime les données que si elles sont demandées à la base de données. Les données contenues dans la base de données contiennent toujours des caractères indésirables. C'est pourquoi je veux désinfecter avant de le soumettre.

1
David Garcia

Je ne suis pas sûr que cela soit utile ou non. Comme le dit s_ha_dum, vous devez indiquer comment vous traitez les données soumises et les envoyez à db.

Mais pour commencer, vous pouvez envisager d'échapper aux données générées sous la forme:

<input style="width:100%" type="text" name="data[title]" id="title" value="<?php $title = get_option('data_test'); echo esc_attr($title['title']); ?>" /></p>

Utilisez esc_attr () et esc_html () pour les données que vous ajoutez. à la page qui a été soumise par l'utilisateur ou vous n'êtes pas sûr de ses origines.

esc_attr() est destiné au contenu sorti dans un attribut de balise html, et esc_html() est destiné au contenu sorti directement dans la page ou entre les balises. Il existe également des versions esc_attr_e(), esc_attr__(), esc_html_e et esc_html__() si vous avez besoin de traduction.

Enfin, la série d'échappement contient esc_sql () pour les données soumises par l'utilisateur que vous allez envoyer à votre base de données.

MODIFIER:

Comme @Milo l'a souligné dans les commentaires, esc_sql () n'est pas très utile ici, car ces fonctions d'échappement sont déjà appliquées à update_option () via la fonction sanitize_option () et préparées lorsqu'elles sont placées dans la base de données. Donc, vous pouvez sauter ça. Si vous écrivez vos propres appels MySQL pour stocker des données, vous devriez regarder $ wpdb-> prepare pour les échapper.

Pour ajouter des méta_données et des options à la base de données via des fonctions intégrées, vous êtes déjà couvert.

2
Jake