[php] zabezpieczenia serwera

0

mam dość poważny problem...

gdy w skrypcie zrobię jakiś błąd, to w przeglądarce wywala go w stylu:

bla bla bla in /home/TU NAZWA SERWERA/ftp/NAZWA DOMENY/index.php on line 4

wiem że jakoś się da to zrobić tak, by odpalając daną domenę pomijało
/home/TU NAZWA SERWERA/ftp/NAZWA DOMENY
i wyświetlało
bla bla bla in /index.php on line 4

ktoś może wie jak?

0

http://php.net/manual/en/function.set-error-handler.php

I puszczasz przez własną funkcję. Przygotuj się jednak na to że fatal errory dalej będą pokazywać się normalnie.

0

no dobra, rozwinę problem

mam domenę np testowo.pl i w niej jakieś pliki

mam też subdomenę test.testowo.pl
folder tej subdomeny jest w katalogu głównym domeny testowo czyli

/home/SERWER/ftp/testowo.pl/test/

w moim mniemaniu, pliki z testowo.pl są jakby nadrzędne i skoro odpalam test.testowo.pl to ta subdomena powinna mieć dostęp tylko do plików w obrębie folderu test

tymczasem tworzę w folderze test taki oto plik index.php

 
<?php

if(!empty($_GET['pobierz'])){
$directory = "/home/SERWER/ftp/testowo.pl/".$_GET['pobierz'];
											
if(is_file($directory )){
	ob_clean (); 
	header("Content-type: application/octet-stream");
	header("Content-Disposition: attachment; filename=".$directory."");
	readfile($directory);
	die;
}
} else {


$myDirectory = opendir("/home/SERWER/ftp/testowo.pl/");


while($entryName = readdir($myDirectory)) {
	$dirArray[] = $entryName;
}


closedir($myDirectory);


$indexCount	= count($dirArray);
Print ("$indexCount files<br>\n");


sort($dirArray);


print("<TABLE border=1 cellpadding=5 cellspacing=0 class=whitelinks>\n");
print("<TR><TH>plik</TH><th>opcja</th></TR>\n");
for($index=0; $index < $indexCount; $index++) {
        if (substr("$dirArray[$index]", 0, 1) != "."){
		print("<TR><TD><a href=\"$dirArray[$index]\">$dirArray[$index]</a></td>");
		
		print("<td><a href='?pobierz=$dirArray[$index]'>pobierz</a></td>");
		print("</TR>\n");
	}
}
print("</TABLE>\n");
}

?>

i mi na stronie test.testowo.pl robi słitaśną tabelkę z listingu plików i folderów z prostą banalną opcją pobierania plików

wiadomo, lekko to przerobić i już mogę śmigać praktycznie po całym serwerze przechodzić przez katalogi i pobierać pliki, w szczególności pliki config.php i wiadomo...

ponoć jakoś mogę się przed tym uchronić, tylko jak?

0

Trzeba ustawić wartość PHP open_basedir w konfiguracji Apache dla tej domeny. W ostateczności w .htaccessie w jakimś katalogu o ile się da. Tylko patrząc po strukturze na tym serwerze zgaduję że to nazwa.pl i nie ustawisz tego tam :)

0

ziomas z nazwa.pl stwierdził że w htaccess mogę

tylko nie mam zielonego pojęcia jak

0
<Directory test>
php_value open_basedir /home/login/ftp/testowo.pl/test
</Directory>

Chyba tak. Wrzuć to do .htaccess w /ftp/testowo.pl

0

No, najlepiej będzie jak schrootujesz sobie apache / użyjesz selinux, ale pewnie na takie rarytasy nie możesz sobie pozwolić :P.

0

To jest tylko skromna nazwa.pl...

0

żeby było zabawniej, na ugu.pl mój skrypt nie działa i nie ma dostępu mimo że potrafi zrobić listing domen zapisanych na serwerze, ale głębiej już nie wejdzie
http://bajabongos90.ugu.pl/

a na nazwa.pl kurde mogę wszystko...

z tym directory wywala:

[500] Internal Server Error : Wewnętrzny błąd serwera

0

To zapytaj gościa z nazwy na tym live chacie jak on by to zrobił. Nie mam pomysłu jak inaczej.

0

gość mi odpowiedział, żebym w htaccess dodał Options -Indexes czy coś takiego

ale to chyba tylko uchroni przed indeksowaniem folderu z przeglądarki, ale pliki php przecież i tak wejdą sobie gdzie chcą bo przecież katalog który wybrałem dla sumdomeny nie jest jej katalogiem root

bez sensu takie coś ale co zrobić

0

Cóż, skoro nie pozwalają na ustawianie php_value, to nic nie zrobisz. Dobre rozwiązanie to inwestycja w VPS, konto shellowe albo dedyka. Wtedy możesz robić co chcesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1