web-dev-qa-db-fra.com

Fonction WordPress qui sécurise l’envoi de HTML via AJAX demande

Quelle est la méthode correcte pour renvoyer du HTML à une demande AJAX dans WordPress?

J'ai actuellement ceci:

add_action( 'wp_ajax_nopriv_get-location-info', 'sc_locations_get_location_info' );
add_action( 'wp_ajax_get-location-info', 'sc_locations_get_location_info' );
function sc_locations_get_location_info() {
    $nonce = $_POST['nonce'];
    if ( ! wp_verify_nonce( $nonce, 'get-location-info-nonce' ) ) {
        $response = json_encode( array( 'success' => false, 'error' => "Failed nonce check" ) );
    } else {
        $response = json_encode( array( 'success' => true, 'HTML' => '...LOTS OF WONDERFUL HTML...' ) );
    }
    header( "Content-Type: application/json" );
    echo $response;
    exit;
}

Maintenant, je n'utilise que json_encode() mais devrais-je utiliser autre chose que le HTML? Le code HTML généré étant digne de confiance, aucune suppression n’est nécessaire.

4
Brady

En fonction du type de code HTML auquel vous vous attendez, vous pouvez utiliser différents outils:

  • esc_html() échappe à des blocs HTML complets pour éviter de briser des caractères dans les littéraux de vos objets JSON.
  • esc_html_e() échappe (comme ci-dessus) et traduit la chaîne si la localisation dans ce contexte vous préoccupe .
  • wp_kses() analysera la chaîne HTML et supprimera toutes les balises "diaboliques" (explicitement interdites).
6
EAMann

Si le code HTML est entièrement fiable, je dirais qu’aucun traitement supplémentaire n’est nécessaire, bien qu’en théorie, il serait peut-être préférable d’envoyer les données en plusieurs parties et d’utiliser JS DOM pour créer votre code HTML. Cela dépend du poids de chaque mode de traitement. le faire ... et je suppose que vous souhaitiez une charge unique, probablement plus lourde, à l’avance avec une utilisation plus légère de la bande passante depuis le AJAX ou bien si vous souhaitez une charge plus légère à l’avant avec plusieurs charges plus lourdes de la part de AJAX.

0
mor7ifer

Vous pouvez utiliser WordPress natif - WP_Ajax_Response

0
Mamaduka