Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zabezpieczenia
madalena
post 20.10.2003, 10:11:29
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 14.10.2003

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Zepco
post 20.10.2003, 11:04:21
Post #2





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 5.09.2003
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
spenalzo
post 20.10.2003, 11:15:09
Post #3





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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


--------------------

Go to the top of the page
+Quote Post
kwiateek
post 20.10.2003, 20:55:41
Post #4





Grupa: Zarejestrowani
Postów: 223
Pomógł: 0
Dołączył: 13.01.2003
Skąd: 3rd ball of mud behind a big ball of burning gas

Ostrzeżenie: (0%)
-----


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.


--------------------
It's Time to Join the PLD Linux Generation!
<? while (!$success) { $try++; } ?>
Go to the top of the page
+Quote Post
spenalzo
post 20.10.2003, 21:30:29
Post #5





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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]


--------------------

Go to the top of the page
+Quote Post
KaMeLeOn
post 21.10.2003, 00:00:21
Post #6





Grupa: Zarejestrowani
Postów: 680
Pomógł: 0
Dołączył: 1.10.2002
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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ć...


--------------------
"Czerp z innych, ale nie kopiuj ich. Bądź sobą." Michel Quoist
Go to the top of the page
+Quote Post
Kinool
post 21.10.2003, 09:42:35
Post #7





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

Ostrzeżenie: (0%)
-----


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 :|
Go to the top of the page
+Quote Post
madalena
post 21.10.2003, 14:40:45
Post #8





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 14.10.2003

Ostrzeżenie: (0%)
-----


wyjasnijcie mi jeszcze jakim cudem koles odczytal zawartodc plików
php
Go to the top of the page
+Quote Post
CyklOP
post 21.10.2003, 16:22:59
Post #9





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 16.08.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
Kinool
post 21.10.2003, 19:49:11
Post #10





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
CyklOP
post 21.10.2003, 20:11:12
Post #11





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 16.08.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
marcin96
post 21.10.2003, 20:31:16
Post #12





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 21.08.2003
Skąd: Będzin

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
jono
post 22.10.2003, 07:16:58
Post #13





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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


--------------------
if(function_exists("zrozum_kobiete")){
echo "Niemożliwe!"; exit;}
Go to the top of the page
+Quote Post
bulek
post 23.10.2003, 07:53:21
Post #14





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 23.10.2003

Ostrzeżenie: (0%)
-----


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]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 10:17