Mobsan Skrevet 28. desember 2005 Skrevet 28. desember 2005 Jeg lager en stor side med mange små sider som blir includert. Hvordan vil man sperre for muligheten å kunne kjøre en php side om den ikke er includert via en spesifikk side, f.eks index.php i mitt tilfelle. index.php inkluderer sidene som brukes, men sidene skal ikke kunne bli inkludert av andre sider eller bli kjørt hvis man klarer å gjette seg til riktig filnavn, og skrive det inn i URL feltet. f.eks hvis filen, test.php blir kjørt direkte, vil jeg at den ikke skal gi output. eller vise en 404 error, men om den er inkludert via index.php skal den kjøres normalt. Finnes det noen måte å gjøre dette, noen gode ideer rundt dette?
WebKnight Skrevet 28. desember 2005 Skrevet 28. desember 2005 Mulig jeg har misforstått her, men kan du ikke bare bruke en annen filendelse som feks. side_som_skal_inkluderes.inc
Torbjørn Skrevet 28. desember 2005 Skrevet 28. desember 2005 du kan sjekke i inkludert fil om __FILE__ matcher $_SERVER['SCRIPT_NAME'] tror jeg det er
Mobsan Skrevet 28. desember 2005 Forfatter Skrevet 28. desember 2005 Hvis jeg bruker en annen filendelse vil det være mulig å laste ned filen, fordi webserveren vil ikke bruke filen som kode. Dette er ikke en løsning
Mobsan Skrevet 28. desember 2005 Forfatter Skrevet 28. desember 2005 (endret) __FILE__ == /xxx/xx.php // RIKTIG && $PHP_SELF == index.php / /RIKTIG __FILE__ == /../xxx/xx.php // FEIL || $PHP_SELF != index.php / /FEIL hmm. blir noe slikt da, bare tenkt. Husk at det ikke skal kunne inkluderes fra andre index.php filer enn den ene jeg selv styrer. EDIT: leif Endret 28. desember 2005 av Mobsan
Torbjørn Skrevet 28. desember 2005 Skrevet 28. desember 2005 (endret) du trenger ikke hardkode filnavn EDIT: med mindre det er for å sjekke den ene fila som har lov å inkludere, index.php Endret 28. desember 2005 av Torbjørn
MC2 Skrevet 28. desember 2005 Skrevet 28. desember 2005 hva med å definere en konstant i index.php? index.php: define("SAFE",true); page.php (før alt annet) if(!defined("SAFE")) {die("No access!"};
Mobsan Skrevet 28. desember 2005 Forfatter Skrevet 28. desember 2005 Hvordan virker define med $_GET[]? kan man lure seg rundt vet hjelp av å sette get verdier?
MC2 Skrevet 28. desember 2005 Skrevet 28. desember 2005 nei. det spiller ikke noen rolle hva du definerer konstanten som. Bare det at index.php fila definerer en konstant og hver fil sjekker da om konstanten er definert. Hvis den ikke er definert så "dør" den, og ikke noe skjer. Det du trenger å gjøre er å definere en konstant, hvilken som helst, hvilket som helst verdi i index.php og include en fil, feks. page.php. Øverst i page.php legger du inn koden if(!defined("SAFE")) {die("No access!")}; som sjekker om konstanten SAFE er definert. Hvis ikke den er definert så gjør ikke page.php noe annet enn å si "No access!". Altså, ikke noen andre filer, som ikke definerer SAFE kan inkludere page.php. (Det er lurt å kalle konstanten for noe mer tilfeldig enn SAFE)
Mobsan Skrevet 28. desember 2005 Forfatter Skrevet 28. desember 2005 Men da kan hvilken som helst side inkludere denne siden, så lenge man vet hvilken konstant som skal defineres. Den sier ikke noe om det er riktig side som inkluderer, bare at den som inkluderer må ha definert den konstanten. Om du er med?
MC2 Skrevet 28. desember 2005 Skrevet 28. desember 2005 ja, for å vite konstanten må kisen kunne se kildekoden. Dersom en ser kildekoden spiller det ikke noen rolle hva du gjør. (phpBB bruker denne metoden for å sikre php filene sine)
Mobsan Skrevet 28. desember 2005 Forfatter Skrevet 28. desember 2005 Så du mener, så fort noen har mulighet for å se kildekoden, er det ikke mulig? Har også sett litt på hash, metoder for å garantere at filen som heter index.php er riktig index fil. Det som er dumt med denne metoden er at man må hardkode hash'n inn i alle filene, og om man gjør en liten endring vil man måtte bytte ut alt, og det blir fort stort arbeid.
Ernie Skrevet 28. desember 2005 Skrevet 28. desember 2005 Men da kan hvilken som helst side inkludere denne siden, så lenge man vet hvilken konstant som skal defineres. Den sier ikke noe om det er riktig side som inkluderer, bare at den som inkluderer må ha definert den konstanten. Om du er med? 5348450[/snapback] ... og hvem i alle dager skal klare å inkludere den fila remote da?
Mobsan Skrevet 28. desember 2005 Forfatter Skrevet 28. desember 2005 Om det finnes flere sider for forskjellige brukere som ligger på samme server, kan det jo være mulig å lete seg frem til bane+filnavn?
MC2 Skrevet 28. desember 2005 Skrevet 28. desember 2005 Så du mener, så fort noen har mulighet for å se kildekoden, er det ikke mulig? Har også sett litt på hash, metoder for å garantere at filen som heter index.php er riktig index fil. Det som er dumt med denne metoden er at man må hardkode hash'n inn i alle filene, og om man gjør en liten endring vil man måtte bytte ut alt, og det blir fort stort arbeid. 5348495[/snapback] nei, det jeg ment er at: hvis noen kan se kildekoden så spiller det ikke noen rolle hva du prøver å gjrøe for at bare noen filer skal kunne bli inkludert, for da kan han som ser koden se hvordan systemet virker, og da "bypass" sikkerhets tiltakene dine. det er ikke noe stort arbeid. Det eneste du trenger å gjøre er å legge inn denne koden define("SAFE",true); øverst i index.php fila og if(!defined("SAFE")) {die("Hacking attempt!");}; denne øverst i alle filene du vil bare skal kunne være inkludert av din index.php.
MC2 Skrevet 28. desember 2005 Skrevet 28. desember 2005 Om det finnes flere sider for forskjellige brukere som ligger på samme server, kan det jo være mulig å lete seg frem til bane+filnavn? 5348568[/snapback] uansett om de finner filnavn og bane kan de ikke se sourcecoden.
El Nino Skrevet 28. desember 2005 Skrevet 28. desember 2005 Jeg lager en stor side med mange små sider som blir includert. Hvordan vil man sperre for muligheten å kunne kjøre en php side om den ikke er includert via en spesifikk side, f.eks index.php i mitt tilfelle. index.php inkluderer sidene som brukes, men sidene skal ikke kunne bli inkludert av andre sider eller bli kjørt hvis man klarer å gjette seg til riktig filnavn, og skrive det inn i URL feltet. f.eks hvis filen, test.php blir kjørt direkte, vil jeg at den ikke skal gi output. eller vise en 404 error, men om den er inkludert via index.php skal den kjøres normalt. Finnes det noen måte å gjøre dette, noen gode ideer rundt dette? 5348106[/snapback] Ja, kutt ut hele opplegget. Jeg har sett for mange slike løsninger hvor man skal drive å hindre ditt og hindre datt for å få inkludert en fil når man skal lage en slik webside. Som de fleste websider så har man en header og en footer, altså en topp og bunn, som dette forumet for eksempel. I stedet for å gjøre slik (forenklet kode): <html> <head> <title>min side</title> </head> <body> <?php require_once("hovedside.php"); ?> </body> </html> Så splitter du index.php i 2 separerte filer, en header.php: <html> <head> <title>min side</title> </head> <body> og en footer.php: </body> </html> og i index.php så gjør du følgende: <?php require_once("header.php"); ?> Her kommer min hovedside.. <?php require_once("footer.php"); ?> Vola!!! Da har du fjernet hele problematikken ved inkludering, samt at det er ekstremt enkelt å vedlikeholde en slik webside. For å legge til flere sider, f.eks. side2.php: <?php require_once("header.php"); ?> Dette er side 2 <?php require_once("footer.php"); ?> El Nino
Mobsan Skrevet 28. desember 2005 Forfatter Skrevet 28. desember 2005 Uansett hva du synes er enklest, så har det ikke mye med hva jeg vil. Dessuten er det lite vits å ha en side med flere tusen linjer med kode siden jeg lager er ikke en liten hjemme side, men en større portal, derfor den blir ganske innviklet. Bare lurer på hvordan andre sider tar vare på sine sider.
Torbjørn Skrevet 28. desember 2005 Skrevet 28. desember 2005 Om det finnes flere sider for forskjellige brukere som ligger på samme server, kan det jo være mulig å lete seg frem til bane+filnavn? 5348568[/snapback] uansett om de finner filnavn og bane kan de ikke se sourcecoden. 5348576[/snapback] på samme server kan de fort klare det ja.
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å