objorkum Skrevet 14. januar 2005 Del Skrevet 14. januar 2005 (endret) Har eit include script eg bruker på alle websidene mine. Slik er det: http://www.objorkum.com/files/include.txt Er det noko sikkerheitsmessige problem med det? Har skrive det sjølv og er ikkje så veldig god på PHP. Endret 14. januar 2005 av objorkum Lenke til kommentar
objorkum Skrevet 14. januar 2005 Forfatter Del Skrevet 14. januar 2005 EDIT: Endra litt og la til $id = $_GET["id"]; Lenke til kommentar
Loomy Skrevet 14. januar 2005 Del Skrevet 14. januar 2005 Du hindrer ikke at det kan brukes / og . i id, så man kan f.eks ha noe sånt: index.php?id=../enfil.php. Dette kan du hindre ved å bruke en eregi() eller lignende til å sjekke om variabelen inneholder . eller /. Lenke til kommentar
objorkum Skrevet 14. januar 2005 Forfatter Del Skrevet 14. januar 2005 Takker! No har eg oppdatert slik at $id ikkje tillatar . eller / http://www.objorkum.com/files/include.txt Er det eigentleg vits å ha med den isset-funksjonen? Har jo med if ($id == ""). Lenke til kommentar
???????? Skrevet 14. januar 2005 Del Skrevet 14. januar 2005 Det ser faktisk meget bra ut. Du har fått med deg et viktig element, og det er å hindre at index.php (regner med at det er i den filen du kommer til å plassere denne koden) ikke includer seg selv. Noen muligheter til forbedring finnes det da: Du bruker if (!isset($id)) og if ($id == ""). For det første så burde det stå if(empty($id)) og ikke == "", og for det andre så kan du slå sammen disse to. I steden for if(!isset($is)) så kan du bruke if(empty($id)) og kutte ut den senere. I motsettning til tidligere forslag jeg har sett her så har du fått med deg det viktige - og du har i tillegg løst det på en enkel måte. For programmerere så er det viktig "to keep it short and simple" - på den måten er det lettere å finne sikkerhets hull og scriptene blir raskere. Det er ofte forskjellen på en nybegynner og en erfaren programmerer. Videre kan det diskuteres om det skal være mulig å include filer i andre mapper slik det vil være her. Dersom du ikke har andre mapper med viktige filer så er ikke det noe problem, selv om det hadde vært kjekt om du sjekket at $id kun inneholdt tall og/eller bokstaver og ikke .. eller / Lenke til kommentar
???????? Skrevet 14. januar 2005 Del Skrevet 14. januar 2005 (endret) No har eg oppdatert slik at $id ikkje tillatar . eller / Ikke gjør det på den måten, sjekke heller som jeg skrev over at $id kun inneholder tall og bokstaver (eventuelt bare bokstaver). Det er ikke noe poeng at du skal søke gjennom $id to ganger. Eventuelt så burde du søke etter begge delene i samme søket. Er det eigentleg vits å ha med den isset-funksjonen? Har jo med if ($id == ""). Les det jeg skrev over. Endret 14. januar 2005 av ???????? Lenke til kommentar
objorkum Skrevet 14. januar 2005 Forfatter Del Skrevet 14. januar 2005 Takker for svar! Eg oppdaga noko rart... Når eg bruker "eregi" til å ikkje tillate . så kjem får alle sidene $error. Kvifor det? Om $id=main så er det jo ikkje . i main... Uansett held det vel med eregi på / sidan ein ikkje får noko ut av . aleine. Lenke til kommentar
???????? Skrevet 14. januar 2005 Del Skrevet 14. januar 2005 . = hviket tegn som helts, du må escape den \. Lenke til kommentar
objorkum Skrevet 14. januar 2005 Forfatter Del Skrevet 14. januar 2005 No har eg oppdatert slik at $id ikkje tillatar . eller / Ikke gjør det på den måten, sjekke heller som jeg skrev over at $id kun inneholder tall og bokstaver (eventuelt bare bokstaver). Det er ikke noe poeng at du skal søke gjennom $id to ganger. Eventuelt så burde du søke etter begge delene i samme søket. Er det eigentleg vits å ha med den isset-funksjonen? Har jo med if ($id == ""). Les det jeg skrev over. Smart. Eg vil gjerne at $id kun skal innehalde bokstavar. Korleis gjer eg det? Lenke til kommentar
objorkum Skrevet 14. januar 2005 Forfatter Del Skrevet 14. januar 2005 . = hviket tegn som helts, du må escape den \. Ah Lenke til kommentar
???????? Skrevet 14. januar 2005 Del Skrevet 14. januar 2005 For alpha tegn bruk [:alpha:] eller for bokstaver bruk a-z, eventuelt a-zæøå F.eks. eregi("^[a-z]+$",... Lenke til kommentar
objorkum Skrevet 14. januar 2005 Forfatter Del Skrevet 14. januar 2005 (endret) Takker No treng eg vel ikkje den +$'en der. Har no forenkla scriptet, og det ser slik ut: http://www.objorkum.com/files/include.txt Noko som manglar no? Er det vits med unset? Endret 14. januar 2005 av objorkum Lenke til kommentar
???????? Skrevet 14. januar 2005 Del Skrevet 14. januar 2005 (endret) No treng eg vel ikkje den +$'en der. Du vet hva + og $ betyr? ^ betyr at den må starte med $ betyr at den må slutte med Hvis du bruker ^$ så betyr det at det ikke kan stå noe annet enn det du definerer. Hvis du kun bruker ^ så betyr det at den kun må begynner med. Da har du problemet at da kan den gå til undermapper. + betyr flere tegn. [a-z] betyr en bokstav mellom a og z. [a-z]+ betyr en eller flere boktaver mellom a og z. Er det vits med unset? Nope, ikke dersom du ikke bruker disse variablene senere i et annet script innenfor samme side. Edit: elseif (!eregi("^[a-z]", $id)) { echo $error; } elseif ($id == "index") { echo $error; Disse vil begge echo $error, så da kan du slå de sammen: elseif (!eregi("^[a-z]", $id) or $id == "index") Endret 14. januar 2005 av ???????? Lenke til kommentar
objorkum Skrevet 14. januar 2005 Forfatter Del Skrevet 14. januar 2005 Tusen takk, no kan eg vel sei final versjonen er ute. Eit siste spørsmål: Eg bruker include($id. ".php"); Der eg må ha punktum etter $id, noko eg fann ut ved å prøve meg litt fram. Kvifor er det slik? Kva "betyr" punktumet? Lenke til kommentar
???????? Skrevet 14. januar 2005 Del Skrevet 14. januar 2005 "a" . "a" betyr å slå sammen a og a til aa. Lenke til kommentar
objorkum Skrevet 14. januar 2005 Forfatter Del Skrevet 14. januar 2005 "a" . "a" betyr å slå sammen a og a til aa. Oki Lenke til kommentar
phun-ky Skrevet 17. januar 2005 Del Skrevet 17. januar 2005 (endret) har dette jeg, er kanskje veldig enkelt, og minimal sikkerhet. $filnavn = $_GET['s']; if (!$filnavn) { $filnavn = 'main'; } $filendelse = '.php'; if (!eregi("^((.*)/)", $filnavn)) { include $filnavn . $filendelse; } else { include "404.php"; } tilpasset begge: $id = $_GET["s"]; if (empty($id)) { include("main.php"); } elseif (!eregi("^[a-z]+$", $id) or $id == "index") { include "404.php"; } elseif (file_exists($id. ".php")) { include($id. ".php"); } else { include "404.php"; } Endret 17. januar 2005 av phun-ky Lenke til kommentar
Skaptrollet Skrevet 17. januar 2005 Del Skrevet 17. januar 2005 hmm kanskje bittelitt of-topic men jeg lager en side nå i øyeblikket og lurer på deres synspunkt ang. sikkerhet. I index.php defineres "godtainkludering" til "ja" (første linje) og under den inkluderes en fil som har alt med mysql å gjøre. (i alle filer til siden bortsett fra index.php er det en if setning som sjekker at "godtainkludering er satt til ja ellers die("feil"); midt i index.php har jeg en fil som heter innhold.php (inkludert) og den sjekker $_GET['side'] mot en mysql database og his den finner en rad hvor getnavn == $_GET['side'] så inkluder denne filen (filbane og alt ligger i mysql database) det jeg da forhindrer er at folk kan åpne hvilken som helst phpfil, alle filer må bli inkludert via index.php pga defineringen og siden det bare er innhold.php som inkluderer og den inkludere bare det som er i databasen vil dette gjøre alt mye sikrere. Er dette en sikker løsning? Lenke til kommentar
???????? Skrevet 17. januar 2005 Del Skrevet 17. januar 2005 WaBBiT: I et par løsninger jeg har skrevet så har jeg brukt samme teknikk hver gang. Jeg plasserer alle filene i en egen mappe, f.eks. "includefiles". Denne kan man beskytte med f.eks. htaccess dersom man ikke vil at noen skal ha tingang til filene utenom et script. $_GET['side'] er f.eks. variabelen som definerer en side. Før jeg henter siden så sjekker jeg at den variabelen kun inneholder bokstavene a-z. Etter dette så sjekker jeg at filen eksisterer - gjør den det så includer jeg den. På den måten så er det ikke mulig å include andre sider enn de i mappen. Dette burde holde lenge for de fleste. Å blande inn MySQL ol. er mye mer jobb enn det er verdt. Lenke til kommentar
Skaptrollet Skrevet 17. januar 2005 Del Skrevet 17. januar 2005 tja, men det får så bare være det blir bittelitt sikrere når en admin/jeg må legge til siden i databasen.... og din måte så kan andre script inkludere sidene dine mens i min så må det være definert noe ellers dør jo scriptet jj ikke at andre har tilgang til min server men 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å