Gå til innhold

PHP- & MySQL-innføring: Kapittel 6


Anbefalte innlegg

Videoannonse
Annonse

Uttdrag i fra PHP- & MySQL-innføring: Kapittel 6

<?php
if ($_REQUEST['fornavn'] && $_REQUEST['etternavn'])
{
   $fornavn = htmlentities(strip_tags(
       stripslashes($_REQUEST['fornavn'])));
   $etternavn = htmlentities(strip_tags(
       stripslashes($_REQUEST['etternavn']))); 
   echo "Velkommen, $fornavn $etternavn!";
}
else
{
   echo "Du har ikke komt til denne siden på rett måte.";
}
?>

 

Koden vi ser over er ikke-strict PHP. dvs. ikke riktig PHP syntax. (noe som fører til tregere load)

Riktig kode i dette tilfellet ville være:

if (!empty($_REQUEST['fornavn']) && !empty($_REQUEST['etternavn']))

 

isset() og empty() funksjonene vi bruker for å sjekke om variabler er satt i en 'if'.

 

 

Angående bilde opplastning så er det å validere ei fil etter extention (f.eks. bilde.jpg; hvor .jpg er extention) bare tull. Dette er utrolig lett å lure seg unna.

 

En sikkrere og forholdsvis lett måte å sjekke om at et bilde virkelig er et bilde er å bruke getimagesize() som faktisk følger med i standard PHP. Vi bruker rett og slett funksjonen for å sjekke bildet sin bredde og høyde i pixel. Les mer om getimagesize() på http://no.php.net/getimagesize.

Endret av Wulong
Lenke til kommentar
stripslashes()

 

Dette er strengt tatt ingen sikkerhetsfunksjon, men den blir brukt for å forhindre at data sendt fra brukeren blir forandret i oversendelsen. Data som blir oversendt fra brukeren som inneholder tegn som ' (enkelt anførselstegn) eller " (dobbelt anførselstegn) vil få en skråstrek lagt til foran hvert av disse tegnene. stripslashes() fjerner disse igjen.

 

Dette stemmer ikkje heilt, ' og " vil bare bli "escaped" vist magic_quotes er aktiv.

 

Du kan derimot ikke kun stole på denne metoden, fordi brukeren kan benytte seg av en nettleser som ikke har støtte for dette, og dermed få lastet opp en større fil. Slik ser iallfall skjemaet ut med en begrensing på 50 kB;

Du har ikkje lagt til html koden for å begrense fil størrelsen i kode eksempelet.

Lenke til kommentar
Du kan derimot ikke kun stole på denne metoden, fordi brukeren kan benytte seg av en nettleser som ikke har støtte for dette, og dermed få lastet opp en større fil. Slik ser iallfall skjemaet ut med en begrensing på 50 kB;

Du har ikkje lagt til html koden for å begrense fil størrelsen i kode eksempelet.

7276069[/snapback]

 

Tabbe! Fiksa.

Lenke til kommentar

Lite tips:

 

IKKE IKKE IKKE bruk $_REQUEST-variabelen. Denne kan lett overskrives av brukeren ved å sette en annen verdi i en cookie med samme navn. bruk de respektive superglobalene $_GET, $_POST og $_COOKIE, dette sparer deg for mye banning og utøvelse av vold mot uskyldig maskinvare.

 

Hilsen en som brukte LANG tid og tok ut mye aggresjon på tastaturet før jeg fant ut at en av de største svakhetene i PHP-nuke er at det ikke skilles mellom disse variablene, og at jeg ikke fikk logget inn på siden fordi brukernavn-feltet i påloggingsskjemaet heter 'username' og en annen side på samme domene setter en cookie med samme navn, men da med feil verdi.

Lenke til kommentar
Gjest Slettet+9018234

Se opp, og husk mysql_real_escape_string for $_GET/$_POST-variabler!

 

Det er svært enkelt i hvilken som helst sammenheng med $_GET[]/$_POST[]-syntaks å få serveren til å kjøre DIN kode, hvis du har gjort en dårlig kodejobb!

 

Mener du enkelt kan mysql_injection_attack med \"OR 1=1'\# alt etter skigard er jo kun kommentarer, slik at her er det smutthull.

 

www.phphacks.com så ser du hva jeg mener.

 

De artiklene de skriver er absolutt minimum hvis du skal programmere et nettsted med en litt større besøkshorisont enn bestemors gjestebok. Her kan du se hva kraftig, massivt og dedikert arbeide på hobbybasis kan utmunne i, sålenge du holder tungen rett i munn! The DOS Spirit (stort enmanns/fåmanns-prosjekt)

Endret av Slettet+9018234
Lenke til kommentar
Se opp, og husk mysql_real_escape_string for $_GET-variabler!

 

Det er svært enkelt i hvilken som helst sammenheng med $_GET[]-syntaks å få serveren til å kjøre DIN kode, hvis du har gjort en dårlig kodejobb!

7279417[/snapback]

Gjelder ikke bare for GET variabler. Man kan fint få serveren til å kjøre skript med Post også. :)

 

Men det er selfølgelig i de programmeringssammenhengene man bruker GET cross-site-scripting er mest aktuelt. Mens i de sammenhengene man bruker post, må man mest være oppmerksom på SQL cracking.

Endret av JonT
Lenke til kommentar
Hei, det publiseringsverktøyet "ne:o", har det noe hjemmeside eller er det hjemmesnekra?

7281394[/snapback]

 

Ne:o er utvikla her "på huset," og har ikkje blitt gjort tilgjengelig for offentligheten. Det er kanskje like greit, siden det er veldig spesialtilpassa til vårt eige bruk, og sannsynligvis ikkje ville passe særlig bra til andre.

Lenke til kommentar
Men merk også at denne funksjonen ikke godkjenner e-postadresser med nasjonale bokstaver, slik som de særnorske bokstavene, og at den derfor ikke godkjenner e-postadresser på IDN-domener.

Dette er en svakhet i PHP nå som de fleste browsere og mange epostprogrammer støtter IDN.

 

Men det er noen som jobber med det, se f.eks. PHP-IDN eller idn-pakken i PECL (gammel, ikke vedlikeholdt).

 

 

Og for øvrig mener jeg fortsatt at bøker som Innocent Code er høyst relevante for denne artikkelserien, den er jo tross alt skrevet slik at folk med lite programmeringserfaring også har stor nytte av den.

Lenke til kommentar
Lite tips:

 

IKKE IKKE IKKE bruk $_REQUEST-variabelen. Denne kan lett overskrives av brukeren ved å sette en annen verdi i en cookie med samme navn. bruk de respektive superglobalene $_GET, $_POST og $_COOKIE, dette sparer deg for mye banning og utøvelse av vold mot uskyldig maskinvare.

 

Hilsen en som brukte LANG tid og tok ut mye aggresjon på tastaturet før jeg fant ut at en av de største svakhetene i PHP-nuke er at det ikke skilles mellom disse variablene, og at jeg ikke fikk logget inn på siden fordi brukernavn-feltet i påloggingsskjemaet heter 'username' og en annen side på samme domene setter en cookie med samme navn, men da med feil verdi.

7279281[/snapback]

 

Dette kommer ganske tydelig frem i manualen:

$_REQUEST: Variables provided to the script via the GET, POST, and COOKIE input mechanisms, and which therefore cannot be trusted.
Kilde: http://no2.php.net/manual/en/language.vari....predefined.php

 

Så det er å anbefale å bruke $_GET, $_POST og $_COOKIE så har du mer kontroll over hvor informasjonen kommer i fra.

Endret av crowly
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...