Als het op internet aankomt, wordt bijna elke toepassing die in uw browser wordt uitgevoerd, ondersteund door een gegevensarchief van sommige type. Gewoonlijk hebben deze datastores de vorm van een type database.
Tot voor kort werden de meeste applicaties gebouwd bovenop een soort SQL-database, maar met de opkomst van document-gebaseerde databases zoals CouchDB, zijn andere applicaties ook begonnen met het gebruiken van andere backends.
Niet alleen dat, met HTML5 en browsers die services implementeren voor lokale opslag
, we kunnen eigenlijk beginnen met opslaan sommige gegevens aan de kant van de klant. Uiteraard is dit niet iets dat je permanent zou willen doen, maar het geeft een niveau van flexibiliteit en kracht die we niet recent hebben gehad.
Hoe dan ook, in de klassieke zin van webapplicaties, WordPress is een database-back-applicatie die een MySQL-database gebruikt om zijn informatie op te slaan.
Maar deze serie gaat over het bouwen van applicaties bovenop WordPress. Daarom is het belangrijk om niet alleen te begrijpen hoe u informatie kunt opslaan, maar ook hoe u informatie ophaalt.
Uiteraard is het bij het werken met gegevensserialisatie ook belangrijk om er rekening mee te houden dat gebruikers mogelijk proberen schadelijke gegevens in de database in te voegen. Als zodanig is het onze verantwoordelijkheid om gegevens op de juiste manier te ontsmetten bij het invoegen van de gegevens in de database, en om ervoor te zorgen dat we op de juiste manier aan de gegevens ontsnappen terwijl we deze uit de database halen.
In dit artikel gaan we de API's bekijken die WordPress biedt voor het serialiseren van informatie en de faciliteiten die beschikbaar zijn voor het ontsmetten van gegevens. Daarna vullen we het artikel aan door te kijken hoe je veilig informatie uit de database kunt halen.
Vanzelfsprekend is een van de belangrijkste onderscheidende factoren tussen normale websites en webtoepassingen de mogelijkheid om gegevens te beheren die zijn opgeslagen in sommige type database. Dit betekent meestal ook dat informatie per gebruiker wordt opgeslagen (maar niet altijd).
Hoe dan ook, standaard biedt WordPress een verscheidenheid aan API's die het gemakkelijk maken om gegevens op te slaan en op te halen. En misschien is het leukste aan het opslaan van gegevens in de WordPress-database dat als je eenmaal begrijpt hoe een API werkt, je meestal een intuïtie hebt over hoe de rest van hen werkt.
Dus met dat gezegd, laten we beginnen met kijken naar hoe we informatie opslaan in de WordPress-database.
Voor degenen onder jullie die nog niet bekend zijn, bestaat WordPress slechts uit een handvol tabellen. In deze discussie willen we ons vooral zorgen maken over de volgende tabellen:
wp_options
. De optietabel is verantwoordelijk voor het opslaan van stukjes informatie die gerelateerd zijn aan voorkeuren, configuratie, alles dat gerelateerd is aan instellingen die van toepassing zijn op de hele site.wp_posts
. Deze tabel bevat gegevens met betrekking tot berichten. Hoewel we niet direct met deze tabel werken, is het belangrijk om te begrijpen dat deze bestaat, zodat we kunnen werken met post-meta-informatie.wp_postmeta
. Zoals eerder vermeld, is deze tabel verantwoordelijk voor het bijhouden van meta-informatie met betrekking tot individuele berichten. En aangezien berichten pagina's, berichten en aangepaste berichttypen kunnen vertegenwoordigen, slaat u hier informatie op met betrekking tot elk van uw berichttypen. Het is uiterst flexibel in het type gegevens dat wordt opgeslagen, dus u kunt echt veel macht hebben in termen van hoe u informatie aan berichten relateert (ongeacht het type dat ze zijn gedefinieerd als).wp_comments
. Deze tabel zou vanzelf moeten gaan, maar hier worden alle opmerkingen voor zowel berichten, pagina's als aangepaste berichttypen opgeslagen. Net zoals wp_posts
, dit is niet waar we direct gegevens gaan schrijven, maar het is belangrijk om te begrijpen dat deze tabel bestaat en dat er een meta-gegevenstabel met opmerkingen is die we kunnen openen wanneer we informatie naar de tabel schrijven.wp_commentmeta
. Zoals gezegd, zoals wp_postmeta
, dit is waar metagegevens over opmerkingen worden bewaard. En toegegeven, hoewel u niet noodzakelijk overal met commentaar in webtoepassingen werkt, heeft u misschien wel een blogcomponent in uw toepassing. En in dat geval helpt het om te weten hoe u gegevens kunt lezen van en gegevens kunt wegschrijven naar de tabel.Uiteraard is dit slechts een onderzoek op hoog niveau van enkele databasetabellen die WordPress ondersteunen. Als u vertrouwd wilt zijn met de rest van de informatie, alleen voor uw eigen versie, moet u de databasebeschrijving controleren.
Dit moet echter goed genoeg zijn om ons standaard te maken bij het lezen en schrijven van informatie naar de database.
Op dit moment hebben we voldoende informatie over de databaselaag om een overzicht te kunnen maken van de API's die beschikbaar zijn in de applicatielaag van WordPress waarmee we informatie kunnen opnemen die door onszelf en / of door gebruikersinvoer wordt verstrekt.
Het schrijven van informatie naar elk van de bovenstaande tabellen is nu heel eenvoudig.
Eerst gaan we de functies bekijken die beschikbaar zijn voor het lezen, schrijven en bijwerken van informatie in de WordPress-optietabellen.
WordPress biedt API-functies met twee specificaties voor het schrijven van gegevens naar de database. Men komt in de vorm van het toevoegen van informatie, een komt in de vorm van het bijwerken van informatie.
Als u informatie aan de WordPress-optietabel wilt toevoegen, gebruikt u de volgende API-functie.
add_option
accepteert drie parameters:
Als we bijvoorbeeld informatie willen opslaan, zoals mijn naam, doen we het volgende:
add_option ('mijn naam', 'tom mcfarlin');
Als we aan de andere kant iets wilden pakken dat uit de $ _POST
verzameling, dan kunnen we zoiets als dit doen:
if (isset ($ _POST ['value']) &&! empty ($ _POST ['value']) add_option ('mijnwaarde', $ _POST ['waarde']);
Het bijwerken van opties is heel anders. Het volgt hetzelfde schema en kan ook worden gebruikt op zijn plaats van add_option
want als de optie nog niet bestaat, wordt deze gemaakt.
Om het punt te benadrukken, zal ik niet verder ingaan op veel meer informatie over deze specifieke functie. In wezen, update_option
zullen:
Niet slecht, toch??
Voor diegenen die werk hebben gedaan met WordPress-thema's - vooral bij het gebruik van de Theme Customizer - bent u waarschijnlijk bekend met de set_theme_mod
functie.
Deze specifieke API-functie is niet echt relevant voor het bouwen van webapplicaties met WordPress; om volledig te zijn, wilde ik echter alle API's kunnen laten zien zijn verantwoordelijk voor het schrijven van gegevens naar de database.
Let specifiek op uit de Codex:
Creëert of update een aanpassingsinstelling voor het huidige thema. Samen met get_theme_mod () biedt deze functie soms thema-ontwikkelaars een eenvoudiger alternatief voor de Settings API wanneer er behoefte is aan het afhandelen van elementaire thema-specifieke instellingen.
Dit is duidelijk gedegradeerd om met thema's te werken.
Eerlijk gezegd, werken met post-meta is niet veel anders dan met opties werken. U kunt zelfs de API-functies voor het serialiseren van post-metadata en de metagegevens over reacties bijna identiek beschouwen aan hoe opties worden opgeslagen in de wp_options
databank.
Kort gezegd, de API-functies bevatten drie informatiedelen:
Dus in het geval van het opslaan van postinformatie, zou de element-ID overeenkomen met de post-ID; in het geval van de opmerkingen komt de element-ID overeen met de opmerking-ID.
En net zoals het geval is bij het opslaan van gegevens in de optietabel, is het belangrijk om op te merken dat het toevoegen van een optie de optie in de database introduceert, en het bijwerken van de optie zal de optie creëren als deze nog niet bestaat, en dan de bestaande waarde in de database.
Voorbeeld: informatie opslaan in de tabel meta-meta:
add_post_meta (get_the_ID (), 'mijn-post-informatie', 'Dit is mijn favoriete bericht.');
En, bijvoorbeeld, het bijwerken van informatie in de metatabel van de opmerking zou er als volgt uitzien:
update_post_meta (get_the_ID (), 'mijn-post-informatie', 'Dit is mijn favoriete bericht.');
Als alternatief kunt u de globale gebruiken $ bericht
variabele als de methode niet wordt aangeroepen binnen The Loop. Bijvoorbeeld:
wereldwijde $ post; add_post_meta ($ post-> ID, 'mijn-post-informatie', 'Dit is mijn favoriete bericht.');
En om gegevens naar de metatabellen voor opmerkingen te schrijven, volgt u de exact hetzelfde formaat, behalve dat je gebruikt add_comment_meta
en update_comment_meta
.
Maar nu we hebben besproken hoe we informatie kunnen opslaan in de optietabel, de meta-tabel en de meta-tabel, hoe zorgen we ervoor dat er geen gevaarlijke informatie in de database wordt opgeslagen.?
Eenvoudig: data-sanering.
Als het aankomt op besparing gegevens naar de database, een van de belangrijkste dingen die ontwikkelaars moet do is om alle informatie die van de gebruiker afkomstig is en die de database invoert te ontsmetten.
Het punt over het zuiveren van gegevens is dat het afhankelijk is van de gegevens die u moet opslaan. Er zijn bijvoorbeeld heel weinig momenten dat u markup, SQL of andere soorten broncode daadwerkelijk in de database wilt opslaan.
Om dit te voorkomen, wil je waarschijnlijk de PHP-functies gebruiken zoals strip_tags
en stripslahes
om de informatie op te ruimen.
Bijvoorbeeld:
if (isset ($ _POST ['value']) &&! empty ($ _POST ['value']) $ clean_value = strip_tags (stripslashes ($ _POST ['value'])); add_option ('mijnwaarde', $ clean_value);
Natuurlijk Absoluut duidelijk, dit is maar een voorbeeld van hoe informatie te ontsmetten. Uw implementatie kan variëren afhankelijk van het type applicatie dat u aan het bouwen bent. Het punt om deze informatie te delen toont een van veel ideeën over het opschonen van informatie voor het opslaan in de WordPress-database.
Nogmaals, dit zijn niet de enige manieren om waarden te zuiveren. Vergeet niet om de faciliteiten die WordPress out-of-the-box biedt, te volgen:
sanitize_email
sanitize_file_name
sanitize_html_class
sanitize_key
sanitize_meta
sanitize_mime_type
sanitize_option
sanitize_sql_orderby
sanitize_text_field
sanitize_title
sanitize_title_for_query
sanitize_title_with_dashes
sanitize_user
Vergeet op dit moment geen hulpprogramma's zoals reguliere expressies. Ze zijn ongelooflijk krachtig met het matchen van alleen bepaalde reeksen en bepaalde patronen uit een verzameling gegevens die kunnen worden geëxtraheerd om de gegevens op te slaan.
Toegegeven, we hebben alleen gesproken over het opslaan van informatie in de WordPress-database.
We moeten nog slagen voor het ophalen van informatie, laat staan voor het feitelijk valideren van de informatie die uit de database komt.
Dus in het volgende artikel gaan we kijken hoe de keerzijde van dit artikel is - in het bijzonder gaan we kijken naar hoe we informatie kunnen krijgen van de database, ontsnappen aan mogelijke tekens die mogelijk een probleem vormen bij het weergeven ervan in de browser, en hoe hiermee om te gaan.