Avatar billede kgp43 Nybegynder
27. maj 2005 - 14:49 Der er 16 kommentarer og
2 løsninger

Side på kun include, ikke loades direkte.

Hejsa,

Jeg har en side (index.php) hvor jeg inkludere nogle php sider.
Hvordan forhindre jeg at disse "include sider" kan loades direkte (hvis muligt), så den kun kan loades ved brug af "include" eller "require"?
Avatar billede barklund Nybegynder
27. maj 2005 - 14:52 #1
Placer dem uden for dit webscope. Altså hvis du har en filstruktur som:

public_html/index.php
public_html/page.php

Så lav en mappe som:

public_html/index.php
includes/page.php

Og hent den derude fra :)

--
Morten Barklund
Avatar billede sukos Juniormester
27. maj 2005 - 14:52 #2
if($_SERVER["PHP_SELF"] == "/index.php") {
echo"OK";
}
Avatar billede sukos Juniormester
27. maj 2005 - 14:58 #3
Og ellers, som barklund, er det jo klart at foretrække de ligger uden for http.

Og ellers, hvis du kan bruge .htaccess, kan du lægge dem i et subdir,
"myincludes",
og i det dir smide en .htaccess som ser så'n ud:

Order deny,allow
deny from all

og i din index.php bruge:

include("myincludes/fil.php");
Avatar billede angam Nybegynder
27. maj 2005 - 15:45 #4
Alternativ løsning:
I det kaldende script laver du en define lige før du inkluderer scriptet (index.php):

define('INCLUDE_MODE', true);
include_once('include.php');



og i include.php tester du så på om konstanten INCLUDE_MODE er sat som det første:

if(!defined('INCLUDE_MODE'))
    die('Sorry, but this file cannot be loaded from a browser');
Avatar billede coderdk Praktikant
27. maj 2005 - 17:04 #5
Jeg stemmer på sukos og barklund - det er det simpleste :)
Avatar billede barklund Nybegynder
27. maj 2005 - 17:09 #6
Jeg vidste slet ikke, at jeg stillede op til valg!

Men jeg takker for stemmen - exits polls spår mig som vinder! :D
Avatar billede kgp43 Nybegynder
27. maj 2005 - 17:18 #7
Tror det bliver for svært at flytte alle siderne udenfor public_html
Er der nogle problemer med angam's forslag?

må lige tænke over det :)
Avatar billede coderdk Praktikant
27. maj 2005 - 17:24 #8
Et andet forslag! Du kan i alle dine includes skrive:

    if ( basename( $_SERVER['PHP_SELF'] ) == basename( __FILE__ ) )
    {
        die( 'Denne fil kan ikke kaldes direkte.' );
    }
Avatar billede plazm Nybegynder
27. maj 2005 - 17:28 #9
codersdk nememre er nok
    if ( basename( $_SERVER['PHP_SELF'] ) != basename( "index.php" ) )
    {
        die( 'Denne fil kan ikke kaldes direkte.' );
    }
Avatar billede barklund Nybegynder
27. maj 2005 - 17:31 #10
Svært at flytte filerne? Det er da ret nemt :/

Og det er absolut den reneste løsning og den mest logiske - skal filen ikke kunne hentes over http, flyt den udenfor webscope :)
Avatar billede coderdk Praktikant
27. maj 2005 - 17:32 #11
plazm, Nemmere? Dét der vil ikke virke. Hvis du includer den fra f.eks. "users.php" vil den fejle ;)
Avatar billede coderdk Praktikant
27. maj 2005 - 17:33 #12
Den eneste "fejl" ved mit script, er at det så er bedst at give include-filen et sigende navn, som f.eks. users.inc.php eller lign ;)
Avatar billede kgp43 Nybegynder
27. maj 2005 - 17:41 #13
Jeg har alle mine include filer placeret i en folder kaldet "include", så det bliver ikke noget problem.

Hvis jeg flytter filerne udenfor public_html, så skal jeg til at rette en masse sider, hvilket jeg ikke ønsker. Men det vil placere mine include filer udenfor public_html fremover :)

coderdk: Der er to "_", ik?

Point til barklund og coderdk.
Avatar billede coderdk Praktikant
27. maj 2005 - 17:42 #14
Yeps, to på hver side af FILE :)
Avatar billede barklund Nybegynder
27. maj 2005 - 18:13 #15
Så kaster jeg et svar efter nogen :)
Avatar billede sukos Juniormester
27. maj 2005 - 18:38 #16
M.h.t. at skulle rette i en masse filer,

hvis du kan bruge .htaccess, så læg en i roden af dit website, (http), med flg.

php_value include_path "/fuld/sti/til/include/"

så vil PHP, (og Apache) finde dem! :O)


Eller du kan bruge ini_set som noget af det første på den fil som includer andre filer:

ini_set('include_path', "/fuld/sti/til/include/");
Avatar billede sukos Juniormester
27. maj 2005 - 18:39 #17
At lægge includefiler uden for http vil altid være at foretrække!
Avatar billede kgp43 Nybegynder
27. maj 2005 - 19:14 #18
Jeg vil flytte include filerne ud af public_html i stedet for, men vil bruge forslaget fra coderdk indtil videre :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester