{"id":230064,"date":"2022-12-01T15:49:00","date_gmt":"2022-12-01T12:49:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230064"},"modified":"2022-11-09T19:56:04","modified_gmt":"2022-11-09T16:56:04","slug":"url-ide-puhastamine-wordpressis","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/url-ide-puhastamine-wordpressis\/","title":{"rendered":"URL-ide puhastamine WordPressis"},"content":{"rendered":"\n<p>T\u00f6\u00f6tamine WordPressi kasutajakesksete v\u00e4ljadega \u2013 nagu <code>input<\/code>elemendid, <code>textarea<\/code>elemendid v\u00f5i mis tahes t\u00fc\u00fcpi v\u00e4ljad, kuhu kasutaja saab ise v\u00e4\u00e4rtusi anda \u2013 on koht, mis peaks alati olema desinfitseerimise sihtm\u00e4rk.<\/p>\n<p>\u00d5nneks pakub WordPressi API <strong><a href=\"https:\/\/codex.wordpress.org\/Validating_Sanitizing_and_Escaping_User_Data\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selle lahendamiseks mitmeid funktsioone<\/a><\/strong>. Olenevalt kasutusjuhust peate v\u00f5ib-olla tegema \u00fcht j\u00e4rgmistest.<\/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>v\u00f5i <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/files\/wp-includes\/formatting.php\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">rohkemgi<\/a><\/strong><\/li>\n<\/ul>\n<p>Ja need on k\u00f5ik head, kuid on ka viise, kuidas saate PHP pakutavate funktsioonide abil andmeid puhastada.<\/p>\n<p>Muidugi, m\u00f5nikord on regulaaravaldiste kasutamine \u00f5ige tee, kuid m\u00f5nikord v\u00f5iksite kasutada keele sisse ehitatud, lihtsamini m\u00f5istetavaid ja h\u00f5lpsamini j\u00e4lgitavaid vahendeid.<\/p>\n<p>Enda koodi kirjutades (ja teisi arvustades) p\u00fc\u00fcan seda meeles pidada. Sellele vaatamata v\u00f5ib siin olla protsess, mida saate WordPressis URL-idega t\u00f6\u00f6tades lihtsamaks teha.<\/p>\n<p>Kui te ei soovi selle \u00fcle t\u00e4ielikku arutelu, v\u00f5ite h\u00fcpata postituse allosas oleva pealkirja juurde, mis kirjeldab koodi ja selle kasutamist oma t\u00f6\u00f6s.<\/p>\n<p>Oletame, et teil on avatud <code>input<\/code>element ja soovite lubada kasutajal esitada URL-i, mis l\u00f5puks renderdatakse esiotsas ehk lingina, teatud t\u00fc\u00fcpi skeemis v\u00f5i lihtsalt sellisel kujul, nagu see on.<\/p>\n<p>V\u00f5imalik on olla t\u00f5eliselt agressiivne ja teha lihtsalt midagi sellist nagu &quot;Kui see pole kehtiv URL, siis \u00e4rge seda salvestage.&quot;<\/p>\n<p>Ja et olla selge, ma ei v\u00e4ida, et kehtiv URL ei tagasta 404 (sest m\u00f5nikord on lehed olemas ja aastaid hiljem mitte). M\u00e4\u00e4ran kehtiva URL-i sellisena, mis on korralikult vormindatud ja ei sisalda k\u00f5rvalist teavet.<\/p>\n<p>\u00dctle nii, et selle lihtsa n\u00e4ite huvides pakute v\u00e4lja tekstiv\u00e4lja, mis l\u00f5puks salvestatakse postituse metaandmete tabelisse. Lisaks eemaldate URL-ist k\u00f5ik ebaseadusliku ja j\u00e4tate alles ainult need, mis loovad kehtiva URL-i.<\/p>\n<p>Minu arvates on selleks k\u00f5ige kasulikumad j\u00e4rgmised funktsioonid:<\/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\">riba_sildid<\/a>. Eemaldage stringist HTML- ja PHP-sildid.<\/li>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.stripslashes.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kaldkriipsud<\/a>. T\u00fchistab jutum\u00e4rgiga stringi.<\/li>\n<li><a href=\"https:\/\/secure.php.net\/manual\/en\/function.filter-var.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">filter_var<\/a>. Filtreerib muutuja m\u00e4\u00e4ratud filtriga.<\/li>\n<\/ul>\n<p>Viimane k\u00f5lab pisut segadusse ajav, kuna see p\u00f5hineb ideel, et saate aru, mis filtrid tegelikult on. PHP-s saab filtrid jagada kaheks kasutusjuhtumiks:<\/p>\n<ol>\n<li>Kinnitamine<\/li>\n<li>Desinfitseerimine<\/li>\n<\/ol>\n<p>Ja need on sisuliselt eelseadistatud viisid, kuidas saaksime andmeid t\u00f6\u00f6delda viisil, mis t\u00f6\u00f6tleb andmeid, et teha kindlaks, kas see on otsitava teabe t\u00fc\u00fcp, tavaliselt string v\u00f5i massiiv.<\/p>\n<h3>Selle t\u00f6\u00f6le panemine<\/h3>\n<p>Seda silmas pidades <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/590bbb593f01fe95ce0b11106e7e86cb#file-00-saving-data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">v\u00f5ite proovida<\/a><\/strong> teavet andmebaasi salvestada ilma igasuguse desinfitseerimiseta (mis on halb):<\/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>\u00dclaltoodud koodi abil saab kasutaja s\u00f5na otseses m\u00f5ttes sisestada v\u00e4ljale \u00fcksk\u00f5ik mida ja lasta selle andmebaasi salvestada. Seet\u00f5ttu on desinfitseerimine oluline. Ilma selleta v\u00f5ib kasutaja kasutajakogemust v\u00f5i kogu WordPressi installi kahjustada.<\/p>\n<p>Kuidas n\u00e4eb v\u00e4lja URL-ide puhastamisel \u00fclaltoodud koodi rakendamine? \u00dcldiselt <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/590bbb593f01fe95ce0b11106e7e86cb#file-01-serializing-data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">n\u00e4eb see v\u00e4lja selline<\/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>Esiteks k\u00e4ivitatakse kood l\u00e4bi PHP filtri, mis kinnitab URL-i. Kui filtrifunktsiooni edastatud string ei t\u00f6\u00f6ta isegi URL-ina, tagastab funktsioon <code>false<\/code>.<\/p>\n<p>Kui see aga t\u00f6\u00f6tab kehtiva URL-ina, saame eemaldada k\u00f5ik mittevajalikud kaldkriipsud. See t\u00e4hendab, et me saame t\u00fchistada k\u00f5ik tsiteeritud stringid. T\u00e4psemalt eemaldab see esimese j\u00e4rjestikuse kaldkriipsu (sest PHP-s kasutatakse kaldkriipsu p\u00f5genemiseks). Selge? \ud83d\ude42<\/p>\n<p>L\u00f5puks otsustame sildid eemaldada, kuna tahame ainult URL-i ennast. Me ei taha mingeid m\u00e4rgistusi, silte ega midagi, mis v\u00f5iks andmebaasi kirjutatavaid andmeid saboteerida. See t\u00e4hendab, et kui otsustate k\u00e4itada midagi sellist:<\/p>\n<pre><code>https:\/\/tommcfarlin.com\/&lt;script type=\"text\/javascript\"&gt;alert('hello world!');&lt;\/script&gt;<\/code><\/pre>\n<p>Sulle j\u00e4\u00e4b:<\/p>\n<pre><code>\"https:\/\/tommcfarlin.com\/alert('hello world!');\"<\/code><\/pre>\n<p>Nii et kogu \u00fclaltoodud koodi \u00fchendamine selle stringi abil:<\/p>\n<pre><code>https:\/\/tommcfarlin.com\/&lt;script type=\"text\/javascript\"&gt;alert('hello world!');&lt;\/script&gt;'<\/code><\/pre>\n<p>Tulemuseks on j\u00e4rgmine v\u00e4ljund:<\/p>\n<pre><code>https:\/\/tommcfarlin.com\/alert('hello world!');<\/code><\/pre>\n<p>See ei ole ilmselt kehtiv URL, kuid see on puhas, turvaline ja v\u00f5imaldab teil teha muid t\u00f6id, mida peate tegema URL-i kasutajale ohutuks kinnitamiseks.<\/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>Kolm funktsiooni, mida saate kasutada koos \u00fcksteisega URL-ide korralikuks puhastamiseks WordPressis enne nende andmebaasi kirjutamist.<\/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":[894,842,802,863],"tags":[1165],"class_list":["post-230064","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kood","category-opetused","category-php-4","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230064","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=230064"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230064\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/163470"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=230064"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=230064"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=230064"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}