YapfHoofdpagina | Info | Hulp | FAQ (veelgestelde vragen) | Speciale pagina's | Aanmelden


Printervriendelijke versie | Voorbehoud | Privacybeleid

Database do's and dont's

Uit Yapf


Inhoud

Do's

Gebruik zinvolle namen voor alles.

Geef niet toe aan de verleiding om korte, eenvoudige namen te gebruiken voor tabelen, kolommen, indexes, contraints etc.

Waarom: een korte naam is alleen begrijpelijk zolang de context in je hoofd zit. Bugs en problemen doen zich steevast op onverwachte moment voor, wanneer je met hele andere dingen bezig bent. Het laatste wat je dan wilt is dat je een rror krijgt die zegt dat kolom ap_gem_abs_ter_knf niet voldoet aan contraint ap_gem_constraint_4. Wat je wilt is dat de error zegt dat de kolom applicatie_gemiddelde niet voldoet aan contraint applicatiegemiddelde_niet_negatief.

Hetzelfde geldt voor indexes, wanneer je met explain aan het uitzoeken bent waarom je query zo traag is, dan wil je niet weten dat idx_1 wordt gebruikt, maar idx_lower_voornaam.

Dont's

Sommige dingen kun je in databases beter niet doen.

Casten naar INT om invoer te beveiligen.

Invoer beveiligen in een query kan *ALLEEN* door de invoer te escapen en valideren.

Iets als $a= (int)$_GET['id']; of nog erger: $a = 1*$_GET['id']; is geen beveiliging, het zijn oogkleppen. Alle invoer die niet correct kan worden geinterpreteerd wordt omgezet naar nul en de query wordt uitgevoerd alsof er nul was ingevoerd.

Het probleem hiermee is dat er nog steeds een query wordt uitgevoerd die niet doet wat je wil. Nul is niet een soort magische waarde die je zomaar kunt gaan gebruiken op het moment dat je even de juiste waarde niet weet. Wat als in jouw systeem de nul is gereserveerd voor het id van de beheerder (nul is een volkomen normale waarde in databases!) Als een hacker iets gaat proberen met het userid dan herken jij wel dat het fout is, en vervangt het vervolgens gewoon door de nul die je juist *niet* in de query wilde hebben.

Als je wilt voorkomen dat er foute waarden in je database komen, doe dat dan ook: valideer de invoer en stop de query als de invoer niet geldig is. Escapen en quoten is in dit geval dus ook beter want als er dan een term staat die geen getal is dan gaat SQL proberen om de term als string te interpreteren en dat zal nooit matchen, er is geen userid '2-1 ' of '1;DROP TABLE users;'

Voorloopnullen

Mensen gebruiken graag voorloopnullen om getallen te printen. Niemand weet waarom, want niemand tikt ze ooit in.

Niet. waarom niet:

Ontvangen van "http://www.yapf.net/index.php/Database_do%27s_and_dont%27s"

Deze pagina is 1.701 maal bekeken. Deze pagina is het laatst bewerkt op 29 nov 2011 om 11:10.


Zoeken

Bladeren
Hoofdpagina
Gebruikersportaal
In het nieuws
Recente wijzigingen
Willekeurige pagina
Hulp
Bewerken
Brontekst bekijken
Hulp bij bewerken
Paginaopties
Overlegpagina
Nieuw kopje
Printervriendelijke versie
Pagina-informatie
Paginageschiedenis
Verwijzingen naar deze pagina
Verwante wijzigingen
Mijn pagina's
Aanmelden / registreren
Speciale pagina’s
Nieuwe pagina's
Bestandslijst
Statistieken
Meer…