data sanitization og validering med wordpress

, data sanitization og validering med wordpress,,,,, 11,,,,,,,,, 47,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, at sikkerhed er afgørende for at holde din hjemmeside, eller at deres tema eller stik brugernes sikkerhed.en del af dette betyder passende validering af data og sanitization.i denne artikel, skal vi se på, hvorfor det er vigtigt, hvad der skal gøres, og hvilke funktioner wordpress yder hjælp. da der ser ud til at være forskellige fortolkninger af, hvad begreberne "validering", "flugt" og "sanitization", vil jeg først afklare, hvad jeg mener med dem i denne artikel:,, validering, – disse er den kontrol, der gennemføres for at sikre, at de oplysninger, du har, er, hvad det burde være.for eksempel, at en e - mail ligner en e - mail - adresse, en date er en dato, og at en række er (eller er støbt i) et heltal,, sanitization /flygter, – disse filtre, der anvendes på data for at gøre det sikkert i en særlig sammenhæng.for eksempel for at vise html kode i den tekst, det ville være nødvendigt at erstatte alle html mærker af deres enhed - ækvivalenter, hvorfor er sanitization vigtigt?når data er medtaget i en kontekst (f.eks. i en html dokument) –, at data kan tolkes som en kode for miljøet (f.eks. html code).hvis oplysningerne indeholder ondsindede koder, så at benytte data uden sanitizing det, betyder det, at adfærdskodeksen vil blive henrettet.den kode, ikke nødvendigvis skal være ondsindet, for at det kan medføre uønskede virkninger.det sanitization er at sikre, at enhver kode i data ikke fortolkes som en kode – ellers kan du ende som bobby tabeller "skole...,,, f.eks.: echo zeroise (70.4); //- 0070, e - mails, for at kontrollere gyldigheden af e - mails, wordpress har, is_email(), funktion.denne funktion anvender simple kontrol for at validere den adresse.for eksempel, det kontrollerer, at den indeholder de @ 'symbol, det er mere end 3 tegn, område indeholder kun alpha numerics og bindestreger, og så videre.det er klart, at det ikke kan kontrollere, at den e - mail - adresse, faktisk eksisterer.hvis den e - mail - adresse, vedtaget den kontrol, det er vendt tilbage, ellers "falske" er tilbage. $e - mail = is_email ('someone @ e ^ rigelig. kom); //$e - mail er falske.$e - mail = is_email ('someone @ f.eks. com '); //$e - mail er sat til en @ f.eks. com ". html, ofte kan man kun give nogle, html mærker i dine data – f.eks. kommentarer på din hjemmeside.wordpress er en familie af funktioner i den form, wp_kses_ * (kses blisterstrips onde manuskripter).disse funktioner (en del af) http: //fjerne mærker, og som kan bruges til at sikre, at forbindelser i data er af bestemte protokoller.for eksempel, wp_kses(), funktion accepterer tre argumenter:,, indhold, – (...) indhold filtreres gennem kses,, allowed_html, – et system, hvor hver nøgle er en tilladt html element, og værdien er et system af lov attributter for det element, allowed_protocols, – frivilligt.tilladt protokol i forbindelser (f.eks. http mailto,,,, foder osv.), wp_kses(), er en meget fleksibel funktion, som gør det muligt at fjerne uønskede mærker eller uønskede egenskaber fra hundetegn.For example, to only allow ,<strong>, or ,<a>, tags (but only allow the href attribute):, $content = "<em>Click</em> <a title='click for wp.tuts+' href='http://wp.tutsplus.com'>here</a> to visit <strong> wptuts+ </strong>"; echo wp_kses( $content, array( \t'strong' => array(), \t'a' => array('href') ) ); //Prints the HTML "Click <a href='http://wp.tutsplus.com'>here</a> to visit <strong> wptuts+ </strong>": Click <a href="http://wp.tutsplus.com">here</a> to visit <strong> wptuts+ </strong>,Of course, specifying every allowed tag and every allowed attribute can be a laborious task. så wordpress giver andre funktioner, der gør det muligt for dem at anvende, wp_kses med forudindstillede lov tags og protokoller – nemlig dem, der anvendes til validering af stillinger og bemærkninger:,,, wp_kses_post(),,, wp_kses_data(), ovennævnte funktioner er nyttige med henblik på at sikre, at html modtaget fra brugeren kun indeholder whitelisted elementer.når vi har gjort det, vi vil også gerne sikre, at hvert mærke, er afbalanceret, det er enhver åbning mærke har en tilsvarende afsluttende navneskilt.for det, vi kan bruge, balancetags(),.This function accepts two arguments:, ,content, – Content to filter and balance tags of, ,force balance, – True or false, whether to force the balancing of tags, , //Content with missing closing </strong> tag $content = "<em>Click</em> <a href='http://wp.tutsplus.com'>here</a> to visit <strong> wptuts+"; echo balanceTags($content,true), //Prints the HTML "Click <a href='http://wp.tutsplus.com'>here</a> to visit <strong> wptuts+ </strong>",Filenames,If you want to create a file in one of your website's directories, you will want to ensure the filename is both valid and legal. du vil også gerne vil sikre, at filnavn er enestående for denne database.for det wordpress bestemmer:,, sanitize_file_name ($filnavn), – sanitizes (eller validerer) filnavnet ved at fjerne de personer, der er ulovligt i filenames om visse operationelle systemer eller det ville kræve at flygte på kommando linjen.i stedet for rum med streger og på hinanden følgende tegn med en enkelt streg og fjerner perioder bindestreger og understreger fra begyndelsen og slutningen af filnavn.,, wp_unique_filename ($), $filnavn), – returnerer et enestående (fortegnelse, $),), renset filnavn (den bruger, sanitize_file_name,), data. fra tekst områder, når de modtager data, ligger i en tekst, vil du sikkert gerne strimmel ud ekstra hvidt rum, stropper og linjeskift samt fjerner et hundetegn.for det wordpress giver, sanitize_text_field(),., nøgler, wordpress indeholder også bestemmelser, sanitize_key,.det er en meget generisk (og undertiden nyttigt) funktion.det sikrer tilbage variabel indeholder kun små alpha numerics, bindestreger, og understreger, sanitization data, mens validering er optaget af at sikre data er gyldig – data sanitization handler om at gøre det sikkert.mens nogle af valideringen funktioner, der er omhandlet ovenfor kan være nyttige for at sikre, at data er sikkert – generelt, er det ikke tilstrækkeligt.selv »gældende« data kan være farlige i visse sammenhænge.,, regel nr. 4: data om sikkerhed er led, simpelthen ikke kan spørge: "hvordan skal jeg gøre disse data?",.i stedet burde du spørge: "hvordan skal jeg gøre disse data i sikkerhed for at bruge den i x". for at illustrere dette, har du vel en dims med en textarea, hvor du har til hensigt at give brugerne adgang til en html.hvis de så træde:, < textarea navn = "min textarea" > < /textarea > - verden, det er gyldig, og sikre, – http: //imidlertid, når du klik redde, finder vi, at teksten er hoppet ud af den textarea.det er ikke sikkerthttp: //kode som en værdi for textarea:,, hvad der er sikkert at bruge i en sammenhæng, der ikke nødvendigvis er i sikkerhed i en anden.når du bruger eller visning af data, må du huske på, hvilke former for sanitization skal gøres for at gøre brug af oplysningerne i sikkerhed.det er derfor, wordpress ofte giver flere funktioner i samme indhold, f.eks.:,, the_title, – for at anvende afsnit i standard html (indenfor header mærker, f.eks.), the_title_attribute, – for anvendelse af titlen som en attribut værdi (normalt attributten title på < en >, tags), the_title_rss, – for at anvende afsnit i rss feeds, alt dette, udføre de nødvendige sanitization i en særlig sammenhæng –, og hvis du bruger dem, du skal være sikker på at bruge den rigtige.nogle gange, vi skal udføre vores egen sanitization – ofte, fordi vi har skik bidrag ud over den normale efter afsnit, permalink, indhold osv. det wordpress håndtag til os. at flygte html, når trykningen variabler til side, vi skal være opmærksomme på, hvordan de - vil fortolke dem.lad os overveje følgende eksempel:, < h1 > <?php echo $afsnit?> < /h1 > hvis $afsnit = < manuskript > indberetning ('injected javascript) < /manuskript >,.i stedet for at vise de: < manuskript >, mærkater, vil de blive fortolket som html og de vedlagte javascript vil blive indsprøjtet i side. denne form for injektion (som også påvist i eftersøgningen form eksempel) kaldes, cross - site scripting, og denne velgørende eksempel modsiger dens alvor.injiceret manuskript kan i alt væsentligt kontrol - og handle på vegne af brugeren eller stjæle brugerens småkager.dette bliver endnu mere alvorligt, hvis brugeren er logget på.for at forhindre variabler trykt i html fortolkes som: wordpress er velkendt, esc_html, funktion.i dette eksempel:, < h1 > <?php echo esc_html ($afsnit).> < /h1 >, at flygte fra attributter, nu overveje følgende eksempel:, <?php $værdi = min værdi "onfocus =" indberetning (\\ "injiceres javascript." "';?> < input type = "tekst" navn = "myinput" værdi = "<?php echo $værdi?> "/>, for $værdi, indeholder to citater, unescaped kan hoppe ud af værdien attribut og injicer manuskript, f.eks. ved at bruge den, onfocus, attribut.for at undgå usikre tegn (f.eks. citater, og to citater, i dette tilfælde), wordpress giver den funktion, esc_attr,.som esc_html, erstatter "usikre" tegn, som deres virksomhed - ækvivalenter.faktisk, på tidspunktet for udarbejdelsen af disse funktioner er identiske –, men du skal stadig bruge en, der er passende for en sammenhæng. i dette eksempel, vi bør have, <?php $værdi = min værdi "onfocus =" indberetning (\\ "injiceres javascript." "';?> < input type = "tekst" navn = "myinput" værdi = "<?php echo esc_attr ($værdi).> "/> både, esc_html, og esc_attr, også kommer med, __,, _e, og _x varianter.,, esc_html__ ('text at oversætte", "stik af domænet"), /, esc_attr__, – returnerer den flygtede oversatte tekst,,, esc_html_e ('text at oversætte "," stik af domænet "), /, esc_attr_e, – viser den flygtede oversatte tekst, og endelig, esc_html_x ('text at oversætte, $sammenhæng," stik af domænet "), /, esc_attr_x, – oversætter teksten i henhold til den døde sammenhæng og vender tilbage, de flygtede oversættelse, html klasse navne, for klasse navne, wordpress giver, sanitize_html_class, – denne undslipper variabler til brug i klasse navne, blot ved at begrænse den resulterende værdi til alpha numerics, bindestreger og understreger.bemærk: det er ikke sikre klasse navn er gyldig (reference: http: //www.w3.org /tr /css21 /syndata. html&#værdi def identifier). i css, identifikatorer kan kun indeholder tegn, [a-za-z0-9], og iso 10646 tegn e + 00a0 og højere, plus en bindestreg (-), og understreger, _). de kan begynde med et tal, to bindestreger eller en bindestreg, efterfulgt af et tal.identifikatorer kan også indeholde flygtede personer og en iso 10646 karakter som en numerisk kode,.,, at ip - adresser, lad os se på en almindelig praksis, trykning variabler i, href, tilskriver:, < en href = "<?php echo $url;?> "afsnit =" sammenhæng "> forbindelse tekst < /a > det er sårbar over for den samme form for angreb, som illustreret i at flygte html og attributter.men hvad hvis $url, var som følger: $url = javascript: indberetning ().'injected javascript ('), at forbindelsen, indberetningen funktion ville blive fyret.det indeholder ingen html eller prisstillelser, der gør det muligt for det at springe ud af href attribut – så esc_attr, er ikke tilstrækkeligt.det er derfor sammenhæng spørgsmål:, esc_attr ($url), ville være sikker i, afsnit attribut, men ikke for det, – href, giver, og det er på grund af den javascript protokol –, der samtidig helt, gyldig, – anses ikke for at være i sikkerhed i denne sammenhæng.i stedet bør du bruge:,, esc_url, – for at undgå url - adresser, der vil blive trykt på den side.,, esc_url_raw, – for at undgå url - adresser for at redde til databasen eller anvendelse i url omdirigere.,,, esc_url, bånd forskellige ubehagelige personer, og erstatter noteringer og ampersands med deres virksomhed - ækvivalenter.det kontrollerer, at den protokol, der anvendes, er tilladt (javascript ved misligholdelse, ikke). det esc_url_raw, er næsten identisk med, esc_url,, men det erstatter ikke ampersands og fælles citater, som du ikke vil med, når man anvender url som en url, snarere end at vise det.. i dette eksempel, er vi der, url, så vi bruger, esc_url:,, < en href = "<?php echo esc_url ($url).> "afsnit =" sammenhæng "> forbindelse tekst < /a >, selv om det ikke er nødvendigt i de fleste tilfælde acceptere et frivilligt system både funktioner at angive, hvilke protokoller (såsom http, ftp, https,,,, ftps,, mailto, osv.), de ønsker at tillade, at javascript, du vil trykke javascript variabler til en side (normalt i hovedet):, < manuskript > var myvar = <?php echo $variable;?> < /manuskript > i virkeligheden, hvis du gør det, du skal helt sikkert brug for wp_localize_script(), –, der håndterer sanitization for dig.(hvis der er nogen, der kan finde en grund til, at du er nødt til at anvende de ovennævnte metode, men jeg vil gerne høre det. imidlertid, at ovenstående eksempel sikkerhed, du kan bruge den, esc_js, funktion:, < manuskript > var myvar = <?php echo esc_js ($variabel)?> < /manuskript >, at flygte fra textarea, når med indhold i en textarea, esc_html, ikke er tilstrækkelig, fordi den ikke dobbelt indkodning af enheder.for eksempel:, <?php $var = < stærk > tekst < /stærk > & lt b & gt dristige & lt; /b & gt?> < textarea > <?php echo esc_html ($var)?> < /textarea >, $var trykt på den textarea vil fremstå som:, < stærk > tekst < /stærk > < b > dristige < /b > snarere end også noget, & som, & amp; i, < b >, hundetegn. for det wordpress giver, esc_textarea,, som næsten er identiske med, esc_html,, men gør dobbelt indkodning af enheder.i virkeligheden er lidt mere end et stykke papir, htmlspecialchars,.i dette eksempel:, <?php $var = < stærk > tekst < /stærk > & lt b & gt dristige & lt; /b & gt?> < textarea > <?php echo esc_textarea ($var)?> < /textarea >, antispambot, herunder e - mail - adresser på din hjemmeside er tilbøjelige til e - mail - maskine.en enkel metode er at skjule den e - mail - adresse.wordpress giver, antispambot,, som koder tilfældige dele af e - mail - adresse i deres html enheder (hexadecimal ækvivalenter, hvis $mailto = 1).på hver side belastning kodning bør være forskellige, og mens de returnerede adresse gør korrekt i browseren, bør det anføres som kancellistil til spambots.den funktion, accepterer to argumenter:,, e - mail, – adressen til at forvirre,, mailto, – 1, 0 1, hvis anvendelse af mailto protokol i forbindelse tag), $e - mail = "joebloggs @ f.eks. com". $e - mail = sanitize_email ($e - mail), echo "< en href =" mailto: «. antispambot ($e - mail, 1). '"afsnit =" klik til at e - maile mig ">". antispambot ($e - mail). < /a > «, indeholder strenge, hvis de ønsker at tilføje eller fjerne) variabler fra en forespørgsel. (dette er meget nyttigt, hvis du ønsker at give mulighed for at vælge en ordre på jeres poster), den sikreste og letteste måde at anvende, add_query_arg, og remove_query_arg,.disse funktioner klare alle nødvendige at flygte for de argumenter og deres værdier til brug i url.,, add_query_arg, accepterer to argumenter:,, indeholder parametre, – en automatiseret system af parametre - > værdier, url, – url - at tilføje de parametre, og deres værdier.hvis ikke, url af den aktuelle side, anvendes,,, remove_query_arg, accepterer også to argumenter, for det første en række parametre til at fjerne, den anden er som ovenfor. //, hvis vi er i www.example.com/wp-admin/edit.php?post_type = bog $query_params = system ('page = > min bage) $url = add_query_arg ($query_params); //ville være $http: //www.example.com/wp-admin/edit.php?post_type = bog & s = min side, validering & sanitization, som tidligere nævnt, sanitization giver ikke meget mening, uden at der er en sammenhæng –, så det er ret meningsløst at sterilisere data, når de skriver til databasen.ofte, er du nødt til at opbevare data i den rå format, og under alle omstændigheder – regel nr. 1 dikterer, at vi altid må sterilisere på produktion, validering af data, på den anden side bør ske, så snart den har modtaget, og før det er skrevet til databasen.det er tanken, at ugyldige data bør enten være auto korrigeres, eller være registreret i oplysninger, og kun gyldige data bør gives til databasen. det sagde – vil du måske også udføre validering, når data vises også.faktisk nogle gange "validering" vil også sikre data er i sikkerhed.men prioriteringen her er i sikkerhed - - og du bør undgå overdreven validering, der ville løbe på hver side belastning (, wp_kses_ *, funktioner, for eksempel, er meget dyre at udføre).,, database, flygter, når der anvendes funktioner såsom, get_posts eller klasser som, wp_query, og wp_user_query,, wordpress tager sig af de nødvendige sanitization i en forespørgsel til databasen.men når genfinde data fra en skik tabel, eller på anden måde at udføre direkte sql spørgsmål om database – korrekt sanitization er så op til dig.wordpress giver imidlertid en nyttig klasse, $wpdb, klasse, som hjælper med at undslippe sql spørgsmål. lad os tage det grundlæggende, udvælge, kommando, hvor $alder og $firstname, er variable lagring af en alder og navn, at vi spørger os selv: vælg * hvor alder = "$alder og firstname = $firstname. vi har ikke undgået disse variabler, så som potentielt yderligere kommandoer kan injiceres i.lånoptagelse xkcd eksempel fra ovenstående: $alder = 14 $firstname = "robert, smid tabel studerende." $sql = "vælge hvor alder = $alder og firstname = $firstname." $resultater = $wpdb - > spørgsmål, vil løbe som kommando (er): vælg * hvor alder = »14 og firstname =, robert, smid tabel studerende «, og slette hele vores studerende bord. for at forhindre dette, kan vi bruge $wpdb - > at forberede, metode.This accepts two parameters:, ,The SQL command as a string, where string variables are replaced by the placeholder ,%s, and decimal numbers are replaced by the placeholder ,%d, and floats by ,%f, ,An array of values for the above placeholders, in the order they appear in the query, ,In this example:, $age = 14; $firstname = "Robert'; DROP TABLE Students;"; $sql = $wpdb->prepare('SELECT * WHERE age=%d AND firstname = %s;',array($age,$firstname)); $results = $wpdb->get_results($sql);,The escaped SQL query (,$sql, in this example) can then be used with one of the methods:, ,,$wpdb->get_row($sql),,,$wpdb->get_var($sql),,,$wpdb->get_results($sql),,,$wpdb->get_col($sql),,,$wpdb->query($sql),, ,Inserting and Updating Data,For inserting or updating data, WordPress makes life even easier by providing the ,$wpdb->insert(), and ,$wpdb->update(), methods.,The ,$wpdb->insert(), method accepts three arguments:, ,Table name, – the name of the table, ,Data, – array of data to insert as column->value pairs, ,Formats, – array of formats for the corresponding values (',%s,',',%d,' or',%f,'), , $age = 14; $firstname = "Robert'; DROP TABLE Students;"; $wpdb->insert( \t'Students', \tarray( 'firstname' => $firstname, 'age' => $age ), \tarray( '%s', '%d' ) );,The ,$wpdb->update(), method accepts five arguments:, ,Table name, – the name of the table, ,Data, – array of data to update as column->value pairs, ,Where, – array of data to match as column->value pairs, ,Data Format, – array of formats for the corresponding data values, ,Where Format, – array of formats for the corresponding 'where' values, , //Update Robert'; DROP TABLE Students; to Bobby $oldname = "Robert'; DROP TABLE Students;"; $newname = "Bobby"; $wpdb->update( \t'Students', \tarray( 'firstname' => $newname ), \tarray( 'firstname' => $oldname ), \tarray( '%s' ), \tarray( '%s' ) );,Both the ,$wpdb->insert(), and the ,$wpdb->update(), methods perform all the necessary sanitization for writing to the database.,Like Statements,Because the ,$wpdb->prepare, method uses ,%, to distinguish the place-holders, care needs to be taken when using the ,%, wildcard in SQL LIKE-statementer.codex viser, at dem med en anden,%.du kan undslippe sigt søges med, like_escape, og så tilføje det langt ude,%, hvis det er relevant, herunder den i forespørgslen ved hjælp af prepare - metode.for eksempel: $alder = 14 $firstname = "robert, smid tabel studerende" vælge hvor alder = $alder (firstname som "% $firstname%), ville være sikker: $alder = 14 $firstname =" robert, smid tabel studerende. "vælg * hvor alder = $alder og (firstname som"% $firstname%); $forespørgsel = $wpdb - > at forberede ('select * hvor alder =% d og (firstname som%), system ($alder,%. like_escape ($firstname). "% '), resuméer, dette er ikke en udtømmende liste over de funktioner, der er til rådighed for validering og sanitization, men det skal dække størstedelen af anvendelser.mange af disse (og andre) funktioner, kan findes i /wp omfatter /formatting.php, og jeg vil stærkt anbefale at grave i det centrale kode og at se på, hvordan wordpress kerne er validering og sanitization data. fandt du denne artikel nyttig?har du nogen yderligere forslag om bedste praksis for validering af data og sanitization i wordpress?lad os vide, i bemærkningerne nedenfor.





Previous:
Next Page: