Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zabezpieczenia
Forum PHP.pl > Forum > PHP
madalena
Ostatnio dużo czytałem o zabezpieczeniech danych przesyłanych drogą post i get
Nawet w prowadzonym przez mnie serwisie stosując stare techniki ktoś odczytał plik d.php gdzie przechowywane sa hasła

i zaproponował mi zmainą poniższego kodu na następujący

[php:1:38b804c758]<?php
if ((!isset($plik)) || ($plik==""))
{
include("aktualnosci.php");
}
else
{
include($plik);
}
?>[/php:1:38b804c758]

na następujący

[php:1:38b804c758]<?php
$plik = $HTTP_GET_VARS['plik'];
if ($plik||!file_exists($plik))
{
include("aktualnosci.php");
}
else
{
include($plik);
}
?>[/php:1:38b804c758]

Czy to jest poprawne i nie ma zadnego haka

i jak bylo to mozliew ze sprawdzili moje hasła

___
[scanner] Zmoderowane. Prosze używac BBCode
Zepco
IMHO ten drugi zapis jest bezpieczny.
Natomiast w pierwszym jest include, który nie sprawdza gdzie dany skrypt się znajduje, przez co można otworzyć skrypty z innych serwerów np:
http://twoja.strona.pl/?plik=http://forum....hp.pl/index.php
Oczywiście zamiast index.php można dać inny skrypt, który może zrobić to co chce jego autor.
spenalzo
[php:1:634a508c1a]<?php
if(!file_exists($plik))
{
include("404.php");
}
else
{
include("./".$plik);
}
?>[/php:1:634a508c1a]
kwiateek
Cytat
[php:1:74ec66b5d5]<?php
if(!file_exists($plik))
{
include("404.php");
}
else
{
include("./".$plik);
}
?>[/php:1:74ec66b5d5]

A co w przypadku gdy
[php:1:74ec66b5d5]<?php
$plik = '/etc/passwd';
?>[/php:1:74ec66b5d5]
Przejdzie do warunku drugiego.
Proponuję poprawić jeszcze kod o ten mankament.

Pozdrawiam.
spenalzo
W takim przypadku:
[php:1:d4636a2cf5]<?php
$plik = '/etc/passwd';
if(!file_exists($plik))
{
include("404.php");
}
else
{
// wykona sie ten warunek
include("./etc/passwd");
}
?>[/php:1:d4636a2cf5]
I skrypt się wysypie - bo nie ma takiego pliku w bieżącym (./) katalogu.

Ale poprawnie skrypt powinien wyglądać tak:
[php:1:d4636a2cf5]<?php
if(!file_exists("./".$plik))
{
include("404.php");
}
else
{

include("./".$plik);
}
?>[/php:1:d4636a2cf5]
KaMeLeOn
Panowie Miramar i PrZeMoL...
Uwagami na temat wypowiedzi proszę sie wymieniać na PW...
Posty nie zwiazane z tematem zostały usunięte.

PS. Proszę nie pisać bezsensownych postów na temat BBCode.
Od zwracania uwagi sa moderatorzy forum... Można ewentualnie wspomnieć...
Kinool
hmm no wlasnie trapi mi pewna sprawa jak kto robi
[php:1:c24b7d2059]<?php
include ($_GET['costam']);
?>[/php:1:c24b7d2059]

no to mozliwe jest podpiecie skrypty tak?? http://twoja.strona.pl/?costam=http://bad....ode.pl/code.php

no ale przeciez skrypt nie zostanie przeslany jako "skrypt" tylko jako wynik dzialania skryptu, tzn chodzi mi o to jezeli plik code.php ma taka zawarosc:
[php:1:c24b7d2059]<?php
$kiszka='tralala bla bla bla';
echo $kiszka;
?>[/php:1:c24b7d2059]
no to podstawienie code.php w includa wstawi tam "tralala bla bla bla" a nie $kiszka='tralala bla bla bla'; echo $kiszka;

czy sie myle?? jednym slowem smile.gif server nie moze wyslac jawnego kodu php tylko jego wynik dzialania

chyba ze w pliku code.php uzyje sie jakiegos tajemniczego parsowania czy czegos takiego :|
madalena
wyjasnijcie mi jeszcze jakim cudem koles odczytal zawartodc plików
php
CyklOP
Cytat
IMHO ten drugi zapis jest bezpieczny.
Natomiast w pierwszym jest include, który nie sprawdza gdzie dany skrypt się znajduje, przez co można otworzyć skrypty z innych serwerów np:
http://twoja.strona.pl/?plik=http://forum....hp.pl/index.php
Oczywiście zamiast index.php można dać inny skrypt, który może zrobić to co chce jego autor.


Nie jestem pewien czy to o to chodzi, ale chyba powyzszy post to dobrze wyjasnia smile.gif Tak wiec hasla wydobyl wpisujac: http://twoja.strona.pl/?cel=http://jegostr...rzanyskrypt.php

Tak wiec teoretycznie php wysyla juz przerobiony kod... z tym ze wykonuje z podana sciezka... dlatego np. gdy mamy 2 pliki:
katalog/wyswietl.php
[php:1:7062864d12]<?php

include("mama.php");

?>[/php:1:7062864d12]
(plik mama.php tez jest w katalogu "katalog/")
i uruchomimy plik: index.php (bedacy w glownym katalogu) zawierajacy:

[php:1:7062864d12]<?php
include("katalog/wyswietl.php");
?>[/php:1:7062864d12]

to zamiast po wejsciu na plik index.php wyswietlic mama.php wyswietli nam blad... (zastanowcie sie chwilke to zrozumiecie tongue.gif)

Moze to troche topornie wytlumaczone, ale po prostu w ten sposob gdy zaincludujemy plik spoza naszego serwera to umozliwiamy skryptowi z tamtego serwera dostanie sie do naszych zmiennych (zreszta sam juz nie wiem, sam sobie wszystko pomieszalem biggrin.gif zalezy od budowy twego skryptu... jest to luka w bezpieczenstwie i tyle)
Kinool
no chyba troche zakreciles Cyklop smile.gif jesli np za mama.php (w twoim przypadku) podstawisz jakis inny plik php z oddzielnego servera to powinien (i tak jest) ze ten skrypt bedzie wykonany na serverze nr 2 a jego wynik zostanie przeslany na server nr 1 czyli zamias zawartosci pliku mama.php bedzie odczytany wynik skryptu jaki zainkludujesz nie "czysty" kod skryptu tylko jego wynik
tak przynajmnie mi sie wydaje bo jesli server przesysal by czysty kod php to by byla totalna lipa smile.gif
CyklOP
Teoretycznie tak, ale wlasnie on jakos umozliwia temu plikowi na drugim serwerze korzystanie ze swoich zmiennych badz tez uruchamianie komend na tym serwerze. Po prostu tamten skrypt dostaje jako sciezke adres pierwszego serwera i *chyba* moze w nim namieszac. Nie jestem pewien, bo sie nie bawilem w cos takiego ale jak bede mial czas wolny to sprobuje smile.gif Moze ktos doswiadczony sie wypowie?
marcin96
Cytat
[..]a jego wynik zostanie przeslany na server nr 1 czyli zamias zawartosci pliku mama.php bedzie odczytany wynik skryptu jaki zainkludujesz nie "czysty" kod skryptu tylko jego wynik[..]


Co za problem zrobić tak:
[php:1:c349e6e90d]<?php

echo '<?php

// i tu jechane z kodem php, ktory chcesz wykonac na serwerze delikwenta

';

?>[/php:1:c349e6e90d]

Poza tym nie wszystkie serwery przeciez oblsuguja/parsuja php...

Jeszcze odnoścnie tego:

[php:1:c349e6e90d]<?php
if(!file_exists("./".$plik))
{
include("404.php");
}
else
{
include("./".$plik);
}
?>[/php:1:c349e6e90d]

..co za problem pod zmienną plik podpiąć np:
'../../../../etc/passwd'

Inne wykorzystanie dziury.... Wystarczy, że ktoś ma konto 'grozny_user' na serwerze i podstawi np:
'../../grozny_user/www/grozny_plik.php'

Do autora wątku - polecam poczytać:
http://www.zend.com/zend/art/art-oertli.php

również w manualu jest cały rozdział poświęcony bezpieczeństwu...
jono
ja sobie to rozwiązałem zapisując w tablicy na sztywno możliwe do zaakceptowania zapytania:

[php:1:2d70ec70ac]<?php
function official($kat){
//tutaj tablica z dopuszczonymi nazwami katalogów
$off = array('index', 'forum', ....);
if(in_array($kat, $off){
return TRUE;
}
return FALSE;
}
if(!offcial($_GET['kat'])){
header("Location: http://twojastrona.pl");
exit;
}
?>[/php:1:2d70ec70ac]

U mnie jeżeli koleś spróbuje 2 razy podać nieoficjalne zapytanie to go banuje dodatkowo smile.gif
bulek
A moze skorzystac z funckji basename ktora wyciagnie nazwe pliku ze scizki /zeby byc pewny ze nikt ci nie poda sciezki do pliku ktoprego nie chcesz/ http://pl2.php.net/manual/en/function.basename.php
. Jesli pliki sa w innym katalogu to mozemy miec stworzonego hasha ktorego kluczami sa nazwy plikow a wartosciami sciezki do tego pliku.
[php:1:c69198e1e6]<?php
$hash = array(
'plik.inc' => 'katalog1',
'plik2.inc' => 'katalog2',
);
$plik = basename($_REQUEST['plik']);
include($hash[$plik].'/'.$plik);
?>[/php:1:c69198e1e6][/url]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.