{"id":230790,"date":"2022-12-01T15:49:00","date_gmt":"2022-12-01T12:49:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230790"},"modified":"2022-11-10T00:00:35","modified_gmt":"2022-11-09T21:00:35","slug":"disinfezione-degli-url-in-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/disinfezione-degli-url-in-wordpress\/","title":{"rendered":"Disinfezione degli URL in WordPress"},"content":{"rendered":"\n<p>Lavorare con campi incentrati sull&#8217;utente in WordPress, come <code>input<\/code>elementi, <code>textarea<\/code>elementi o qualsiasi tipo di campo in cui un utente pu\u00f2 fornire i propri valori \u00e8 un luogo che dovrebbe sempre essere un obiettivo di sanificazione.<\/p>\n<p>Fortunatamente, l&#8217;API di WordPress fornisce <strong><a href=\"https:\/\/codex.wordpress.org\/Validating_Sanitizing_and_Escaping_User_Data\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">una serie di funzioni<\/a><\/strong> per aiutare in questo. A seconda del caso d&#8217;uso, potrebbe essere necessario eseguire una delle seguenti operazioni:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/sanitize_text_field\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sanitize_text_field<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/esc_url\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">esc_url<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/sanitize_textarea_field\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sanitize_textarea_field<\/a><\/li>\n<li>o <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/files\/wp-includes\/formatting.php\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pi\u00f9<\/a><\/strong><\/li>\n<\/ul>\n<p>E quelli vanno tutti bene, ma ci sono anche modi in cui puoi lavorare per disinfettare i dati usando le funzioni fornite da PHP.<\/p>\n<p>Certo, a volte le espressioni regolari sono la strada da percorrere ma, altre volte, potresti voler utilizzare strutture integrate nel linguaggio, pi\u00f9 facili da capire e pi\u00f9 facili da seguire.<\/p>\n<p>Quando scrivo il mio codice (e quando ne rivedo altri) cerco di tenerlo a mente. Quindi, detto questo, ecco un processo che puoi utilizzare per semplificare i tuoi sforzi quando lavori con gli URL in WordPress.<\/p>\n<p>Se non sei pronto per la discussione completa su questo, puoi saltare al titolo in fondo al post che delinea il codice e come usarlo nel tuo lavoro.<\/p>\n<p>Diciamo che hai un <code>input<\/code>elemento aperto e vuoi consentire all&#8217;utente di fornire un URL che verr\u00e0 eventualmente visualizzato sul front-end, magari in un collegamento, in un tipo di schema o semplicemente cos\u00ec com&#8217;\u00e8.<\/p>\n<p>\u00c8 possibile essere davvero aggressivi e semplicemente fare qualcosa del tipo &quot;Se questo non \u00e8 un URL valido, non salvarlo&quot;.<\/p>\n<p>E, per essere chiari, non sto dicendo che un URL valido non restituisca un 404 (perch\u00e9 a volte le pagine esistono e anni dopo no). Sto definendo un URL valido come uno che \u00e8 formattato correttamente e non include alcuna informazione estranea.<\/p>\n<p>Ad esempio, per il bene di questo semplice esempio, stai offrendo un campo di testo che alla fine verr\u00e0 salvato nella tabella dei metadati del post. Inoltre, eliminerai tutto ci\u00f2 che \u00e8 illegale in un URL e lascerai solo ci\u00f2 che creerebbe un URL valido.<\/p>\n<p>Per fare ci\u00f2, trovo molto utili le seguenti funzioni:<\/p>\n<ul>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.strip-tags.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">strip_tags<\/a>. Elimina i tag HTML e PHP da una stringa.<\/li>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.stripslashes.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">stripslash<\/a>. Deseleziona una stringa tra virgolette.<\/li>\n<li><a href=\"https:\/\/secure.php.net\/manual\/en\/function.filter-var.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">var_filtro<\/a>. Filtra una variabile con un filtro specificato.<\/li>\n<\/ul>\n<p>Quest&#8217;ultimo suona un po &#8216;confuso perch\u00e9 si basa sull&#8217;idea che tu capisca cosa sono effettivamente i filtri. In PHP, i filtri possono essere suddivisi in due casi d&#8217;uso:<\/p>\n<ol>\n<li>Convalida<\/li>\n<li>Sanificazione<\/li>\n<\/ol>\n<p>E sono essenzialmente modi predefiniti per elaborare i dati in modo tale da elaborare i dati per determinare se \u00e8 il tipo di informazioni, di solito una stringa o un array, che stiamo cercando.<\/p>\n<h3>Metterlo al lavoro<\/h3>\n<p>Con questo in mente, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/590bbb593f01fe95ce0b11106e7e86cb#file-00-saving-data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ecco come potresti provare<\/a><\/strong> a salvare le informazioni nel database senza alcun tipo di sanificazione (che \u00e8 una brutta cosa):<\/p>\n<pre><code>&lt;?php\n$data['url'] = 'https:\/\/tommcfarlin.com\/&lt;script type=\"text\/javascript\"&gt;alert('hello world!');&lt;\/script&gt;';\n<\/code><\/pre>\n<p>Con il codice sopra, l&#8217;utente pu\u00f2 letteralmente inserire qualsiasi cosa nel campo e salvarlo nel database. Per questo la sanificazione \u00e8 importante. Senza di esso, l&#8217;utente pu\u00f2 devastare l&#8217;esperienza dell&#8217;utente o l&#8217;intera installazione di WordPress.<\/p>\n<p>Quindi, com&#8217;\u00e8 applicare il codice dall&#8217;alto durante la sanificazione degli URL? In generale, si <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/590bbb593f01fe95ce0b11106e7e86cb#file-01-serializing-data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">presenta cos\u00ec<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\nif (!isset($data['url']) {\n   return '';\n}\n\n$url = $data['url'];\n$data['url'] = strip_tags(\n  stripslashes(\n    filter_var($url, FILTER_VALIDATE_URL)) );\n<\/code><\/pre>\n<p>Innanzitutto, il codice viene eseguito attraverso un filtro PHP che convalida un URL. Se la stringa passata alla funzione di filtro non funziona nemmeno come URL, la funzione restituir\u00e0 <code>false<\/code>.<\/p>\n<p>Se, d&#8217;altra parte, funziona come un URL valido, possiamo rimuovere tutte le barre che non sono necessarie. Ci\u00f2 significa che possiamo &quot;annullare le virgolette di qualsiasi stringa tra virgolette&quot;. Pi\u00f9 precisamente questo eliminer\u00e0 la prima barra rovesciata consecutiva (perch\u00e9, in PHP, le barre rovesciate vengono utilizzate per sfuggire a una barra rovesciata). Chiaro? \ud83d\ude42<\/p>\n<p>Infine, scegliamo di rimuovere i tag perch\u00e9 vogliamo solo l&#8217;URL stesso. Non vogliamo alcun markup, tag o qualsiasi cosa che possa essere in grado di sabotare i dati scritti nel database. Ci\u00f2 significa che se scegli di eseguire qualcosa come:<\/p>\n<pre><code>https:\/\/tommcfarlin.com\/&lt;script type=\"text\/javascript\"&gt;alert('hello world!');&lt;\/script&gt;<\/code><\/pre>\n<p>Ti rester\u00e0:<\/p>\n<pre><code>\"https:\/\/tommcfarlin.com\/alert('hello world!');\"<\/code><\/pre>\n<p>Quindi mettendo insieme tutto il codice sopra usando questa stringa:<\/p>\n<pre><code>https:\/\/tommcfarlin.com\/&lt;script type=\"text\/javascript\"&gt;alert('hello world!');&lt;\/script&gt;'<\/code><\/pre>\n<p>Risulter\u00e0 nel seguente output:<\/p>\n<pre><code>https:\/\/tommcfarlin.com\/alert('hello world!');<\/code><\/pre>\n<p>Questo ovviamente non \u00e8 un URL valido ma \u00e8 pulito, sicuro e ti consente di eseguire qualsiasi altro lavoro che potresti dover fare per convalidare che l&#8217;URL sia sicuro per l&#8217;utente.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tre funzioni che puoi utilizzare in combinazione tra loro per disinfettare correttamente gli URL in WordPress prima di scriverli nel database.<\/p>\n","protected":false},"author":1,"featured_media":163470,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,804,844,865],"tags":[1168],"class_list":["post-230790","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-php-6","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230790","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=230790"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230790\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/163470"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=230790"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=230790"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=230790"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}