PHP, MySQL, CSS, XHTML, JavaScript
08. Jun. 2006
PHP / MySQL
Dette er en fortsettelse på artikkelen Prioriter Sikkerhet.
Tidligere skrev jeg litt om SQL-injections og hvordan man kan forhindre det. Men det er selvsagt ikke kun dette som utgjør et sikkert system. Det som er meget viktig er å hindre all farlig data som kan komme inn fra en bruker. Dette går egentlig under “Validate input”, men står nå under her i egen overskrift.
Hva kan nå så være farlig? Vi har input som kan missbrukes rent skjønnsmessig, og vi har litt farlige ting som kan utnyttes til enda farligere ting, som datakrim i form av sletting, endring og fremhenting av hemmelig informasjon. Vi snakker her om hacking. Greit nok, jeg nevnte tidligere at det er viktig å sjekke etter om feltene som du sender inn virkelig inneholder det du vil de skal inneholde, men la oss være ærlig her: Det aller viktigste er at siden din ikke blir utnyttet til noe som er ulovelig og/eller skadelig. Som de fleste vet er ikke HTML skadelig i seg selv, den kan kun feile skjønnsmessig, som å ødelegge designet ditt, eller gjøre siden treg å laste osv. Skal noe være skadelig må det bli skrevet i et annet språk, det mest vanlige JavaScript. JavaScript kan haes inn som vanlig HTML kode ved å bruke , her kan den åpne andre sider, kontakte til databaser, generelt gjøre mye ugang! Derfor er det meget viktig at vi hindrer at noen bruker JavaScript. Hvordan kan vi gjøre det? Vi har forskjellige funksjoner som hindrer HTML (der i blant ), vi har htmlspecialchars() som gjør at HTML-en ikke blir parset og vi har strip tags() som fjerner taggene i det hele tatt, slik at du sitter igjen med innholdet. Hva som er best kommer helt an på situasjonen og hva du skal bruke det til. Selv liker jeg strip_tags() godt, men jeg vet om flere som er uenig. (finn flere funksjoner som du kan bruke i manualen).
Jeg har et nyhetsscript, hvor jeg skal gjøre sikkert. Der har jeg feltet myTitle og myText. Da vil jeg kontrollere det som skal inn i myTitle med en viss begrenset mengde, da jeg har den til typen VARCHAR(40) i MySQL.. Den vil jo selv gi feilmelding om den overstiger dette, men litt finere og mer gunstig med en egen feilmelding fremfor en MySQL feilmelding. Inn til databasene med myTitle og myText vil jeg ikke gjøre noe annet med inputen enn å kjøre igjennom quote_smart(), som det står om i del 1 av artikkelen. Jeg vil ikke begrense valgmulighetene mine ved å strippe noen input inn til databasen. Dette tar jeg meg av fra databasen. Dette kommer av en logisk grunn, flere valgmuligheter og bestemmelser om hvordan jeg vil printe det. Ut vil jeg altså sløyfe ut alle skadelige elementer som kan ødelegge på noen måte.
I neste del kommer det litt informasjon med regulære uttrykk og andre måter å kontrollere strenger på. Så fortsettelse følger.
Innlegget ble postet 08.06.06 15:58 og ligger under kategorien PHP / MySQL. Du kan abonnere på kommentarene ved å bruke RSS 2.0 feed. Du kan legge til kommenter, eller trackback fra din blogg/side.
Legg igjen respons