Gå til innhold

PHP- & MySQL-innføring: Kapittel 6


Anbefalte innlegg

Videoannonse
Annonse
Skrevet
For å lage dynamiske websider i PHP er man nødt til å ta imot og behandle data fra brukeren. Bare slik kan man tilpasse nettsiden til leseren.

 

Les mer

7275562[/snapback]

 

 

Må si jeg liker måten du skriver å forklarer på! Takk for 3 flotter guider!

 

-Vegard

Skrevet (endret)

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
Skrevet
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.

Skrevet
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.

Skrevet
Du kan se at variabel-rekken begynner med et spørsmålstegn, og videre utover separeres variabler med et-tegn.

 

Her mangler det vel en &?

Skrevet

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.

Gjest Slettet+9018234
Skrevet (endret)

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
Skrevet (endret)
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
Skrevet
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.

Skrevet
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.

Skrevet (endret)
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
Skrevet

tolmodighet wulong. Det kommer nok ;)

 

med man kan ikke gape over alt på en gang, derfor har de første 6 kapittelen omhandlet php. Dette står forøvrig forklart et sted i teksten også... Når MySQL-delen kommer vet jeg ikke, men den kommer nok!

Skrevet

Bare fortsett å lage guider :) Jo flere steder man leser en ting og fra jo flere synsvinkler jo bedre blir forståelsen :p

OT: Fins det programmer som retter syntax? Slik at jeg slipper å lete etter en feil som:

"ehco"

istedenfor:

"echo"

De er dæven så vanskelige å finne :( :(

Skrevet
OT: Fins det programmer som retter syntax? Slik at jeg slipper å lete etter en feil som:

"ehco"

istedenfor:

"echo"

De er dæven så vanskelige å finne :( :(

7320806[/snapback]

 

Find-funksjonen i Notepad++ er veldig hjelpsom til dette :D så lenge du vet hva du skal søke etter, that is

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...