/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Include
Fra : Torben Ringsø Jensen


Dato : 21-10-07 22:12

Hej

Et prolem jeg ikke tidligere har haft tid til at løse er: Hvordan
undgår jeg, at man kan tilgå include-filer direkte? Jeg har typisk
mine hjemmesider hos en udbyder. Jeg bruger flittigt include() og
require(), men det jeg includer vil jeg gerne KUN skal kunne includes
- ikke læses.


 
 
Kim Emax (22-10-2007)
Kommentar
Fra : Kim Emax


Dato : 22-10-07 07:21

On Oct 21, 11:12 pm, Torben Ringsø Jensen <tor...@4E93Lringsoe.dk>
(slet 4E93L) wrote:
> Hej
>
> Et prolem jeg ikke tidligere har haft tid til at løse er: Hvordan
> undgår jeg, at man kan tilgå include-filer direkte? Jeg har typisk
> mine hjemmesider hos en udbyder. Jeg bruger flittigt include() og
> require(), men det jeg includer vil jeg gerne KUN skal kunne includes
> - ikke læses.

Vil du _altid_ være sikker, så kald dem *.php (eks. functions.php),
ikke alle udbydere har sat deny op i forbindelse med .inc filer.

Hvis du med "ikke tilgå" mener at man ikke en gang må kunne kalde
functions.php har du to muligheder:

1. lægge dem udenfor webscope, f.eks. i et include dir
2. hvis 1 ikke er muligt og htaccess er, så lav et include dir, hvor
du uploader en .htaccess fil, der ikke tillader at man læser derfra.

--
Mvh
Kim Emax


Leonard (22-10-2007)
Kommentar
Fra : Leonard


Dato : 22-10-07 07:27

On Mon, 22 Oct 2007 06:20:39 -0000, Kim Emax wrote:

> Vil du _altid_ være sikker, så kald dem *.php (eks. functions.php),
> ikke alle udbydere har sat deny op i forbindelse med .inc filer.

Det giver da ikke anden sikkerhed end at evt. php-kode i filerne
eksekveres. Almindelig html vil da blive vist alligevel.

--
Leonard
Mine biler: http://vw.leonard.dk/

Kim Emax (22-10-2007)
Kommentar
Fra : Kim Emax


Dato : 22-10-07 07:39

On Oct 22, 8:26 am, Leonard <piper...@gmail.invalid> wrote:
> On Mon, 22 Oct 2007 06:20:39 -0000, Kim Emax wrote:
> > Vil du _altid_ være sikker, så kald dem *.php (eks. functions.php),
> > ikke alle udbydere har sat deny op i forbindelse med .inc filer.
>
> Det giver da ikke anden sikkerhed end at evt. php-kode i filerne
> eksekveres. Almindelig html vil da blive vist alligevel.

Ikke forstået?

functions.php:
<?
function hest() {
return "pruuuuhhh....";
}
?>

giver dig ingenting, hvis du tilgår functions.php, vel?

Da det er lidt uklart, hvad der menes med "ikke tilgå" har jeg af
samme grund stillet et modspørgsmål til Torbens spørgsmål. Jeg er enig
med dig i at printer include filen noget som helst til browseren af
sig selv, så vises dette. Af samme grund holder jeg af .inc
opsætningen, det adskiller nemt, hvad der er kode, der skal afvikles,
hvad der skal inkludes.

--
Mvh
Kim Emax


Leonard (22-10-2007)
Kommentar
Fra : Leonard


Dato : 22-10-07 07:44

On Mon, 22 Oct 2007 06:38:31 -0000, Kim Emax wrote:

> Ikke forstået?

Jo, du viser da, at du har forstået mig helt klart.
Men din første udmelding kunne misforstås derhen, at bare filerne hed
..php så kune de ikke ses og det kommer jo helt anpå indholdet af disse
filer.

--
Leonard
Mine biler: http://vw.leonard.dk/

Kim Emax (22-10-2007)
Kommentar
Fra : Kim Emax


Dato : 22-10-07 07:58

On Oct 22, 8:44 am, Leonard <piper...@gmail.invalid> wrote:
> On Mon, 22 Oct 2007 06:38:31 -0000, Kim Emax wrote:
> > Ikke forstået?
>
> Jo, du viser da, at du har forstået mig helt klart.
> Men din første udmelding kunne misforstås derhen, at bare filerne hed
> .php så kune de ikke ses og det kommer jo helt anpå indholdet af disse
> filer.

nu ville det være _ret_ misvisende at lave en fil, der hed
functions.php, som printede noget som helst

--
Mvh
Kim Emax



Leonard (22-10-2007)
Kommentar
Fra : Leonard


Dato : 22-10-07 08:12

On Mon, 22 Oct 2007 06:58:06 -0000, Kim Emax wrote:

> nu ville det være _ret_ misvisende at lave en fil, der hed
> functions.php, som printede noget som helst

Tjah, men den kan jo hedde hvad som helst og det er jo nok ikke kun en
enkelt fil, der skal gemmes her.

--
Leonard
Mine biler: http://vw.leonard.dk/

Torben Ringsø Jensen (22-10-2007)
Kommentar
Fra : Torben Ringsø Jensen


Dato : 22-10-07 09:31

Hej Leonard og Kim

Tak for forslagene! Jeg har dog selv fundet på en meget meget
simpel forholdsregel. Jeg vil godt have jeres kritiske
kommentarer til det.

Jeg gør følgende:

index.php:
<? $tjekfoer = "9irie8dnp_H43";
include(generel_menu.php);
?>

generel_menu.php:
<? if($tjekfoer == "9irie8dnp_H43"){ ?>
<html>
</html>
<?}else{?>
Æh bæ!
<?}?>

Det kan vel ikke gøres bedre?

Ah bæ - kunne evt.skiftes ud med en header(location:...
Torben


Leonard (22-10-2007)
Kommentar
Fra : Leonard


Dato : 22-10-07 09:52

On 22 Oct 2007 08:30:53 GMT, Torben Ringsø Jensen wrote:

> Det kan vel ikke gøres bedre?

Jo, det er nemmere at have alle includefilerne i et dir udenfor
webscope.
Din metode kræver at du skal huske det i hver fil og det er dømt til at
fejle på et eller andet tidspunkt.

--
Leonard
Mine biler: http://vw.leonard.dk/

Johan Holst Nielsen (22-10-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 22-10-07 09:56

Torben Ringsø Jensen (slet R2SX3) wrote:
> Hej Leonard og Kim
>
> Tak for forslagene! Jeg har dog selv fundet på en meget meget
> simpel forholdsregel. Jeg vil godt have jeres kritiske
> kommentarer til det.
>
> Jeg gør følgende:
>
> index.php:
> <? $tjekfoer = "9irie8dnp_H43";
> include(generel_menu.php);
> ?>
>
> generel_menu.php:
> <? if($tjekfoer == "9irie8dnp_H43"){ ?>
> <html>
> </html>
> <?}else{?>
> Æh bæ!
> <?}?>
>
> Det kan vel ikke gøres bedre?
>
> Ah bæ - kunne evt.skiftes ud med en header(location:...
> Torben


Som Kim nævnte tidligere vil det være meget bedre at ligge alle de filer
der skal inkluderes i en mappe (f.eks. /include/).

I include mappen ligger du så en ".htaccess" fil med indholdet
"deny from all" - så er der ingen der kan kalde filerne direkte.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Torben Ringsø Jensen (22-10-2007)
Kommentar
Fra : Torben Ringsø Jensen


Dato : 22-10-07 10:31

Johan Holst Nielsen <spam@phpgeek.dk> skrev:

>Som Kim nævnte tidligere vil det
>være meget bedre at ligge alle de filer
>der skal inkluderes i en mappe
>(f.eks. /include/).
>
>I include mappen ligger du så en
>".htaccess" fil med indholdet
>"deny from all" - så er der ingen
>der kan kalde filerne direkte.

Bortset fra at udbyder tilsyneladende har en policy, som betyder
at .htaccess bliver slettet så snart de oprettes! Udenfor
webscope som Leonard lyder mere realistisk, men jeg synes bare
ikke det er praktisk. Den kodestump jeg foreslog, har jeg med i
min skabelon, hver gang jeg opretter en ny side :)

Torben


Johan Holst Nielsen (22-10-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 22-10-07 10:39

Torben Ringsø Jensen (slet 797M4) wrote:
> Johan Holst Nielsen <spam@phpgeek.dk> skrev:
>
>> Som Kim nævnte tidligere vil det
>> være meget bedre at ligge alle de filer
>> der skal inkluderes i en mappe
>> (f.eks. /include/).
>>
>> I include mappen ligger du så en
>> ".htaccess" fil med indholdet
>> "deny from all" - så er der ingen
>> der kan kalde filerne direkte.
>
> Bortset fra at udbyder tilsyneladende har en policy, som betyder
> at .htaccess bliver slettet så snart de oprettes! Udenfor
> webscope som Leonard lyder mere realistisk, men jeg synes bare
> ikke det er praktisk. Den kodestump jeg foreslog, har jeg med i
> min skabelon, hver gang jeg opretter en ny side :)

Hvis du vil have en kodeløsning er din løsning underlig...

Blot lave

<?php
define("MAINFILE",true);
?>

I include filerne laver du blot
<?php
if(!defined("MAINFILE")) {
exit;
}
?>

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Torben Ringsø Jensen (22-10-2007)
Kommentar
Fra : Torben Ringsø Jensen


Dato : 22-10-07 14:43

Johan Holst Nielsen <spam@phpgeek.dk> skrev:
><?php
>define("MAINFILE",true);
>?>
>
>I include filerne laver du blot
><?php
>if(!defined("MAINFILE")) {
>exit;
>}
>?>

Helt tilstrækkeligt! Det er da simpelt.

Nej, der er ikke rigtigt noget sikkerhedsproblem i det. Det er
kun, fordi jeg sidder sammen med folk, der går meget op i den
slags småting :s

Med tak i alt fald.


Leonard (22-10-2007)
Kommentar
Fra : Leonard


Dato : 22-10-07 10:59

On 22 Oct 2007 09:31:18 GMT, Torben Ringsø Jensen wrote:

> Bortset fra at udbyder tilsyneladende har en policy, som betyder
> at .htaccess bliver slettet så snart de oprettes! Udenfor

Det er nemt at skifte udbyder

--
Leonard
Mine biler: http://vw.leonard.dk/

anders (18-11-2007)
Kommentar
Fra : anders


Dato : 18-11-07 15:02

Torben Ringsø Jensen (slet R2SX3) wrote:
> Hej Leonard og Kim
>
> Tak for forslagene! Jeg har dog selv fundet på en meget meget
> simpel forholdsregel. Jeg vil godt have jeres kritiske
> kommentarer til det.
>
> Jeg gør følgende:
>
> index.php:
> <? $tjekfoer = "9irie8dnp_H43";
> include(generel_menu.php);
> ?>
>
> generel_menu.php:
> <? if($tjekfoer == "9irie8dnp_H43"){ ?>
> <html>
> </html>
> <?}else{?>
> Æh bæ!
> <?}?>
>
> Det kan vel ikke gøres bedre?
>
> Ah bæ - kunne evt.skiftes ud med en header(location:...
> Torben
>
Man kunne vel lave det som
$filename= basename($_SERVER_HTTP_SELF);
if ($filename <> den_fil_der_ikke_må_læses.php) {

Alt det du har lyst til etc.


else{

Hvad du ellers vil


mvh
Anders

Bertel Lund Hansen (22-10-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 22-10-07 11:18

slet 4E93L skrev:

> Et prolem jeg ikke tidligere har haft tid til at løse er: Hvordan
> undgår jeg, at man kan tilgå include-filer direkte?

Kald dem filnavn.inc.php og ikke kun filnavn.php som foreslået.
Når inc indgår i filnavnet, er det nemt at huske at det er en
includefil.

Jeg forstår ikke problemet med at man ikke må læse evt.HTML. Hvis
det aldrig skal vises, så slet det. Hvis det skal vises, er det
ligemeget om det kan ses på én eller to måder.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Leonard (22-10-2007)
Kommentar
Fra : Leonard


Dato : 22-10-07 11:24

On Mon, 22 Oct 2007 12:18:09 +0200, Bertel Lund Hansen wrote:

> Jeg forstår ikke problemet med at man ikke må læse evt.HTML. Hvis
> det aldrig skal vises, så slet det. Hvis det skal vises, er det
> ligemeget om det kan ses på én eller to måder.

Der kan jo være noget i en include-fil, der er afhøngigt af noget i en
anden og som vil give en grim fejlmeddelelse, hvis den vises udenfor den
sammenhæng, som den er beregnet til.
Men jeg kan nu heller ikke se problemet, sålænge serveren ikke
præsenterer den php-kode, der er i filerne, men kun det html, så er det
ikkee t problem for mig. Og jeg tror heller ikke, der er nogen der får
noget ud af eller som gider at sidde og prøve sig frem for at finde de
filnavne, der kan vises noget sparsomt indhold af.
Er det for at undgå en hacker, så skal der noget helt andet til.

--
Leonard
Mine biler: http://vw.leonard.dk/

Bertel Lund Hansen (22-10-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 22-10-07 12:01

Leonard skrev:

> Der kan jo være noget i en include-fil, der er afhøngigt af noget i en
> anden og som vil give en grim fejlmeddelelse, hvis den vises udenfor den
> sammenhæng, som den er beregnet til.

Jo, men den der tilgår include-filer, er selv ansvarlig for det
rod det måske giver.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Kim Emax (22-10-2007)
Kommentar
Fra : Kim Emax


Dato : 22-10-07 12:48

On Oct 22, 1:01 pm, Bertel Lund Hansen <unosp...@lundhansen.dk> wrote:

> Jo, men den der tilgår include-filer, er selv ansvarlig for det
> rod det måske giver.

Øhh? Starter du _alle_ dine filer med at skrive _hele_ klassen ind
eller finder du det også smart at bruge require til at inkludere den
med?

Mvh
Kim Emax


Martin (22-10-2007)
Kommentar
Fra : Martin


Dato : 22-10-07 16:05

Kim Emax wrote:
> On Oct 22, 1:01 pm, Bertel Lund Hansen <unosp...@lundhansen.dk> wrote:
>
>> Jo, men den der tilgår include-filer, er selv ansvarlig for det
>> rod det måske giver.
>
> Øhh? Starter du _alle_ dine filer med at skrive _hele_ klassen ind
> eller finder du det også smart at bruge require til at inkludere den
> med?

Nå man bruger klasser, så er der sådan en dejlig feature indbygget i PHP
der hedder __autoload

function __autoload($class) {
require_once(INCLUDE_PATH . '/' . $class . '.class.php');
}

Nu behøver man aldrig tænke over hvilke filer der skal inkluderes, man
skriver bare

$foo = new Foo();

Så henter autoload selv klassen via Foo.class.php
- __autoload funktionen kan selvfølgelig udbygges, så den læser et
helt bibliotek ind i session og ellers kigger sessionen igennem for den
korrekte fil.

Min autload funktion ser iøvrigt således ud

function __autoload($className) {
$class = strtolower($className);

static $folders = null;
if(!$folders) $folders = classFolder($class);

if(array_key_exists($class,$folders)) {
   require_once($folders[$class]);
}
else {
   eval('class '.$className.' { public function __construct() { throw
new Exception(\'Class '.$className.' not found\'); } }');
}
}

function classFolder($className, $sub="") {
$dir = dir(INCLUDE_DIR . $sub);

$files=array();
while(false !== ($folder = $dir->read())) {
if($folder != "." && $folder != "..") {
if(is_dir(INCLUDE_DIR . $sub . $folder)) {
$files = array_merge($files,classFolder($className,
$sub.$folder."/"));
} else {
   $files[str_replace('.class.php','',$folder)] = INCLUDE_DIR
.. $sub . $folder;
}
}
}
$dir->close();
return $files;
}

Bertel Lund Hansen (23-10-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 23-10-07 07:34

Kim Emax skrev:

> > Jo, men den der tilgår include-filer, er selv ansvarlig for det
> > rod det måske giver.

> Øhh?

Sammenhængen er smuttet for dig. Jeg taler om dem der skrive
filnavne med inc ind i browserens adressefelt for at prøve at
lure koden (eller evt. bruger andre fiduser).

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Martin (22-10-2007)
Kommentar
Fra : Martin


Dato : 22-10-07 15:57

Torben Ringsø Jensen (slet 4E93L) wrote:
> Hej
>
> Et prolem jeg ikke tidligere har haft tid til at løse er: Hvordan
> undgår jeg, at man kan tilgå include-filer direkte? Jeg har typisk
> mine hjemmesider hos en udbyder. Jeg bruger flittigt include() og
> require(), men det jeg includer vil jeg gerne KUN skal kunne includes
> - ikke læses.
>

Bare lige som det også kunne bruges

Lige en tegning over dit websted

- root
- www (her ligger index.php og alt det andet)
- include (her kan du så smide alle dine include ting - mappen er
uden for webscope)

Nu kan du så i din config fil (denne skal kaldes på alle de steder hvor
du vil include noget fra include mappen)

<?php
ini_set('include_path',$_SERVER['DOCUMENT_ROOT'].'/../include/');
/*
Det kan være denne ikke altid virker, virker fint på mit hotel - men
ellers så få fat i din $_SERVER['DOCUMENT_ROOT'] og pil www mappen ud og
sæt resten ind - så kan det være det ser sådan her ud
/wwwroot/dit_domæne/www/
Så skal du så sætte ind istedet for $_SERVER['DOCUMENT_ROOT']
/wwwroot/dit_domæne/include/
*/
?>

Nu kan du så simpelt bare kalde

require('fil.php');

Så vil den først kigge i mappen www om der skulle ligge en fil.php -
derefter kigger den så i din include sti om der skulle ligge en fil.php
- hvis der ikke gør det - så fejler din require.

Så hvis du har en fil der ligger i en_undermappe og du skal bruge den i
en fil i www mappen - så skal man bare skrive
require('en_undermappe/fil.php');

- www
- en_undermappe

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste