{"id":230060,"date":"2022-12-01T16:12:00","date_gmt":"2022-12-01T13:12:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230060"},"modified":"2022-11-09T19:55:20","modified_gmt":"2022-11-09T16:55:20","slug":"sanering-av-webbadresser-i-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/sanering-av-webbadresser-i-wordpress\/","title":{"rendered":"Sanering av webbadresser i WordPress"},"content":{"rendered":"\n<p>Att arbeta med anv\u00e4ndarcentrerade f\u00e4lt i WordPress \u2013 som <code>input<\/code>element, <code>textarea<\/code>element eller vilken typ av f\u00e4lt som helst d\u00e4r en anv\u00e4ndare kan ange sina egna v\u00e4rden \u00e4r en plats som alltid b\u00f6r vara ett m\u00e5l f\u00f6r sanering.<\/p>\n<p>Lyckligtvis tillhandah\u00e5ller WordPress API <strong><a href=\"https:\/\/codex.wordpress.org\/Validating_Sanitizing_and_Escaping_User_Data\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ett antal funktioner<\/a><\/strong> f\u00f6r att hj\u00e4lpa till med detta. Beroende p\u00e5 ditt anv\u00e4ndningsfall kan du beh\u00f6va g\u00f6ra n\u00e5got av f\u00f6ljande:<\/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>eller <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/files\/wp-includes\/formatting.php\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mer<\/a><\/strong><\/li>\n<\/ul>\n<p>Och de \u00e4r alla bra men det finns ocks\u00e5 s\u00e4tt p\u00e5 vilka du kan arbeta f\u00f6r att sanera data med hj\u00e4lp av funktioner som tillhandah\u00e5lls av PHP.<\/p>\n<p>Visst, ibland \u00e4r regulj\u00e4ra uttryck r\u00e4tt v\u00e4g att g\u00e5, men andra g\u00e5nger kanske du vill anv\u00e4nda faciliteter som \u00e4r inbyggda i spr\u00e5ket, l\u00e4ttare att f\u00f6rst\u00e5 och l\u00e4ttare att f\u00f6lja.<\/p>\n<p>N\u00e4r jag skriver min egen kod (och n\u00e4r jag granskar andra) f\u00f6rs\u00f6ker jag ha det i \u00e5tanke. S\u00e5 med det sagt, h\u00e4r \u00e4r en process som du kan anv\u00e4nda som kan g\u00f6ra dina anstr\u00e4ngningar enklare n\u00e4r du arbetar med webbadresser i WordPress.<\/p>\n<p>Om du inte \u00e4r redo f\u00f6r hela diskussionen om detta kan du hoppa ner till rubriken l\u00e4ngst ner i inl\u00e4gget som beskriver koden och hur du anv\u00e4nder den i ditt arbete.<\/p>\n<p>L\u00e5t oss s\u00e4ga att du har ett \u00f6ppet <code>input<\/code>element och du vill till\u00e5ta anv\u00e4ndaren att tillhandah\u00e5lla en URL som s\u00e5 sm\u00e5ningom kommer att renderas p\u00e5 front-end, kanske i en l\u00e4nk, i n\u00e5gon typ av schema, eller helt enkelt som den \u00e4r.<\/p>\n<p>Det \u00e4r m\u00f6jligt att vara riktigt aggressiv och helt enkelt g\u00f6ra n\u00e5got som &quot;Om det h\u00e4r inte \u00e4r en giltig URL, spara den inte.&quot;<\/p>\n<p>Och, f\u00f6r att vara tydlig, jag s\u00e4ger inte att en giltig URL inte returnerar en 404 (f\u00f6r ibland finns sidor och flera \u00e5r senare g\u00f6r de det inte). Jag definierar en giltig webbadress som en som \u00e4r korrekt formaterad och inte inneh\u00e5ller n\u00e5gon ovidkommande information.<\/p>\n<p>S\u00e5 s\u00e4g, f\u00f6r detta enkla exempels skull, erbjuder du ett textf\u00e4lt som s\u00e5 sm\u00e5ningom kommer att sparas i postmetadatatabellen. Vidare kommer du att ta bort allt som \u00e4r olagligt i en URL och l\u00e4mna bara det som skulle skapa en giltig URL.<\/p>\n<p>F\u00f6r att g\u00f6ra det tycker jag att f\u00f6ljande funktioner \u00e4r mest anv\u00e4ndbara:<\/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>. Ta bort HTML- och PHP-taggar fr\u00e5n en str\u00e4ng.<\/li>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.stripslashes.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">streckstreck<\/a>. Av-citerar en str\u00e4ng med citat.<\/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>. Filtrerar en variabel med ett specificerat filter.<\/li>\n<\/ul>\n<p>Det senare l\u00e5ter lite f\u00f6rvirrande eftersom det bygger p\u00e5 tanken att du f\u00f6rst\u00e5r vad filter faktiskt \u00e4r. I PHP kan filter delas upp i tv\u00e5 anv\u00e4ndningsfall:<\/p>\n<ol>\n<li>Godk\u00e4nnande<\/li>\n<li>Sanering<\/li>\n<\/ol>\n<p>Och de \u00e4r i huvudsak f\u00f6rbyggda s\u00e4tt f\u00f6r oss att bearbeta data p\u00e5 ett s\u00e5dant s\u00e4tt som bearbetar data f\u00f6r att avg\u00f6ra om det \u00e4r den typ av information, vanligtvis en str\u00e4ng eller en array, som vi letar efter.<\/p>\n<h3>Att s\u00e4tta det i arbete<\/h3>\n<p>Med det i \u00e5tanke, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/590bbb593f01fe95ce0b11106e7e86cb#file-00-saving-data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r kan du f\u00f6rs\u00f6ka<\/a><\/strong> spara information till databasen utan n\u00e5gon typ av sanering (vilket \u00e4r en d\u00e5lig sak):<\/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>Med koden ovan kan anv\u00e4ndaren bokstavligen skriva in vad som helst i f\u00e4ltet och f\u00e5 det sparat i databasen. Det \u00e4r d\u00e4rf\u00f6r det \u00e4r viktigt med sanering. Utan det kan anv\u00e4ndaren f\u00f6rst\u00f6ra anv\u00e4ndarupplevelsen eller hela WordPress-installationen.<\/p>\n<p>S\u00e5 hur ser det ut att anv\u00e4nda koden ovanifr\u00e5n n\u00e4r du sanerar webbadresser? Generellt sett ser det <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/590bbb593f01fe95ce0b11106e7e86cb#file-01-serializing-data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ut s\u00e5 h\u00e4r<\/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>F\u00f6rst k\u00f6rs koden genom ett PHP-filter som validerar en URL. Om str\u00e4ngen som skickas in i filterfunktionen inte ens fungerar som en URL, kommer funktionen att returnera <code>false<\/code>.<\/p>\n<p>Om det \u00e5 andra sidan fungerar som en giltig URL, kan vi ta bort alla snedstreck som inte beh\u00f6vs. Det betyder att vi kan &quot;ta bort citat fr\u00e5n alla str\u00e4ngar som citeras.&quot; Mer exakt kommer detta att ta bort det f\u00f6rsta snedstrecket i f\u00f6ljd (eftersom, i PHP, anv\u00e4nds omv\u00e4nt snedstreck f\u00f6r att undvika ett snedstreck). Klar? \ud83d\ude42<\/p>\n<p>Slutligen v\u00e4ljer vi att ta bort taggarna eftersom vi bara vill ha sj\u00e4lva webbadressen. Vi vill inte ha n\u00e5gra markeringar, taggar eller n\u00e5got som kan sabotera data som skrivs in i databasen. Detta betyder att om du v\u00e4ljer att k\u00f6ra n\u00e5got som:<\/p>\n<pre><code>https:\/\/tommcfarlin.com\/&lt;script type=\"text\/javascript\"&gt;alert('hello world!');&lt;\/script&gt;<\/code><\/pre>\n<p>Du kommer att sitta kvar med:<\/p>\n<pre><code>\"https:\/\/tommcfarlin.com\/alert('hello world!');\"<\/code><\/pre>\n<p>S\u00e5 s\u00e4tt ihop all ovanst\u00e5ende kod med den h\u00e4r str\u00e4ngen:<\/p>\n<pre><code>https:\/\/tommcfarlin.com\/&lt;script type=\"text\/javascript\"&gt;alert('hello world!');&lt;\/script&gt;'<\/code><\/pre>\n<p>Kommer att resultera i f\u00f6ljande utdata:<\/p>\n<pre><code>https:\/\/tommcfarlin.com\/alert('hello world!');<\/code><\/pre>\n<p>Detta \u00e4r uppenbarligen inte en giltig URL men den \u00e4r ren, s\u00e4ker och l\u00e5ter dig utf\u00f6ra allt annat arbete du kan beh\u00f6va g\u00f6ra f\u00f6r att validera att webbadressen \u00e4r s\u00e4ker f\u00f6r anv\u00e4ndaren.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <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 funktioner som du kan anv\u00e4nda tillsammans med varandra f\u00f6r att korrekt sanera webbadresser i WordPress innan du skriver dem till databasen.<\/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":[848,901,807,868],"tags":[1173],"class_list":["post-230060","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-php-9","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230060","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=230060"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230060\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/163470"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230060"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230060"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}