Toon posts:

[htaccess] indexes restricten van buitenaf

Pagina: 1
Acties:
  • 178 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo allemaal,

Ik zit met een probleem, en nee niet het probleem waar 99% van de GoT htaccess topics over gaat.
Ik heb een LAMP server staan, en deze is bereikbaar vanaf het internet.
Ik wil vanaf localhost en binnen mijn netwerk wel directory listing hebben (Options Indexes), maar vanaf het internet niet; het moet geen opendir server worden, heb er nl. ook foto's e.d. op staan.

Op het moment heb ik dirlisting gewoon uitgezet, maar ik wil hier toch een oplossing voor... Een wachtwoord is voor mij een laatste optie, omdat ik verschillende klanten heb die dan weer wachtwoorden in moeten gaan voeren om hun (proef)site te bekijken, teveel rompslomp.

Ik wilde httpd.conf zo aanpassen dat ik dus wel dirlisting heb binnen het netwerk, maar vanaf het internet een 403 krijg.

Ik heb al aardig wat pagina's gegoogle'd... en dit is wat ik heb.

<Directory />
AllowOverride None
Options Indexes
Order allow,deny
Allow from localhost 127.0.0.1 10.0.0.
Satisfy Any
</Directory>

Maar zo kan ik er vanaf het internet helemaal niet bij...
Is er een mogelijkheid om bij wijze van spreke een apart configuratiestukje voor het www te maken, en voor m'n netwerk?
bovenstaande voor netwerk, onderstaande voor www.

<Directory />
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

Dit zal wel niet werken / netjes zijn, maar heeft iemand een idee?
Ik hoor het graag!

alvast bedankt,

Dick

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
Of het met Apache mogelijk is weet ik niet, mss is dit iets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
if($_SERVER['REMOTE_ADDR'] == "127.0.0.1" || substr($_SERVER['REMOTE_ADDR'],7) == "10.0.0.")
{
    echo "<ul>";
    if ($dir = @opendir("."))
    {
        while (($file = readdir($dir)) !== false)
        {
            echo "<li><a href=\"$file\">$file</a></li>\n";
        }
        closedir($dir);
    }
    echo "</ul>";
} else {
    header("HTTP/1.1 403 Forbidden");
}

?>

Dit gewoon als index.php opslaan in de mappen, dan heb je wat je wilt geloof ik...

[ Voor 19% gewijzigd door Alex) op 03-05-2006 01:15 ]

We are shaping the future


Verwijderd

Topicstarter
Bedankt voor je reactie! Had zelf (zonder op te scheppen :P) ook al aan zoiets gedacht, alleen vind ik de apache dirlisting mooier :P . Maar het is wel het effect wat ik wil hebben ja!
Misschien dat iemand daar nog iets voor weet?

Maar tot die tijd gebruik ik je script iig, tnx hey!!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
Anders maak je gewoon de Apache dirlisting na? Zo moeilijk is dat niet...

We are shaping the future


Verwijderd

Topicstarter
ps er zat nog een klein foutje in je script; je had substr($var, 7) gedaan, maar dat haalt alleen karakter 7 uit de string. het moet zijn substr($var, 0, 7), wat 0-7 uit de string haalt (in dit geval dus 10.0.0.).

hier de gewijzigde code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
if($_SERVER['REMOTE_ADDR'] == "127.0.0.1" || substr($_SERVER['REMOTE_ADDR'],0,7) == "10.0.0.")
{
    echo "<ul>";
    if ($dir = @opendir("."))
    {
        while (($file = readdir($dir)) !== false)
        {
            echo "<li><a href=\"$file\">$file</a></li>\n";
        }
        closedir($dir);
    }
    echo "</ul>";
} else {
    header("HTTP/1.1 403 Forbidden");
    echo "blaat";
}

?>

Verwijderd

Topicstarter
juh dat is ook wel zo Alex :)
maar die heeft ook schattige icoontjes en file type descriptions enzo :P wil d'r ook geen project van maken ofzo :)

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
if($_SERVER['REMOTE_ADDR'] == "127.0.0.1" || substr($_SERVER['REMOTE_ADDR'],0,7) == "10.0.0.")
{
    echo "<ul>";
    $dir = ".";
        $files = array();
        $open = opendir($dir);
        while ($file = readdir($open)) { if ($file != ".") { $files[] = $file; } }
        closedir($open);
        sort($files);
        reset($files);

        while ($files)
        {
                if($files[0] == "..") {
                        print "<li><b><a href=\"".$files[0]."\"><- Parent directory</a></li></b>\n";
                }
                else {
                        print "<li><a href=\"".$files[0]."\">".$files[0]."</a></li>\n";
                }
                array_shift($files);
        }

    echo "</ul>";
} else {
    header("HTTP/1.1 403 Forbidden");
    echo "blaat";
}

?>


zo script nog wat aangepast met gesorteerde dirlisting enzo!

[ Voor 24% gewijzigd door Verwijderd op 03-05-2006 02:06 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Ik zal je topic even verplaatsen naar Windows Servers en Software, waar het thuishoort (zoals je had kunnen lezen in Waar hoort mijn topic?). Je hebt daar meer kans om antwoord op je oorspronkelijke vraag te krijgen. :)

PRG>>WSS

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
Is SA niet beter van toepassing, aangezien Apache niet specifiek voor Windows is bedoeld...

We are shaping the future


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Sinds wanneer is Apache clientsoftware? ;)

(Ik heb ooit dezelfde vraag gesteld en blijkbaar is WSS toch voor dit soort topics bedoeld. Verdere discussie daarover lijkt me trouwens mee op zijn plaats in Lieve Adjes. :))

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Wij doen in SG niet aan Lieve Adjes :+ Dit soort discussies mogen in Feedback topic WSS :)

Verwijderd

Topicstarter
-NMe- schreef op woensdag 03 mei 2006 @ 02:09:
Ik zal je topic even verplaatsen naar Windows Servers en Software, waar het thuishoort (zoals je had kunnen lezen in Waar hoort mijn topic?). Je hebt daar meer kans om antwoord op je oorspronkelijke vraag te krijgen. :)

PRG>>WSS
Prima, bedankt. heb inderdaad de FAQ gelezen, maar aangezien Apache inderdaad (absoluut) niet windows-only software is (en ik het ook niet op het windows platform gebruik..), vond ik het hier stiekem toch beter passen. Maar als dat de kans op een antwoord op mijn vraag vergroot vind ik het prima :)

Kan het woord 'Windows' niet uit dat forum verwijderd worden dan? Vind ik persoonlijk duidelijker.

Dick

[ Voor 5% gewijzigd door Verwijderd op 03-05-2006 11:37 ]


Verwijderd

Topicstarter
nou ik heb er toch maar even werk van gemaakt, en zie hier het resultaat; een (bijna) volwaardige Apache directory listing clone.

Het enige wat nog ontbreekt zijn icoontjes (wel voor mappen, voor alle andere een standaard icoontje), en het kunnen sorteren op naam/datum/grootte (verder wel netjes gesorteerd hoor).

Weet niet of iemand er belang bij heeft, maar hier dus de broncode :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php

$index = ereg_replace("[a-zA-Z0-9\.]+$", "", $_SERVER['PHP_SELF']);

function filesizer($file) {
    unset($filesize);
    $filesize = filesize($file);
    $length = strlen($filesize);
    if($length >= 10) { $type = "G"; $division = 2;}
    elseif($length >= 7) { $type = "M"; $division = 1;}
    elseif($length >= 4) { $type = "K"; $division = 0;}
    else { $type = ""; $byte = true; }
    
    if($byte == false) {
        for($i=0;$i<=$division;$i++) {
            $filesize = $filesize / 1024;
        }
    }
    $filesize = round($filesize, $division);
    return $filesize.$type;
}
function spaces($file) {
    unset($spaces);
    $max = 85 - $file;
    for($i=1;$i<$max;$i++) {
        $spaces .= " ";
    }
    return $spaces;
}

if($_SERVER['REMOTE_ADDR'] == "127.0.0.1" || substr($_SERVER['REMOTE_ADDR'],0,7) == "10.0.0.") {
    $d = dir(".");
    echo "<html>
 <head>
  <title>Index of ".$index."</title>
 </head>
 <body>
<h1>Index of ".$index."</h1>
<pre>[img]\"/icons/blank.gif\"[/img] <a href='#'>Name</a>                                                           <a href='#'>Last modified</a>      <a href='#'>Size</a>  <hr>";
    echo "";
    $dir = ".";
    $files = array();
    $open = @opendir($dir);
    while ($file = readdir($open)) { 
        if ($file != ".") { 
            if(is_dir($file)) {
                $dirs[] = $file;
            }
            else {
                $files[] = $file; 
            }
        } 
    }
    closedir($open);
    sort($dirs);
    sort($files);
    reset($dirs);
    reset($files);
    $files = array_merge($dirs, $files);

    while($files) {
        if($files[0] == ".." && $index != "/") {
            print "[img]'/icons/back.gif'[/img] <a href=\"".$files[0]."\">Parent Directory</a>                                                                    -\n";
        }
        elseif($files[0] != ".." && $files[0] != "index.php") {
            if(is_dir($files[0])) {
                print "[img]'/icons/folder.gif'[/img] <a href=\"".$files[0]."\">".$files[0]."</a>".spaces(strlen($files[0]))."-\n";
            }
            else {
                $modify_date = date("d-M-Y H:i", filemtime($files[0]));
                $filesize = filesizer($files[0]);
                $ds_distance = 6 - strlen($filesize);
                unset($ds_space);
                for($i=0;$i<$ds_distance;$i++) { $ds_space .= " "; }
                $spaces = spaces(strlen($files[0].$modify_date.$filesize.$ds_space)-2);
                print "[img]'/icons/text.gif'[/img] <a href=\"".$files[0]."\">".$files[0]."</a>".$spaces.$modify_date.$ds_space.$filesize."\n";
            }
        }
        array_shift($files);
    }
    echo "</pre><hr>";
    
    // optional server info
    $uptime = `w`;
    $server = `hostname`;
    
    echo "<meta http-equiv='refresh' content='30' />";  
    echo "<pre>".$server.$uptime;
    echo "</pre>";
    echo "</body></html>";
} else {
    echo "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access ".$index."
on this server.</p>
</body></html>";
}

?>

[ Voor 18% gewijzigd door Verwijderd op 03-05-2006 16:37 ]


Verwijderd

Topicstarter
maarre iemand verder nog een idee? :P

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 12-12-2025
Waarom heb je niet gewoon die header laten staan? Dan krijgt de bezoeker gewoon netjes de 403-pagina voorgeschotelt die zijn browser hem ook geeft :)

We are shaping the future


Verwijderd

Topicstarter
ja die header heb ik er ook weer boven gezet.. alleen firefox geeft bij zo'n header gewoon een blanco pagina, ipv zo'n mooi 403 forbidden ding :)
IE heeft z'n eigen 403 pagina's...
Maar heb er dus maar zelf de tekst onder gezet.

  • GlowMouse
  • Registratie: November 2002
  • Niet online
In plaats van <Directory /> kun je misschien ook iets met Files of FilesMatch proberen. Ik heb helaas geen host om dit te testen, maar ik denk wel dat het hiermee moet kunnen.
Pagina: 1