Gå til innhold

Side skal kun være tilgjengelig via include


Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet

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

Skrevet (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 av Mobsan
Skrevet

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!"};

Skrevet

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)

Skrevet

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?

Skrevet

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)

Skrevet

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.

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

Skrevet

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?

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

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

Skrevet
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

Skrevet

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.

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

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