Kaj je CSRF ranljivost WordPressa?

CSRF (Cross-Site Request Forgery znan tudi kot Napad z enim klikom ) je napogostejša ranljivost na vtičnikih in temah.

Verzije starejše od 4.0. so ranljive za CSFR – posodobite svoj WP!

Kako lahko uporabimo NONCE?

NONCE (Number used ONCE) .NONCE se uporablja na zahtevo in prepreči nepooblaščen dostop tako, da uporabi skrivni “ključ” in to preveri vsakič, ko se uporabi koda.

Nonce lahko ustvarite in ga dodate v niz poizvedb v URLju, lahko ga dodate v skrito polje v formi ali ga uporabite kako drugače. Če ga boste uporabili v AJAX-u potem ga dodajte v skrito polje, iz kjer ga JavaScript lahko pridobi.

Upoštevati je potrebno, da so Nonce-nci edinstveni za trenutnega uporabnika seje, tako da, če se le ta logira ali odlogira asinhrono noben Nonce-ns na strani ne bo več veljaven.

Kako ga uporabite?
https://codex.wordpress.org/WordPress_Nonces

1. DODAJANJE

  • Dodajanje v URL

Kličite
wp_nonce_url()
navedite čisti URL in niz, ki predstavlja dejanje.

Primer: $complete_url = wp_nonce_url( $bare_url, ‘trash-post_’.$post->ID );

Poskrbite, da bo niz, ki predstavlja dejanje kar se da natančen.

wp_nonce_url() privzeto doda polje z imenom
 _wpnonce,
ime lahko spremenite pri klicu funkcije:
$complete_url = wp_nonce_url( $bare_url, ‘trash-post_’.$post->ID, ‘my_nonce’ );

  •  Dodajanje v formo

Kličite
wp_nonce_field()
natančno določite niz, ki predstavlja dejanje.
wp_nonce_field() privzeto generira dva skrita polja (eno katerega vrednost je Nonce in enega katerega vrednost je trenuten URL (the referrer), kar se odraža kot rezultat)).

Napr:
wp_nonce_field( ‘delete-comment_’.$comment_id );
Morda celo nekaj takega:
<input type=”hidden” id=”_wpnonce” name=”_wpnonce” value=”796c7766b1″ />
<input type=”hidden” name=”_wp_http_referer” value=”/wp-admin/edit-comments.php” />
Bolj podrobno: https://codex.wordpress.org/Function_Reference/wp_nonce_field

Poskrbite, da bo niz, ki predstavlja dejanje karseda natančen.

  • Ustvarjanje Nonce-nsa za uporabo na drug način

Kličite
wp_create_nonce()
natančno določite niz, ki predstavlja dejanje.

Napr:
$nonce = wp_create_nonce( ‘my-action_’.$post->ID );
Kar enostavno vrne nazaj Nonce:
Napr: 295a686963

2. PREVERJANJE

  •  Nonce, ki je bil poslan v URL iz admin zaslona

Kličite
check_admin_referer()
natančno določite niz, ki predstavlja dejanje.

Napr: check_admin_referer( ‘delete-comment_’.$comment_id );

Ta klic preverja Nonce in napotitelja (referrer), če pregled ni uspešen potem se izvede normalna akcija (zaključeno izvjanje skript s “403 Forbidden” odzivom in sporočilo o napaki).

Če niste uporabili privzetega imena polja  (_wpnonce), ko ste ustvarili Nonce, potem določite ime polja:
check_admin_referer( ‘delete-comment_’.$comment_id, ‘my_nonce’ );

  • Nonce, ki je bil poslan v AJAX zahtevo

Za preverjanje kličite
check_ajax_referer()
natančno določite niz, ki predstavlja dejanje.

Napr: check_ajax_referer( ‘process-comment’ );

Če niste uporabili privzetega imena polja (_wpnonce ali _ajax_nonce), ko ste ustvarili Nonce lahko določite dodatne parametre.
Za več glejte: https://codex.wordpress.org/Function_Reference/check_ajax_referer

  • Preverjanje nonce-nsa za uporabo na drug način

Kličite
wp_verify_nonce() določite nonce in niz, ki predstavlja dejanje.

Napr: wp_verify_nonce( $_REQUEST[‘my_nonce’], ‘process-comment’.$comment_id );

Če je rezultat napačen ne nadaljujete s procesom, raje kličite wp_nonce_ays(), kar bo naredilo “403 Forbidden” odziv v brskalniku z error sporočilom: “Are you sure you want to do this?”.

3. SPREMINJANJE NONCE SISTEMA

Nonce sistem lahko prilagodite tako, da dodate različna dejanja in filtre.

  • Spreminjanje Error sporočila

function my_nonce_message ($translation) {
 if ($translation == ‘Are you sure you want to do this?’)
    return ‘No! No! No!’;
  else
    return $translation;
  }

add_filter(‘gettext’, ‘my_nonce_message’);

  • Izvajanje dodatne verifikacije (preverjanja)

Dodajte
check_admin_referer dejanje.
Napr:
function my_additional_check ( $action, $result ) { … }
add_action( ‘check_admin_referrer’, ‘my_additional_check’, 10, 2 );

Za pregled check_ajax_referer() dodaj check_ajax_referer dejanje na isti način.

  • Spreminjanje Nonce Lifetime

Privzeto ima Nonce “življensko dobo” enega dneva, po tem času Nonce ni več veljaven četudi se ujema z nizom dejanj (akcije).

Če želite spremeniti lifetime dodajte
nonce_life
filter in določite lifetime v sekundah.

Napr:
add_filter( ‘nonce_life’, function () { return 4 * HOUR_IN_SECONDS; } );

4. VARNOST

Nonce je generiran tako, da uporablja KEY in SALT, ki sta edinstvena za vašo stran, če ste namestili WP pravilno.
Definirana sta v wp-config.php datoteki (datoteka vsebije komentarje, ki vam bodo dali več informacij).

Nonce se nikoli ne sme sklicevati na avtentikacijo ali avtorizacijo kontole dostopa.
Zaščitite funkcijo z uporabo current_user_can().

Vtičniki za zaščito:

Zadnje ranljivosti lahko spremljate na:

 

Viri: