mikaelandre Skrevet 4. juli 2004 Del Skrevet 4. juli 2004 Ble fortalt en gang at det å bruke linker av typen <a href="index.php?avd=avdeling&side=15"> var lite lurt, da "slemme" brukere kunne endre den infoen som ble sendt for å vise sider de ikke skulle eller ett eller annet. Ble anbefalt å lage ei php fil for hver side som skal vises, og bruke templates (phplib). Nå synes jeg templates er helt genialt, men hadde det ikke vært enklere å bruke $_GET for å bestemme hvilken template som skal lastes? Det jeg lurer på er vel om det er så farlig å lage slike linke, og hva dere som er her pleier å gjøre/anbefaler. Lenke til kommentar
Gilbert Skrevet 4. juli 2004 Del Skrevet 4. juli 2004 God kveld Mange vil nok si at switch er en god sak (søk p forumet, så finner du eksempler), jeg sverger nok til file_exists(mitt_domene/$_GET['fil]). Grunnen til at det er skummelt å inkludere $_GET['side'] uten å sjekke den først, er at dersom man inkluderer en fil fra et annet domene, kan hackere og andre som synes slikt er gøy, inkludere f.eks. http://www.deg.no/index.php?side=skummel_skummel_fil.php og lage masse bøll med siden din. Lenke til kommentar
mikaelandre Skrevet 4. juli 2004 Forfatter Del Skrevet 4. juli 2004 jeg skjønner jo at jeg kan inkludere vha switch, men poenget var hvorfor jeg evt. ikke skulle gjøre det... Det er jo rimelig enkelt, men er det den beste måten? er det "sikkert"? Lenke til kommentar
Gilbert Skrevet 4. juli 2004 Del Skrevet 4. juli 2004 switch er 100% sikkert, fordi det er du som bestemmer hvilke filer som skal inkluderes. Med include $_get['side']; er det brukeren som bestemmer hvilken side som skal inkluderes, og det er en sikkerhetsrisiko. En negativ ting med switch er at du må definere alle sidene selv, spørsmålet er da hvor langt man er villig til å gå for å opprettholde sikkerheten ved å bruke switch. Når man begynner å få sites med 100+ sider er det ofte fristende å gå for andre løsninger. Lenke til kommentar
mikaelandre Skrevet 5. juli 2004 Forfatter Del Skrevet 5. juli 2004 aha, da skjønner jeg. det var nettop det som skjedde når jeg skulle lage ei fil pr side, det ble fryktelig mye etter hvert.... og veldig mange filer å endre om jeg ville endre litt på struktur og slikt Lenke til kommentar
Nervetattoo Skrevet 5. juli 2004 Del Skrevet 5. juli 2004 switch har ingen ting med sikkerthet eller noe å gjøre. switch er bare en måte å velge hva som skal vises, i stedet for 200 linjer med heftige if/else. Det er i utgangspunktet ikke noe usikkert rundt å bruke include og get, alt avhenger av hvordan du praktisk løser det. Ikke inkluder filer som skrives rett i url. All bruker input skal sjekkes (og dette er bruker input). Om noen forandrer url'en (som er kjekt og kunne gjøre som bruker) så skal du mest sannsynlig vise enten innholdet til den linken, eller en feilmelding (grunnet at det ikke eksisterer eller er retrsiksjoner på). Bare tenk på hva brukeren får tilgang til når du løser det. Lenke til kommentar
Gilbert Skrevet 5. juli 2004 Del Skrevet 5. juli 2004 (endret) Forsøkte å vise a switch kan løse sikkerheten rundt include. Switch handler i utgangspunktet om hva som skal vises, men inneholder en validiering av variabel som er essensiel for å få switch til å fungere. switch ($_GET['side']) { case "kontakt": include "kontakt.php"; break; er sikrere enn include $_GET['side'] Var det jeg hadde i tankene i innlegget ovenfor Switch er én måte å løse sikkerhetsproblematikken rundt include på. En annen, er som findus nevner, if/else: $side = $_GET['side']; if ($side == "kontakt") { include "kontakt.php"; } elseif($side == "forsiden") { include "main.php"; } En konkret måte å gjøre ting på, er $side = $_GET['side']; if (file_exists("inc/$side.php")) { include "inc/$side.php"; } else { include "error.php?feil=notfound"; } edit: sansynligvis er det veldig mange måter å gjøre include "sikker" på, mist like mange som det finnes her. Jeg bruker følgende når jeg skal inkludere sider (som en ekstra tilleggsforsikring): main.php : <?php $key = "af4t34ga4t876t"; include "include.php"; include.php : <?php if ($key != "af4t34ga4t876t") { exit(); } else { echo "heihei"; } Endret 5. juli 2004 av fjartan Lenke til kommentar
RipZ- Skrevet 5. juli 2004 Del Skrevet 5. juli 2004 fjartan: Din metode er ikke sikker i det hele tatt. File_exists forsikrer bare at filen eksisterer, ikke at det er en av filene du har gitt tilgang til. Om du har en fil i rooten din som heter hemmeligpassord.php. Da kan jeg få tak i den slik: $_GET[side'] = "../hemmeligpassord"; $side = $_GET['side']; if (file_exists("inc/$side.php")) { // inc/../hemmeligpassord.php finnes include "inc/$side.php"; //inkluderer denne } else { include "error.php?feil=notfound"; } Altså, man kan inkludere en hvilken som helst PHP fil ved å bruke ../. Dette er ikke særlig sikkert. Skal man bruke include via URL burde man lage en array over lovlige includefiler, eller bruke en if- eller case-test. Lenke til kommentar
Gilbert Skrevet 5. juli 2004 Del Skrevet 5. juli 2004 beklager, skulle spesifisert nærmere hva jeg mente. Poenget mitt gikk på sikkerhet rundt filer som lastes fra annet webområde. Lenke til kommentar
mikaelandre Skrevet 5. juli 2004 Forfatter Del Skrevet 5. juli 2004 ok, takk for alle svarene, har ihvertfall blitt litt klokere Lenke til kommentar
Gilbert Skrevet 5. juli 2004 Del Skrevet 5. juli 2004 men det er bra. gjør så godt vi kan, og om noe er uklart er det bare å spørre Lenke til kommentar
???????? Skrevet 5. juli 2004 Del Skrevet 5. juli 2004 RipZ- En trenger ikke å lage en array, bare sjekke at filnavnet kun består av boktaver og tall - på den måten kommer de ikke ut av mappen. Bruk f.eks. eregi("[a-z0-9]+"). Lenke til kommentar
RipZ- Skrevet 6. juli 2004 Del Skrevet 6. juli 2004 RipZ-En trenger ikke å lage en array, bare sjekke at filnavnet kun består av boktaver og tall - på den måten kommer de ikke ut av mappen. Bruk f.eks. eregi("[a-z0-9]+"). Er klar over det. Men det kan hende man ønsker å inkludere forskjellige filer fra forskjellige mapper. Selvfølgelig, man kan bruke REGEXP i dette tilfellet også. Jeg ville personlig gjort det, siden å lage et array synes jeg er for tungvindt. Men mange nybegynnere er ikke så flinke til å skrive REGEXP (er jo gjerne noe man lærer litt senere om man ikke har tidligere erfaring med det) og har derfor en tendens til å enten å ikke få til å lage en selv, eller at de rett og slett lager den for usikker. Lenke til kommentar
???????? Skrevet 6. juli 2004 Del Skrevet 6. juli 2004 Hehe... du har helt rett - alle kan glemme ting - jeg glemte ^$ Heldigvis bruker jeg mer tid på egene koder enn den hva jeg bruker på å lage eksempler. Lenke til kommentar
RipZ- Skrevet 6. juli 2004 Del Skrevet 6. juli 2004 Hehe... du har helt rett - alle kan glemme ting - jeg glemte ^$ Heldigvis bruker jeg mer tid på egene koder enn den hva jeg bruker på å lage eksempler. Var ikke det beste eksempelet jeg har sett nei... Lenke til kommentar
mikaelandre Skrevet 6. juli 2004 Forfatter Del Skrevet 6. juli 2004 men hva anbefales å gjøre da? bruke switch og manuelt skrive inn alle sidene som kan vises, eller å bruke regexp? og er regexp helt vanlig regulært uttrykk, eller er det en sær php ting? Lenke til kommentar
???????? Skrevet 6. juli 2004 Del Skrevet 6. juli 2004 Regexp finnes i de fleste programmaringsspråk. Bruk en streng regexp, som f.eks. "^[a-z0-9]$" da kan den kun inneholde bokstaver og tall så da er det ikke mulig å inkludere sider fra andre mapper. Eventuelt så kan du bare legge til en bokstav på alle sidene: include "a".$_GET['side'].".php"; Lenke til kommentar
mikaelandre Skrevet 6. juli 2004 Forfatter Del Skrevet 6. juli 2004 jeg vet hva regulære uttrykk er, lurte bare på om det var helt standard i php også. og det ser det jo ut som det er. men du anbefaler altså å bruke den metoden? jeg er veldig ny i det med å lage sider i php, så vet ikke helt hva som er vanlig. hvor mange php sider trenger jeg egentlig da? alt kan jo i teorien inkluderes, samme hvor mange sider jeg vil vise, fra index.php, men er det vanlig å gjøre det på den måten? og hva bør puttes i en database? nå har jeg hovedmenyen i en array som legges til vha templates, slik at det er lett å legge til og fjerne element fra alle sidene. men det er jo også en ting som i teorien kan ligge i en database... og vil ting gå mye tregere hvis den må hente all info fra databasen? ble ganske off topic dette, men håper noen kan hjelpoe meg like vel, prøver å bli så flink som mulig Lenke til kommentar
???????? Skrevet 6. juli 2004 Del Skrevet 6. juli 2004 (endret) Hehe... du stiller spørsmål som ikke kan besvares uten motspørsmål. Kommunikasjonen mot en database behøver ikke å være treg, dersom webserveren og sql serveren har en rask forbindelse med hverandre. Ofte er de til og med på samme fysiske maskin, eller koblet til samme router - så da er kommunikasjonen rask. Benytter du deg av en ekstern server plassert i et annet kontient kan du begynne å merke hastighetstak, men det som regel snakk om hundredeler like vel. Kjører du da 50 spørringer på databasen, så er det selvfølgelig en flaskehals for scriptet ditt. Vanligvis tar spøringer veldig liten tid, så lenge det er enkle select spørringer på en mindre database. Har du flere hundre tusen rader i tabellen vil sql serveren bruke litt tid på å finne all data'en - og det er da viktig at du benytter deg av indekser. Hvis du f.eks. går inn på vg.no så hentes sikkert nesten alt der fra en database, og på denne siden kan du se nederst at den har gjort 13 spørringer mot sql serveren. Forskjellen mellom å velge å inkludere filer eller hente fra en database, er veldig liten og det kan ofte være like raske eller raskere å hente ting fra en database. Tilbake til regexp så velger du den løsningen du synes er eklest. Så lenge det ikke er snakk om en kjempestor side, med mange besøkende og sider, så vil det utgjøre lite forskjell hvilken av delen du velger. Endret 6. juli 2004 av ???????? Lenke til kommentar
mikaelandre Skrevet 6. juli 2004 Forfatter Del Skrevet 6. juli 2004 apache og mysql er på samme maskin, så da skal ikke hastigheten være noe problem. med menyer og slikt i en databse vil det vel bli enklere å vedlikeholde og endre på ting for folk som ikke har så mye peiling, eller ikke har tilgang til serveren. tenker jeg prøver meg på en side pr avdeling, og sidene under hver avdeling som inklude, så får jeg se hvordan det går. og med innholdet i database, så får jeg lært det og:) tusen takk for all hjelp! Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå