{"id":229554,"date":"2022-11-04T11:13:00","date_gmt":"2022-11-04T08:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229554"},"modified":"2022-11-09T08:26:50","modified_gmt":"2022-11-09T05:26:50","slug":"suojattujen-ajax-pyyntoejen-laehettaeminen-wordpressissae-noncesilla","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/suojattujen-ajax-pyyntoejen-laehettaeminen-wordpressissae-noncesilla\/","title":{"rendered":"Suojattujen Ajax-pyynt\u00f6jen l\u00e4hett\u00e4minen WordPressiss\u00e4 (noncesilla)"},"content":{"rendered":"\n<p>Tied\u00e4n, ett\u00e4 <a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">REST API<\/a> on valtava keskustelunaihe WordPressiss\u00e4 juuri nyt, ja aivan oikeutetusti, mutta silti on aikoja, jolloin meid\u00e4n on k\u00e4ytett\u00e4v\u00e4 <a href=\"https:\/\/codex.wordpress.org\/AJAX_in_Plugins\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">admin-ajaxia<\/a> (kuten se tulee tunnetuksi) useista syist\u00e4.<\/p>\n<ul>\n<li>Ehk\u00e4 se on sovellus,<\/li>\n<li>Ehk\u00e4 aika ei salli tarvittavien p\u00e4\u00e4tepisteiden luomista,<\/li>\n<li>Ehk\u00e4 pid\u00e4t paremmin admin-ajaxista,<\/li>\n<li>Ja niin edelleen.<\/li>\n<\/ul>\n<p>Riippumatta syist\u00e4si, miksi k\u00e4yt\u00e4t sit\u00e4 (jota k\u00e4yt\u00e4n edelleen, olipa se mik\u00e4 tahansa ty\u00f6), mielest\u00e4ni on t\u00e4rke\u00e4\u00e4 varmistaa, ett\u00e4 l\u00e4het\u00e4mme suojattuja Ajax-pyynt\u00f6j\u00e4 WordPressiss\u00e4 nonces-koodeilla aivan kuten l\u00e4hett\u00e4isit perinteisi\u00e4 lomaketietoja. .<\/p>\n<p>Laillinen, reaaliaikainen kuva johdoista, jotka kuljettavat Ajax-pyynt\u00f6\u00e4si.<\/p>\n<p>Jos etsit verkosta tuloksia sen tekemiseen, saat erilaisia \u200b\u200bvastauksia, ja t\u00e4m\u00e4 on vain yksi tippa sananlaskujen \u00e4mp\u00e4riin.<\/p>\n<p>Mutta jos olet utelias saamaan reseptin sen k\u00e4sittelyyn, teen sen joka kerta t\u00e4ll\u00e4 tavalla.<\/p>\n<h2>Suojatut Ajax-pyynn\u00f6t WordPressiss\u00e4<\/h2>\n<p>Prosessi suojattujen Ajax-pyynt\u00f6jen l\u00e4hett\u00e4miseksi WordPressille noudattaa t\u00e4t\u00e4 menettely\u00e4:<\/p>\n<ol>\n<li>aseta JavaScript-tiedostosi jonoon ja k\u00e4yt\u00e4 <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_localize_script\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_localize_script<\/a> ,<\/li>\n<li>varmista, ett\u00e4 JavaScript l\u00e4hett\u00e4\u00e4 suojauksen v\u00e4litt\u00f6m\u00e4sti,<\/li>\n<li>Tarkista takaisinsoittosi turvaarvo ja k\u00e4sittele sit\u00e4 asianmukaisesti.<\/li>\n<\/ol>\n<p>T\u00e4ss\u00e4 on kuitenkin muutamia p\u00e4\u00e4kohtia jokaiselle yll\u00e4 olevalle, jotka toivottavasti johtavat turvallisemman Ajax-pohjaisen koodin kirjoittamiseen.<\/p>\n<h3>1 Lis\u00e4\u00e4 JavaScript-jonoon, lokalisoi komentosarjasi<\/h3>\n<p>Tied\u00e4n, ett\u00e4 t\u00e4m\u00e4 vaikuttaa oudolta ensimm\u00e4iselt\u00e4 askeleelta, kun otetaan huomioon, ett\u00e4 sinun pit\u00e4isi kirjoittaa se ennen kuin asetat sen jonoon. Ja sinun pit\u00e4isi tietysti. Mutta t\u00e4t\u00e4 viesti\u00e4 varten halusin n\u00e4ytt\u00e4\u00e4 tarvittavan koodin ennen kuin hypp\u00e4\u00e4n yksityiskohtiin.<\/p>\n<p>On joitakin tapoja, joilla ihmiset valitsevat jonon admin-ajax.php:n, mutta <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a53a5c982b9e6826369e2f37914ad77b#file-00-wp-localize-script-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4t\u00e4 prosessia<\/a> noudatan sek\u00e4 tiedostoni jonossa ett\u00e4 admin-ajax.php:n lis\u00e4\u00e4misess\u00e4:<\/p>\n<pre><code>&lt;?php\n\nwp_enqueue_script(\n  'acme-security',\n  $this-&gt;plugin_url. 'assets\/js\/plugin.js',\n  [ 'jquery' ],\n  false,\n  true\n);\n\nwp_localize_script(\n  'acme-security',\n  'acme_ajax_object',\n  [\n    'ajax_url'  =&gt; admin_url( 'admin-ajax.php' ),\n    'security'  =&gt; wp_create_nonce( 'acme-security-nonce' ),\n  ]\n);<\/code><\/pre>\n<p>Huomaa yll\u00e4 olevassa koodissa, ett\u00e4 <a href=\"https:\/\/www.google.com\/url?sa=t&#038;rct=j&#038;q=&#038;esrc=s&#038;source=web&#038;cd=1&#038;ved=0ahUKEwjA9NijppDUAhVIWSYKHTzDAVYQFggnMAA&#038;url=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_enqueue_script%2F&#038;usg=AFQjCNEAqOC2ehwxSG7UntToWhDVHXLVUA&#038;sig2=7VfQ0cL4-Pt1e8oV0mDKRg&#038;cad=rjt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_enqueue_script<\/a> -kutsu n\u00e4ytt\u00e4\u00e4 t\u00e4sm\u00e4lleen samalta kuin odotit.<\/p>\n<p>Mutta <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_localize_script\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_localize_script<\/a> on hieman erilainen. T\u00e4ss\u00e4 on mit\u00e4 se tekee:<\/p>\n<ol>\n<li>Se seuraa jonottajakomentosarjan kutsua (ja j\u00e4rjestyksell\u00e4 on v\u00e4li\u00e4),<\/li>\n<li>se k\u00e4ytt\u00e4\u00e4 samaa tunnistetta, nimitt\u00e4in <strong>acme-security<\/strong> ,<\/li>\n<li>Se m\u00e4\u00e4rittelee objektin, jota voimme k\u00e4ytt\u00e4\u00e4 JavaScript-koodissamme nimelt\u00e4 <strong>acme_ajax_object,<\/strong> ja m\u00e4\u00e4rittelee kaksi ominaisuutta.<\/li>\n<li>Ominaisuus <strong>ajax_url<\/strong> yll\u00e4pit\u00e4\u00e4 polun osoitteeseen admin-ajax.php.<\/li>\n<li><strong>Suojausominaisuus<\/strong> s\u00e4ilytt\u00e4\u00e4 arvon, jonka <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_create_nonce\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_create_nonce<\/a> palauttaa .<\/li>\n<\/ol>\n<p>Joten kuinka hy\u00f6dynn\u00e4mme kaikkea t\u00e4t\u00e4 JavaScriptin yhteydess\u00e4?<\/p>\n<h3>2 N\u00e4iden tietojen k\u00e4ytt\u00e4minen JavaScriptiss\u00e4<\/h3>\n<p>Ensinn\u00e4kin, kun soitat Ajax-kutsua, meid\u00e4n on varmistettava, ett\u00e4 k\u00e4yt\u00e4mme yll\u00e4\u00a0 olevassa koodissa m\u00e4\u00e4ritt\u00e4m\u00e4mme objektin ominaisuutta <strong>ajax_url<\/strong>. Toisin sanoen pyynn\u00f6n URL-osoite tulee l\u00e4hett\u00e4\u00e4 osoitteeseen <strong>acme_ajax_object.ajax_url<\/strong>.<\/p>\n<p>Sitten m\u00e4\u00e4rit\u00e4t toiminnon, jota haluat kutsua. T\u00e4ss\u00e4 tapauksessa se on <strong>get_custom_date<\/strong>, jota tutkimme hetken kuluttua.<\/p>\n<p>Mutta t\u00e4rkein osa tulee seuraavaksi: Varmistamme sitten, ett\u00e4 l\u00e4het\u00e4mme suojausarvon, jota <strong>yll\u00e4pit\u00e4\u00e4<\/strong> acme_ajax_object <strong>suojausominaisuus<\/strong>.<\/p>\n<pre><code>$.get( acme_ajax_object.ajax_url, {\n\n    action:   'get_custom_data',\n    security: acme_ajax_object.security\n\n}, function( response) {\n\n  if (undefined !== response.success &amp;&amp; false === response.success) {\n    return;\n  }\n\n  \/\/ Parse your response here.\n\n});<\/code><\/pre>\n<p>Huomaa, ett\u00e4 vastaustoiminnossa tarkistamme, ett\u00e4 vastaus on onnistunut oikein, k\u00e4sittelemme sit\u00e4 asianmukaisesti ja jatkamme sitten koodimme kanssa.<\/p>\n<p>Milt\u00e4 palvelinpuolen koodi sitten n\u00e4ytt\u00e4\u00e4 t\u00e4lle?<\/p>\n<h3>3 Turvallisuuden tarkistaminen<\/h3>\n<p>Seuraavaksi takaisinsoittofunktiossasi (jolle olemme asianmukaisesti nimenneet <strong>get_custom_data<\/strong>, meid\u00e4n on ensin tarkistettava suojausarvo ennen kuin teet mit\u00e4\u00e4n muuta.<\/p>\n<p>Jos arvo menee ohi, olemme hyv\u00e4t. muussa tapauksessa meid\u00e4n on l\u00e4hetett\u00e4v\u00e4 virheilmoitus.<\/p>\n<pre><code>&lt;?php\n\npublic function get_custom_data() {\n\n  if (! check_ajax_referer( 'acme-security-nonce', 'security', false)) {\n\n    wp_send_json_error( 'Invalid security token sent.' );\n    wp_die();\n  }\n\n  \/\/ The rest of the function that does actual work.\n\n}<\/code><\/pre>\n<p>Huomaa, ett\u00e4 kun kutsumme <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/check_ajax_referer\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">check_ajax_referer<\/a>, k\u00e4yt\u00e4mme wp_create_nonce m\u00e4\u00e4ritetyn arvon avainta ja ensimm\u00e4isess\u00e4 vaiheessa m\u00e4\u00e4ritt\u00e4m\u00e4mme objektin ominaisuuden nime\u00e4.<\/p>\n<p>Jos se ei kirjaudu ulos, l\u00e4het\u00e4mme JSON-virheen, jonka voimme lukea JavaScriptist\u00e4, kuten yll\u00e4 n\u00e4imme. T\u00e4m\u00e4n tulisi aina olla ensimm\u00e4inen askel ennen varsinaisen ty\u00f6n tekemist\u00e4.<\/p>\n<p>Jos kaikki on kunnossa, voimme menn\u00e4.<\/p>\n<h2>Onko t\u00e4m\u00e4 todella turvallista?<\/h2>\n<p>T\u00e4m\u00e4 on v\u00e4ist\u00e4m\u00e4t\u00f6n kysymys, eik\u00f6? Ollakseni rehellinen, en halua luvata, ett\u00e4 t\u00e4m\u00e4 on t\u00e4ysin idioottivarma, koska en ole tietoturva-asiantuntija.<\/p>\n<p>Mutta nonce-arvo, joka hy\u00f6dynt\u00e4\u00e4 WordPressin sis\u00e4\u00e4nrakennettuja suojaustoimintoja, on parempi kuin sokea tiedon l\u00e4hett\u00e4minen ilman mit\u00e4\u00e4n keinoa tarkistaa l\u00e4hetett\u00e4v\u00e4n l\u00e4hdett\u00e4.<\/p>\n<p>Tietenkin sinun on my\u00f6s desinfioitava tiedot ennen niiden tutkimista, k\u00e4ytt\u00f6\u00e4, mahdollista tallentamista ja niin edelleen. Mutta se on toisen postauksen sis\u00e4lt\u00f6.<\/p>\n<p>T\u00e4m\u00e4 sen sijaan tarjoaa reseptin varmistaaksesi, ett\u00e4 l\u00e4het\u00e4t suojattuja Ajax-pyynt\u00f6j\u00e4 WordPressiss\u00e4.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00e4ss\u00e4 kuvatut kolme vaihetta tarjoavat reseptin sen varmistamiseksi, ett\u00e4 l\u00e4het\u00e4t suojattuja Ajax-pyynt\u00f6j\u00e4 WordPressiss\u00e4.<\/p>\n","protected":false},"author":1,"featured_media":166665,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,864],"tags":[1166],"class_list":["post-229554","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=229554"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229554\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/166665"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}