Come usare nonce con il modulo di invio front-end?

27 ago 2012, 21:05:10
Visualizzazioni: 32.3K
Voti: 10

Grazie a diversi post qui presenti sono riuscito a mettere insieme un modulo di invio front-end. Dopo circa 24 ore di modifiche sono finalmente riuscito a far funzionare tutto, incluso il reindirizzamento a una pagina di 'successo' dopo l'invio, ma non ho idea di come gestire il nonce.

Ecco la pagina del modulo: http://pastebin.com/YWyXL3jY

Ed ecco la pagina di successo: http://pastebin.com/3Usu0Pt6

Sono entrambi template di pagina personalizzati (so che la formattazione è un po' disordinata al momento poiché parti diverse provengono da fonti diverse, e penso che non userò la funzione di caricamento file poiché preferirei utilizzare un plugin per una migliore sicurezza).

Il nonce deve essere elaborato prima che l'utente venga reindirizzato alla pagina di successo? Non ho alcuna esperienza con i nonce e sono un programmatore PHP che lavora per 'copia e incolla', quindi per favore siate gentili!

Grazie mille per qualsiasi consiglio possiate darmi :)

1
Commenti

Va bene fare un bump alle mie domande? Ho provato ad aggiungere verify_nonce direttamente sotto if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] )) { - ma non sembra aver avuto alcun effetto

Jo_pinkish Jo_pinkish
29 ago 2012 14:06:50
Tutte le risposte alla domanda 4
0
11

Utilizza il seguente codice appena prima del tag nel tuo codice front-end.

wp_nonce_field('name_of_your_action', 'name_of_your_nonce_field');

Il codice sopra genererà due campi input nascosti all'interno del tuo tag form. Ora puoi verificare il tuo nonce nel backend dove elaborerai il tuo form. Utilizza il seguente codice per verificare il nonce che hai appena creato sopra.

  if(wp_verify_nonce($_REQUEST['name_of_your_nonce_field'], 'name_of_your_action')){

            // Il nonce corrisponde ed è valido. Ora puoi fare quello che vuoi.

     } else {

           // Nonce non valido. Puoi generare un errore qui.
}

Una nota importante: osserva attentamente come "name_of_your_action" è il primo argomento della funzione 'wp_nonce_field()' ed è il secondo argomento della funzione 'wp_verify_nonce()'. :) Quindi, non usarlo come primo argomento in entrambe le funzioni. Molte persone commettono questo errore, quindi ho voluto menzionarlo.

22 dic 2016 16:03:33
0
10

Per aggiungere un nonce a un modulo puoi utilizzare la seguente funzione:

wp_nonce_field($action, $name, $referer, $echo)

  • $action = (opzionale) è una stringa che rappresenta il nome dell'azione
  • $name = (opzionale) è una stringa che rappresenta il nome del nonce. Se lasci questo campo vuoto WordPress utilizzerà "_wpnonce" come valore predefinito

Esempio:

Frontend:

<form action="" method="post">
<?php wp_nonce_field('my_delete_action'); ?>
<input type="hidden" name="id" value="<?php echo $id; ?>" />
<input type="text" name="rec_name" value="<?php echo $name; ?>" />
<input type="submit" value="Elimina" />
</form>

Backend:

$retrieved_nonce = $_REQUEST['_wpnonce'];
if (!wp_verify_nonce($retrieved_nonce, 'delete_my_action')) die('Controllo di sicurezza fallito');

Fonte: https://www.tipsandtricks-hq.com/introduction-to-wordpress-nonces-5357

1 mar 2018 04:12:53
1
-1

Utilizza questo per la generazione e verifica del nonce.

wp_nonce_field('test_action', 'submit_post');

Questo genererà il campo nonce e puoi verificarlo con il codice seguente.

if(wp_verify_nonce($_REQUEST['test_action'], 'submit_post')){
           /// esegui il tuo lavoro
  }else{
         /// restituisci un errore
  }
17 giu 2013 13:33:56
Commenti

Questo non funzionerebbe come sottolinea @Kamal Ahmed "name_of_your_action" è il primo argomento della funzione 'wp_nonce_field()' e il secondo argomento della funzione 'wp_verify_nonce()'"

Bysander Bysander
17 mag 2018 18:42:24
0
-2

Inizia da questa pagina: http://codex.wordpress.org/WordPress_Nonces

Poi guarda l'utilizzo di wp_verify_nonce e l'esempio di utilizzo di wp_nonce_field, devi verificare il risultato della verifica e decidere cosa fare (tipicamente terminare l'esecuzione, ma nel tuo caso probabilmente mostrare un messaggio di errore con echo). Potresti probabilmente usare la verifica come tuo "controllo se il form è stato inviato" alla riga 8:

if ( empty($_POST) || wp_verify_nonce($_POST['name_of_nonce_field'],'name_of_my_action') === false ) {
    /* fallimento */
} else {
    /* successo, elaborazione, redirect */
}

Assumendo che la risposta sia positiva, allora puoi eseguire la tua prossima azione - come mostrare un messaggio di conferma, o nel tuo caso reindirizzare la pagina. Assicurati solo di fare il redirect prima che qualsiasi output venga stampato.

Una cosa da considerare - http://kovshenin.com/2012/nonces-on-the-front-end-is-a-bad-idea/ - anche se in questo caso visto che stai creando contenuti credo che il tizio menzioni che sia "corretto" usare i nonce.

17 giu 2013 06:21:58