Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] kopiowanie a chmod, bezpieczeństwo plików
Forum PHP.pl > Forum > Przedszkole
!*!
Na serwerze mam foldery z plikami, które mają ustawiony chmod na 0755, chciałbym wybrane pliki przenieść do innego folderu który też ma chmod ustawiony na 0755, jednak nie wiem jak w locie zmienić chmod folderu aby plik skopiował się bez problemu, a na koniec chmod został taki jak przed kopiowaniem...

  1. <?php
  2. $nowy = 'nowe/2110c.JPG';
  3. $stary ="stare/2110c.JPG";
  4. if (!copy($plik, $nowy)) {}
  5. ?>


Czytając manual zupełnie mi się poieszało...
erix
  1. <?php
  2. chmod(dirname($nowy), 0777));
  3. ?>


Z przywróceniem sobie poradzisz. winksmiley.jpg
!*!
  1. <?php
  2. $nowy = "5444591094621094620082110.JPG";
  3.  
  4. $plik ="stare/5444591094621094620082110.JPG";
  5.  
  6. chmod("stare/", 0777);
  7.  
  8. chmod(dirname($nowy), 0777);
  9. chmod(dirname($plik), 0777);
  10.  
  11. if (!copy($plik, $nowy)) {}
  12. ?>


Cytat
Warning: chmod() [function.chmod]: Operation not permitted in /var/www/inne/katalogi/katalogi.php on line 27

Warning: chmod() [function.chmod]: Operation not permitted in /var/www/inne/katalogi/katalogi.php on line 29

Warning: chmod() [function.chmod]: Operation not permitted in /var/www/inne/katalogi/katalogi.php on line 30

Warning: copy(5444591094621094620082110.JPG) [function.copy]: failed to open stream: Permission denied in /var/www/inne/katalogi/katalogi.php on line 32


hmm chyba coś nie tak...
erix
Hosting, to dedyk, czy współdzielony? Podejrzewam, że PHP działa innym koncie niż FTP (zakładam, że nim utworzyłeś katalog).
bim2
Czyli wejdź przez FTP na serwer, nadaj przez klienta FTP chmody na 0777 i w php będzie all śmigać.
erix
Cytat
nadaj przez klienta FTP chmody na 0777

Ale przez to nie osiągnie tego:
Cytat
a na koniec chmod został taki jak przed kopiowaniem...
bim2
Osiągnie, na koniec niech da chmod($plik, 0755); i wtedy php przejmie prawa do zarządzania katalogiem :]
erix
Ale potem nie będzie mógł znów wykonać tej operacji, bo 7 będzie dotyczyło tylko właściciela, a PHP prawdopodobnie nim nie jest. winksmiley.jpg
bim2
Mój błąd smile.gif
W FTP pierw folder musi mieć 0777, później w php dla folderu daj chown" title="Zobacz w manualu PHP" target="_manual jako php właściciela i na koniec chmod 0755 smile.gif
!*!
ok, pokombinuje z tym, a pytanie jakie najlepiej podawać chmody np. przy rejestracji użytkowników? Aby każdy z nich mógł wgrywać pliki do folderów?

hosting jest współdzielony, ehost.pl winksmiley.jpg katalogi zostału utworzone przez php [mkdir]
bim2
jak katalogi zostały dodane przez php to rób normalnei z chmodami jak pisał Erix biggrin.gif Było odrazu mówić haha.gif
Chmody na foldery do których wgrywasz pliki zostaw zawsze na 0777, nic im nie będzie. smile.gif
!*!
Ok, ale dla pewności zapytam:

  1. <?php
  2. mkdir('pliki/');
  3. chmod("pliki/", 0777);
  4.  
  5. while ($wiersz = mysql_fetch_assoc($quer))
  6. {
  7.  
  8. $dom = $wiersz['dom'];
  9. $ile = ++$i;
  10.  
  11. echo ''.$ile.' - '.$dom.' <br />';
  12.  
  13. mkdir('pliki/'.$dom.'');
  14. chmod("pliki/".$dom."", 0777);
  15. mkdir('pliki/'.$dom.'/sss');
  16. chmod("pliki/".$dom."/sss", 0777);
  17.  
  18. }
  19. ?>


Czyli, główny katalog ma chmod 0777, katalogi które się utworzą też, w nich użytkownicy zapisują swoje pliki, i dla pewności zapytam czy 0777 jest bezpieczny? nikt jakimś skryptem nie pokasuje mi plików, w końcu 0777 daje do tego prawo...
erix
Jeśli to będzie skrypt działający na serwerze, na którym masz konto, to na pewno. tongue.gif

Uprawnienia działają w obrębie serwera, spoza niego już nie.
!*!
Tak, wszytko dzieje się na tym samym serwerze. Hmm to w końcu jest to zabezpieczone czy nie? Jak umożliwić wgrywanie plików użytkownikowi, tak aby inny nie mógł ich "przypadkiem" skasować?
bim2
$nazwa_pliku = md5($nazwa_pliku+$nazwa_usera).'.'.$rozszerzenie;

smile.gif Tak żaden user nie nadpisze drugiemu pliku.
!*!
nie chodzi o nadpisanie pliku a ogólne bezpieczeństo plików, poprzez masowe wykasowanie właśnie przez to 0777 itp. nazwy plików akurat są ogólnie dostepne tak jak i ścieżki do nich.

Edit:

Idąc dalej, jeśli w źródle strony mam adres do pliku "img/stefan/plik.png/" gdzie "stefan" jest zmienną generowaną przez php, to czy moge utworzyć powiazanie do pliku, tak aby źródło wskazywało na "img/plik.png" a zmienna, w tym wypadku "stefan", była widziana tylko dla serwera?
Mógłbym umieścić to w sesji, ale... odczyt tego obrazka/ścieżki do pliku jest jakieś 24k + xxxk na innych stronach dziennie, czyli sesja nie jest chyba dobrym wyjściem.
erix
Cytat
nie chodzi o nadpisanie pliku a ogólne bezpieczeństo plików, poprzez masowe wykasowanie właśnie przez to 0777 itp. nazwy plików akurat są ogólnie dostepne tak jak i ścieżki do nich.

Jak Ci nikt się nie włamie na serwer i nie wykasuje plików/zmodyfikuje skryptów, to nie wykasuje.

Cytat
Idąc dalej, jeśli w źródle strony mam adres do pliku "img/stefan/plik.png/" gdzie "stefan" jest zmienną generowaną przez php, to czy moge utworzyć powiazanie do pliku, tak aby źródło wskazywało na "img/plik.png" a zmienna, w tym wypadku "stefan", była widziana tylko dla serwera?
Mógłbym umieścić to w sesji, ale... odczyt tego obrazka/ścieżki do pliku jest jakieś 24k + xxxk na innych stronach dziennie, czyli sesja nie jest chyba dobrym wyjściem.

Ale jest takie same dla wszystkich (stefan), czy zmienne, czy jak? Czy po prostu jesteś przewrażliwiony z punktu powyżej? tongue.gif
!*!
Jest zmienne. A pytam... tak masz rację, jest to jakieś przerważliwienie bo nie leżą mi te ogólne prawa 0777 tongue.gif i podlgadając źródło strony łatwo wykryć jak katalogi są zbudowane, z poziomu php możliwa jest tylko edycja plików txt, btw. zabezpieczenie odczytu plików tylko z folderu w którym ten plik się znajduje, styknie tylko blokada usuwania znaku "../" i "./" ? np.

adres do pliku:

Kod
www.adres.com/plik=tekst.txt


ale jeśli ktoś jest cwany to napisze w linku

Kod
www.adres.com/plik=../../tekst.txt


i już jest w innym katalogu, oraz może odczytać pliki, tak więc wykluczenie tych znaków pomoga, czy jest coś jeszcze?
erix
Od tego jest np. basename" title="Zobacz w manualu PHP" target="_manual. winksmiley.jpg

Przejrzyj forum, dużo razy to było. tongue.gif
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.