{"id":229308,"date":"2022-10-31T19:43:00","date_gmt":"2022-10-31T16:43:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229308"},"modified":"2022-11-09T06:24:37","modified_gmt":"2022-11-09T03:24:37","slug":"que-signifie-utiliser-wordpress-comme-proxy","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/que-signifie-utiliser-wordpress-comme-proxy\/","title":{"rendered":"Que signifie utiliser WordPress comme proxy ?"},"content":{"rendered":"\n<p>Si vous avez travaill\u00e9 avec WordPress pendant un certain temps, en particulier lorsqu&rsquo;il s&rsquo;agit d&rsquo;utiliser certains types de fonctionnalit\u00e9s Ajax, vous avez probablement entendu l&rsquo;expression &quot;utiliser WordPress comme proxy&quot; \u00e0 un moment donn\u00e9.<\/p>\n<p>Et m\u00eame si vous ne l&rsquo;avez pas fait, les chances que vous l&rsquo;ayez r\u00e9ellement fait sont assez \u00e9lev\u00e9es.<\/p>\n<p>Bien que je pense qu&rsquo;au fil du temps, nous verrons \u00e9ventuellement l&rsquo;API REST remplacer les m\u00e9thodes traditionnelles d&rsquo;utilisation d&rsquo;Ajax, mais c&rsquo;est probablement une autre histoire pour une autre fois.<\/p>\n<p>Alors, qu&rsquo;est-ce que cela signifie d&rsquo;utiliser WordPress comme proxy chaque fois que vous travaillez avec des requ\u00eates Ajax? Cela n\u00e9cessite un peu de compr\u00e9hension des requ\u00eates intersites, du fonctionnement du routage d&rsquo;une requ\u00eate via WordPress, puis de l&rsquo;analyse de la r\u00e9ponse.<\/p>\n<h2>Utiliser WordPress comme proxy<\/h2>\n<p>C&rsquo;est un peu long, n&rsquo;est-ce pas? Au lieu de cela, je vais essayer de le d\u00e9composer en termes plus courts afin que vous puissiez le lire puis vous remettre au travail.<\/p>\n<h3>En tant que mandataire<\/h3>\n<p>Prenons d&rsquo; abord <a href=\"https:\/\/www.google.com\/search?q=define%3A+proxy&#038;oq=define%3A+proxy&#038;aqs=chrome..69i57j69i58.1706j0j7&#038;sourceid=chrome&#038;ie=UTF-8\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la d\u00e9finition d&rsquo;un proxy<\/a> :<\/p>\n<blockquote>\n<p>le pouvoir de repr\u00e9senter quelqu&rsquo;un d&rsquo;autre, en particulier lors du vote<\/p>\n<\/blockquote>\n<p>Si vous cliquez sur le lien ci-dessus, vous remarquerez qu&rsquo;il existe quelques autres d\u00e9finitions, mais aucune d&rsquo;entre elles ne suffit vraiment. Au lieu de cela, j&rsquo;aime penser \u00e0 eux un peu plus dans l&rsquo;abstrait, du moins en ce qui concerne les logiciels.<\/p>\n<p>Pour les besoins de cet article, disons que WordPress est un proxy pour une requ\u00eate, ce qui signifie qu&rsquo;il est charg\u00e9 de servir d&rsquo;interm\u00e9diaire entre le d\u00e9but de la requ\u00eate et la r\u00e9ponse \u00e0 celle-ci.<\/p>\n<p>Bref,<\/p>\n<blockquote>\n<p>WordPress sert de proxy en acheminant une requ\u00eate vers un autre service et en capturant sa r\u00e9ponse.<\/p>\n<\/blockquote>\n<p>Peut-\u00eatre avez-vous entendu quelque chose de similaire, peut-\u00eatre pas. Quoi qu&rsquo;il en soit, voici \u00e0 quoi cela pourrait ressembler \u00e0 un niveau \u00e9lev\u00e9:<\/p>\n<p>Maintenant, lorsque vous devez faire une requ\u00eate asynchrone (ou une requ\u00eate Ajax comme je l&rsquo;utiliserai dans le reste de cet article), vous avez alors l&rsquo;une des deux options\u00a0:<\/p>\n<ol>\n<li>faire la demande \u00e0 une page qui existe dans WordPress,<\/li>\n<li>faire la demande \u00e0 une page qui existe sur l&rsquo;autre domaine.<\/li>\n<\/ol>\n<p>Si vous faites des requ\u00eates sur des pages qui existent dans votre application (lire: dans WordPress), vous n&rsquo;aurez aucun probl\u00e8me.<\/p>\n<h3>Sur la s\u00e9curit\u00e9 des demandes<\/h3>\n<p>Mais faire des requ\u00eates Ajax en dehors de votre propre domaine est interdit. En effet, il est destin\u00e9 \u00e0 prot\u00e9ger <a href=\"https:\/\/www.owasp.org\/index.php\/Cross-site_Scripting_(XSS)\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">XSS<\/a> et <a href=\"https:\/\/www.owasp.org\/index.php\/Cross-Site_Request_Forgery_(CSRF)\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">CSRF<\/a>.<\/p>\n<p>En bref, chacun d&rsquo;eux se r\u00e9f\u00e8re respectivement \u00e0 ce qui suit\u00a0:<\/p>\n<blockquote>\n<p>Les attaques XSS se produisent lorsqu&rsquo;un attaquant utilise une application Web pour envoyer un code malveillant, g\u00e9n\u00e9ralement sous la forme d&rsquo;un script c\u00f4t\u00e9 navigateur, \u00e0 un autre utilisateur final.<\/p>\n<\/blockquote>\n<p>et:<\/p>\n<blockquote>\n<p>Cross-Site Request Forgery (CSRF) est une attaque qui force un utilisateur final \u00e0 ex\u00e9cuter des actions ind\u00e9sirables sur une application Web dans laquelle il est actuellement authentifi\u00e9.<\/p>\n<\/blockquote>\n<p>Voil\u00e0, en bref, pourquoi nous devons utiliser WordPress comme proxy. Naturellement, cependant, cela soul\u00e8ve la question de savoir comment?<\/p>\n<h3>Utiliser WordPress comme proxy<\/h3>\n<p>Pour ce faire, vous aurez besoin de plusieurs choses :<\/p>\n<ol>\n<li>\u00a0une page que votre requ\u00eate Ajax peut interroger,<\/li>\n<li>une fonction pour intercepter la requ\u00eate ajax et l&rsquo;envoyer \u00e0 la bonne URL,<\/li>\n<li>un moyen pour le c\u00f4t\u00e9 serveur d&rsquo;analyser la r\u00e9ponse,<\/li>\n<li>une fonction pour renvoyer les donn\u00e9es \u00e0 la fonction Ajax d&rsquo;origine.<\/li>\n<\/ol>\n<p>Encore une fois, par souci d&rsquo;espace, je ne fournirai pas d&rsquo;exemple d\u00e9taill\u00e9 de cela, mais cela devrait suffire \u00e0 vous aider \u00e0 d\u00e9marrer.<\/p>\n<p>Tout d&rsquo;abord, vous devez vous assurer que vous disposez d&rsquo;une fonction d\u00e9finie pour intercepter votre requ\u00eate Ajax. Il y a d\u00e9j\u00e0 beaucoup de documentation \u00e0 ce sujet dans le Codex. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/833c1d1819b8863697aea00a716b2116#file-01_get_columns-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Un exemple simple<\/a> de ceci ressemblerait \u00e0 ceci:<\/p>\n<pre><code>var _get_columns = function() {\n\n    \/\/ Don't forget to use a nonce or security value here.\n    var data = {\n        'action':   'get_all_columns'\n            'security': '&lt;?php echo wp_create_nonce( \"acme-security-ajax-nonce\" ); ?&gt;'\n    };\n\n    \/\/ TODO Check for error logging if the response value doesn't exist.\n    $.get( ajaxurl, data, function( response) {\n\n        response = $.parseJSON( response );\n        \/\/ Your custom functionality here\n    });\n};\n<\/code><\/pre>\n<p>Ensuite, vous avez besoin d&rsquo;une page sur le serveur pour faire une demande \u00e0 l&rsquo;URL qui contient vos donn\u00e9es. Cela peut \u00eatre fait en utilisant <a href=\"https:\/\/curl.haxx.se\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cURL<\/a>, cela peut \u00eatre fait en utilisant <a href=\"https:\/\/php.net\/manual\/en\/function.file-get-contents.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">file_get_contents<\/a>, et cela peut \u00eatre fait par d&rsquo;autres moyens.<\/p>\n<p>Parce que je ne sais pas et que je ne veux pas fournir d&rsquo;exemple normatif, je vais partager une d\u00e9monstration tr\u00e8s simple de la fa\u00e7on dont cela pourrait fonctionner (<a href=\"https:\/\/gist.github.com\/tommcfarlin\/833c1d1819b8863697aea00a716b2116#file-02-wp_ajax_get_all_data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">au moins dans les premi\u00e8res \u00e9tapes<\/a> ):<\/p>\n<pre><code>&lt;?php\n\nadd_action( 'wp_ajax_get_all_data', 'get_all_data' );\n\/**\n * Retrieves the requested data from the specified URL \n * returns the values in JSON.\n *\/\nfunction get_all_data() {\n\n  \/\/ Note $url is up to you.\n  $curl = curl_init( $url );\n\n  curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );                         \n  curl_setopt( $curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY );                    \n  curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );                          \n  curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );                           \n\n  $response     = curl_exec( $curl );                                          \n  $resultStatus = curl_getinfo( $curl );                                   \n\n  if( 200 !== $resultStatus['http_code']) {\n    echo 'Call Failed '.print_r( $result_status );                         \n  }\n  curl_close( $curl );\n\n  echo json_encode( utf8_encode( $response) ); \n  wp_die();\n}\n<\/code><\/pre>\n<p>Lorsque vous recevez une r\u00e9ponse, vous pouvez choisir de l&rsquo;analyser c\u00f4t\u00e9 serveur (ce que je recommande) et de la renvoyer en utilisant un format l\u00e9ger \u00e0 la fonction JavaScript d&rsquo;origine, comme indiqu\u00e9 ci-dessus. Notez que j&rsquo;utilise <a href=\"https:\/\/php.net\/manual\/en\/function.json-encode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">json_encode<\/a> dans le code ci-dessus.<\/p>\n<p>\u00c0 partir de l\u00e0, vous pouvez ensuite faire tout ce que vous devez faire sur la page en question avec les donn\u00e9es dont vous disposez. Notez que les informations sont contenues dans l&rsquo;objet de r\u00e9ponse et que vous devrez peut-\u00eatre inspecter ce qu&rsquo;il contient afin de le g\u00e9rer correctement. Ceci est accompli et d\u00e9montr\u00e9 dans le code ci-dessus.<\/p>\n<p>Mais les d\u00e9tails de cela d\u00e9pendront fortement de ce que vous cherchez \u00e0 r\u00e9aliser.<\/p>\n<h2>WordPress en tant que proxy<\/h2>\n<p>En fin de compte, le flux de contr\u00f4le ressemble \u00e0 ceci\u00a0:<\/p>\n<p>Le but de tout ce qui pr\u00e9c\u00e8de est d&rsquo;aider \u00e0 fournir un peu d&rsquo;information sur les raisons pour lesquelles vous pouvez voir une partie du code que vous faites ainsi que sur la raison pour laquelle vous devez structurer votre code de cette mani\u00e8re.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Alors, qu&rsquo;est-ce que cela signifie d&rsquo;utiliser WordPress comme proxy chaque fois que vous travaillez avec des requ\u00eates Ajax ? D\u00e9couvrez ces exemples.<\/p>\n","protected":false},"author":1,"featured_media":223885,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,717,841,862],"tags":[1167],"class_list":["post-229308","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=229308"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229308\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/223885"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}