1) Arbejd med register_globals OFF. På den måde risikerer du ikke at man kan overskrive variabler som du ikke har erklæret, inden du tjekker på dem.
2) Valider *altid* input på kryds og tværs så der ingen misforståelser sker. Det er en god vane at indskrænke en variabel til færrest mulige værdier. Hvis noget eksempelvis skal være et heltal, så tjek ikke kun om det er numerisk, men også om det har decimaler.
3) Dette er kun rent administrativt, men brugerniveauer er til af en årsag. Både på din platform og i MySQL. Kør MySQL under en seperat brugerkonto og opret MySQL-brugere til forskellige formål som passer i sammenhængen. Hvis du f.eks. har et website hvor der faktisk kun skal leveres data og brugere ikke skal kunne ændre noget, vil det være passende at MySQL-brugeren du forbinder til databasen med, kun har diverse læserettigheder og ikke skriverettigheder. I hvert fald ikke rettigheder til ændring af tabelstruktur m.m. På den måde begrænser du skaden, hvis den skulle ske.
4) Husk at escape alle quote'de strenge (tal har du jo valideret, så det er ikke nødvendigt og heller ikke god skik) du indsætter i dine SQL-sætninger. Også f.eks. 'HTTP_REFERER' fra $_SERVER-arrayet eller værdier af cookies du selv har lavet hos brugeren. Der kan sagtens være smuglet injections ind. De eneste situationer hvor du kan undlade det, er hvis du i forvejen har tjekket om strengen indeholder quotes. Eksempelvis et brugernavn hvor kun bogstaver er gyldige tegn.
5) Husk altid at tjekke på rettigheder m.m. alle steder. Luk alle huller.
Fordi du ikke udprinter formularen til at redigere noget data, er det ikke ensbetydende med at dataen ikke kan redigeres alligevel.
_Usikkert_ eksempel på at kun brugere med adgangsniveau 5 kan redigere data:
<?php
if(sizeof($_POST)) {
// rediger data (INGEN TJEK PÅ ADGANGSNIVEAU!!!)
}
// noget indhold her
if($_SESSION['adgangsniveau'] == 5) {
// udprint formular
}
?>
Selvom det virker indlysende, er det et problem jeg rigtigt ofte har set rundt omkring. Ikke kun ved nybegyndere men også hos erfarne udviklere. Og den type fejl er især årsag til at mange opensource scripts bliver cracket, fordi "gerningsmændene" har adgang til kildekoden og ikke behøver gætte sig frem.
- Det var da et par ting til en start. Mon ikke nogle kloge hoveder har skrevet noget mere fyldestgørende i en artikel herinde på eksperten?
Ellers er der et par links til artikler her: (fundet på Google)
http://www.developer.com/lang/article.php/918141http://www.ilovejackdaniels.com/php/writing-secure-php/http://www.phpadvisory.com/articles/view.phtml?ID=5Find selv flere: (på Google)
http://www.google.com/search?hl=en&lr=&q=security+php