✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Suojattujen Ajax-pyyntöjen lähettäminen WordPressissä (noncesilla)

7

Tiedän, että REST API on valtava keskustelunaihe WordPressissä juuri nyt, ja aivan oikeutetusti, mutta silti on aikoja, jolloin meidän on käytettävä admin-ajaxia (kuten se tulee tunnetuksi) useista syistä.

  • Ehkä se on sovellus,
  • Ehkä aika ei salli tarvittavien päätepisteiden luomista,
  • Ehkä pidät paremmin admin-ajaxista,
  • Ja niin edelleen.

Riippumatta syistäsi, miksi käytät sitä (jota käytän edelleen, olipa se mikä tahansa työ), mielestäni on tärkeää varmistaa, että lähetämme suojattuja Ajax-pyyntöjä WordPressissä nonces-koodeilla aivan kuten lähettäisit perinteisiä lomaketietoja. .

Laillinen, reaaliaikainen kuva johdoista, jotka kuljettavat Ajax-pyyntöäsi.

Jos etsit verkosta tuloksia sen tekemiseen, saat erilaisia ​​vastauksia, ja tämä on vain yksi tippa sananlaskujen ämpäriin.

Mutta jos olet utelias saamaan reseptin sen käsittelyyn, teen sen joka kerta tällä tavalla.

Suojatut Ajax-pyynnöt WordPressissä

Prosessi suojattujen Ajax-pyyntöjen lähettämiseksi WordPressille noudattaa tätä menettelyä:

  1. aseta JavaScript-tiedostosi jonoon ja käytä wp_localize_script ,
  2. varmista, että JavaScript lähettää suojauksen välittömästi,
  3. Tarkista takaisinsoittosi turvaarvo ja käsittele sitä asianmukaisesti.

Tässä on kuitenkin muutamia pääkohtia jokaiselle yllä olevalle, jotka toivottavasti johtavat turvallisemman Ajax-pohjaisen koodin kirjoittamiseen.

1 Lisää JavaScript-jonoon, lokalisoi komentosarjasi

Tiedän, että tämä vaikuttaa oudolta ensimmäiseltä askeleelta, kun otetaan huomioon, että sinun pitäisi kirjoittaa se ennen kuin asetat sen jonoon. Ja sinun pitäisi tietysti. Mutta tätä viestiä varten halusin näyttää tarvittavan koodin ennen kuin hyppään yksityiskohtiin.

On joitakin tapoja, joilla ihmiset valitsevat jonon admin-ajax.php:n, mutta tätä prosessia noudatan sekä tiedostoni jonossa että admin-ajax.php:n lisäämisessä:

Huomaa yllä olevassa koodissa, että wp_enqueue_script -kutsu näyttää täsmälleen samalta kuin odotit.

Mutta wp_localize_script on hieman erilainen. Tässä on mitä se tekee:

  1. Se seuraa jonottajakomentosarjan kutsua (ja järjestyksellä on väliä),
  2. se käyttää samaa tunnistetta, nimittäin acme-security ,
  3. Se määrittelee objektin, jota voimme käyttää JavaScript-koodissamme nimeltä acme_ajax_object, ja määrittelee kaksi ominaisuutta.
  4. Ominaisuus ajax_url ylläpitää polun osoitteeseen admin-ajax.php.
  5. Suojausominaisuus säilyttää arvon, jonka wp_create_nonce palauttaa .

Joten kuinka hyödynnämme kaikkea tätä JavaScriptin yhteydessä?

2 Näiden tietojen käyttäminen JavaScriptissä

Ensinnäkin, kun soitat Ajax-kutsua, meidän on varmistettava, että käytämme yllä  olevassa koodissa määrittämämme objektin ominaisuutta ajax_url. Toisin sanoen pyynnön URL-osoite tulee lähettää osoitteeseen acme_ajax_object.ajax_url.

Sitten määrität toiminnon, jota haluat kutsua. Tässä tapauksessa se on get_custom_date, jota tutkimme hetken kuluttua.

Mutta tärkein osa tulee seuraavaksi: Varmistamme sitten, että lähetämme suojausarvon, jota ylläpitää acme_ajax_object suojausominaisuus.

$.get( acme_ajax_object.ajax_url, { action: 'get_custom_data', security: acme_ajax_object.security }, function( response) { if (undefined !== response.success && false === response.success) { return; } // Parse your response here. });

Huomaa, että vastaustoiminnossa tarkistamme, että vastaus on onnistunut oikein, käsittelemme sitä asianmukaisesti ja jatkamme sitten koodimme kanssa.

Miltä palvelinpuolen koodi sitten näyttää tälle?

3 Turvallisuuden tarkistaminen

Seuraavaksi takaisinsoittofunktiossasi (jolle olemme asianmukaisesti nimenneet get_custom_data, meidän on ensin tarkistettava suojausarvo ennen kuin teet mitään muuta.

Jos arvo menee ohi, olemme hyvät. muussa tapauksessa meidän on lähetettävä virheilmoitus.

Huomaa, että kun kutsumme check_ajax_referer, käytämme wp_create_nonce määritetyn arvon avainta ja ensimmäisessä vaiheessa määrittämämme objektin ominaisuuden nimeä.

Jos se ei kirjaudu ulos, lähetämme JSON-virheen, jonka voimme lukea JavaScriptistä, kuten yllä näimme. Tämän tulisi aina olla ensimmäinen askel ennen varsinaisen työn tekemistä.

Jos kaikki on kunnossa, voimme mennä.

Onko tämä todella turvallista?

Tämä on väistämätön kysymys, eikö? Ollakseni rehellinen, en halua luvata, että tämä on täysin idioottivarma, koska en ole tietoturva-asiantuntija.

Mutta nonce-arvo, joka hyödyntää WordPressin sisäänrakennettuja suojaustoimintoja, on parempi kuin sokea tiedon lähettäminen ilman mitään keinoa tarkistaa lähetettävän lähdettä.

Tietenkin sinun on myös desinfioitava tiedot ennen niiden tutkimista, käyttöä, mahdollista tallentamista ja niin edelleen. Mutta se on toisen postauksen sisältö.

Tämä sen sijaan tarjoaa reseptin varmistaaksesi, että lähetät suojattuja Ajax-pyyntöjä WordPressissä.

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja