Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] CHMOD
moto0095
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


Witam. Przeszukałem google i nigdzie nie mogę znaleźć czegoś takiego.
A mianowicie mam oto taki kod php:

  1. <?php
  2. if ($handle = opendir('./galeria'))
  3. {
  4. while (($file = readdir($handle))!=false)
  5. {
  6. if ($file != '.' && $file != '..') {
  7. echo '$file<input type=text name=chmod><a href=chmod.php>dalej</a></a>';
  8. }
  9. }
  10. }
  11. closedir($handle);
  12. ?>


Wyświetla on listę plików w katalogu "galeria".
I mam takie pytanie jak zrobić aby w polu <input type=text name=chmod> po wpisaniu np: 0666 plik dostawał takie chmody questionmark.gifquestionmark.gif

Ten post edytował moto0095 28.03.2010, 16:17:59
Go to the top of the page
+Quote Post
Rysh
post
Post #2





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


W czym problem użyć chmod?



--------------------
Go to the top of the page
+Quote Post
moto0095
post
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


ja wiem jak użyć chmod() tylko nie wiem jak jakoś to połączyć
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Albo przekazujesz dane za pomocą formularza metodą post, albo za pomocą linka metodą get. Nie możesz mieszać tego i tego, tak jak masz:
  1. echo '$file<input type=text name=chmod><a href=chmod.php>dalej</a>';
Jeżeli chcesz wykorzystać formularz, to będziesz musiał skorzystać z input-a o typie button i możesz jako jego wartość (value) przekazać nazwę pliku, którą masz w zmiennej $file. Później tylko z tablicy $_POST odczytujesz nazwę pliku i prawa, no i używasz funkcji chmod.
Go to the top of the page
+Quote Post
Rysh
post
Post #5





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


  1. chmod($_GET['plik'], $_GET['chmod']);


--------------------
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(Rysh @ 28.03.2010, 17:43:23 ) *
  1. chmod($_GET['plik'], $_GET['chmod']);
Polecałbym raczej użyć formularza i wysłać dane metodą post. Użycie metody get jest niebezpieczne, bo potencjalny użytkownik mógłby zmienić prawa dostępu do innych plików wykorzystując adres w przeglądarce.

Ten post edytował mortus 28.03.2010, 16:50:07
Go to the top of the page
+Quote Post
moto0095
post
Post #7





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


Coś mi nie wychodzi. Zrobiłem takie coś ale nic się nie dzieje:
  1. <?php
  2. if ($handle = opendir('./galeria'))
  3. {
  4. while (($file = readdir($handle))!=false)
  5. {
  6. if ($file != '.' && $file != '..') {
  7. echo'<form method="post" action="?zdjecie"><input value="galeria/'.$file.'" name="file">';
  8. echo '<br><input type=text name=chmod><input type="button" value="dalej"></form>';
  9. }
  10. if(id == "zdjecie"){
  11. chmod($_POST['file'], $_POST['chmod']);
  12. }
  13. }
  14. }
  15. closedir($handle);
  16. ?>
Go to the top of the page
+Quote Post
Rysh
post
Post #8





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Cytat(mortus @ 28.03.2010, 17:49:37 ) *
Polecałbym raczej użyć formularza i wysłać dane metodą post. Użycie metody get jest niebezpieczne, bo potencjalny użytkownik mógłby zmienić prawa dostępu do innych plików wykorzystując adres w przeglądarce.

Nie widzę problemu też zmienić prawa dostępu do innych plików przez formularz.
W każdym razie, moto0095 chyba niema zamiaru tego udostępniać dla użytkownika. Więc proste zabezpieczenie powinno załatwić sprawę np:

  1. if ($_SESSION['admin'] && isset($_GET['plik']) && isset($_GET['chmod'])) {
  2. chmod($_GET['plik'], $_GET['chmod']);
  3. }


moto0095 co to jest w 10 linijce?

Ten post edytował Rysh 28.03.2010, 17:32:21


--------------------
Go to the top of the page
+Quote Post
mortus
post
Post #9





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(Rysh @ 28.03.2010, 18:31:23 ) *
Nie widzę problemu też zmienić prawa dostępu do innych plików przez formularz.
Nazwę pliku w formularzu przesyłamy w polu typu hidden i ma ona jedno, określone value. W polu typu text podajemy natomiast prawa, jakie chcemy nadać. Więc w jaki sposób zmienisz prawa dostępu do innego pliku?
Cytat(Rysh @ 28.03.2010, 18:31:23 ) *
W każdym razie, moto0095 niema zamiaru tego udostępniać dla użytkownika. Więc proste zabezpieczenie powinno załatwić sprawę np:
  1. if ($_SESSION['admin'] && isset($_GET['plik']) && isset($_GET['chmod'])) {
  2. chmod($_GET['plik'], $_GET['chmod']);
  3. }
Tylko co będzie, jeśli moto zechce któremuś plikowi nadać uprawnienia inne niż 0666? Ma zrobić tyle odnośników ile uprawnień?
Go to the top of the page
+Quote Post
moto0095
post
Post #10





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


Nie mam zamiaru udostępniać tego wszystkim.
Ale nadal mi coś nie działa. sciana.gif

właściwie to chodzi mi właśnie tylko o nadawanie chmod 0666
Go to the top of the page
+Quote Post
mortus
post
Post #11





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


No to jeśli chodzi o nadawanie zawsze chmod 0666, to po co je w ogóle przekazywać?
  1. <?php
  2. if($handle = opendir('./galeria')) {
  3. while (($file = readdir($handle)) !== false) {
  4. if ($file != '.' && $file != '..') {
  5. echo '$file : <a href="chmod.php?filename="' . $file . '>Zmień prawa</a><br/>';
  6. }
  7. }
  8. }
  9. closedir($handle);
  10. ?>
I plik chmod.php
  1. if(isset($_GET['filename']) && $_GET['filename'] != '') {
  2. chmod('galeria/' . $_GET['filename'], 0666);
  3. }
Założenie jest takie, że plik chmod.php i katalog galeria są w tym samym katalogu. Jeżeli nie, to trzeba odpowiednią ścieżkę podać.
Oczywiście trzeba jeszcze zabezpieczyć kod w pliku chmod.php, przed nieautoryzowanym wykonaniem (np. przy pomocy tablicy $_SESSION, jak pisał Rysh).

Ten post edytował mortus 28.03.2010, 19:01:21
Go to the top of the page
+Quote Post
Rysh
post
Post #12





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Cytat(mortus @ 28.03.2010, 18:42:06 ) *
Nazwę pliku w formularzu przesyłamy w polu typu hidden i ma ona jedno, określone value. W polu typu text podajemy natomiast prawa, jakie chcemy nadać. Więc w jaki sposób zmienisz prawa dostępu do innego pliku?
Tylko co będzie, jeśli moto zechce któremuś plikowi nadać uprawnienia inne niż 0666? Ma zrobić tyle odnośników ile uprawnień?

Mały test, zrób sobie pliczek:
  1. <html>
  2. <head></head>
  3. <body>
  4. <?php
  5. echo "<pre>";
  6. print_r($_POST);
  7. echo "</pre>";
  8. ?>
  9. <form method="POST">
  10. <input type="hidden" name="id" value="trescukryta" />
  11. <input type="text" name="jawne" /><br />
  12. <input type="submit" name="send" value="Wyslij" />
  13. </form>
  14. </body>
  15. </html>

Odpal przeglądarkę i sprawdź co zwraca.

A następnie wykonaj sobie taki trick, jeśli posiadasz Google Chrome wejdź PPM -> Zbadaj zawartość i zmodyfikuj tam kod html, ponownie wprowadź jakieś dane i sprawdź co tym razem zwraca input hidden winksmiley.jpg To, że jest schowany nie znaczy że jest on nie do zmieniania winksmiley.jpg
Jeśli nie posiadasz Google Chrome o to screen: http://wstaw.org/w/2V2/

Nic trudnego prawda? winksmiley.jpg


@moto0095:
  1. <?php
  2. if($handle = opendir('./galeria')) {
  3. while (($file = readdir($handle)) !== false) {
  4. if ($file != '.' && $file != '..') {
  5. echo "<a href=\"chmod.php?plik=". $file ."\">Zmień chmod.</a>";
  6. }
  7. }
  8. }
  9. closedir($handle);
  10. ?>


Plik chmod.php:
  1. <?php
  2. if (isset($_GET['file']) && $_SESSION['admin']) {
  3. if (chmod($_GET['file'], 0666)) {
  4. echo "Zmnieniono CHMOD.";
  5. } else {
  6. echo "Bład.";
  7. }
  8. }
  9.  
  10. ?>


Ten post edytował Rysh 28.03.2010, 18:35:48


--------------------
Go to the top of the page
+Quote Post
mortus
post
Post #13





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(Rysh @ 28.03.2010, 19:28:55 ) *
Mały test, zrób sobie pliczek:
  1. <html>
  2. <head></head>
  3. <body>
  4. <?php
  5. echo "<pre>";
  6. print_r($_POST);
  7. echo "</pre>";
  8. ?>
  9. <form method="POST">
  10. <input type="hidden" name="id" value="trescukryta" />
  11. <input type="text" name="jawne" /><br />
  12. <input type="submit" name="send" value="Wyslij" />
  13. </form>
  14. </body>
  15. </html>

Odpal przeglądarkę i sprawdź co zwraca.

A następnie wykonaj sobie taki trick, jeśli posiadasz Google Chrome wejdź PPM -> Zbadaj zawartość i zmodyfikuj tam kod html, ponownie wprowadź jakieś dane i sprawdź co tym razem zwraca input hidden winksmiley.jpg To, że jest schowany nie znaczy że jest on nie do zmieniania winksmiley.jpg
Jeśli nie posiadasz Google Chrome o to screen: http://wstaw.org/w/2V2/

Nic trudnego prawda? winksmiley.jpg


Wniosek z tego taki, że zawsze trzeba zabezpieczać skrypt przed nieautoryzowanym dostępem.

Cytat(Rysh @ 28.03.2010, 19:28:55 ) *
@moto0095:
  1. <?php
  2. if($handle = opendir('./galeria')) {
  3. while (($file = readdir($handle)) !== false) {
  4. if ($file != '.' && $file != '..') {
  5. echo "<a href=\"chmod.php?plik=". $file ."\">Zmień chmod.</a>";
  6. }
  7. }
  8. }
  9. closedir($handle);
  10. ?>


Plik chmod.php:
  1. <?php
  2. if (isset($_GET['file']) && $_SESSION['admin']) {
  3. if (chmod($_GET['file'], 0666)) {
  4. echo "Zmnieniono CHMOD.";
  5. } else {
  6. echo "Bład.";
  7. }
  8. }
  9.  
  10. ?>

Mój kod z pierwszego listingu wyświetlał nazwę pliku, a obok link dalej, służący do zmiany uprawnień do pliku o tej nazwie. Opcjonalnie zamiast dalej mogłeś wpisać Zmień prawa, ale to mało istotne. Twój plik chmod.php jest zupełnie bez sensu. Dlaczego? Bo przecież w $_SESSION nie musi być indexu 'admin', tylko może być inny. W $_GET przekazujesz tylko nazwę pliku, a plik jest w podkatalogu galeria. Poza tym nazwę pliku przekazujesz w $_GET['plik'], a nie $_GET['file']. Mój warunek z issetem jest mało istotny, natomiast to co Ty napisałeś w ogóle nie zadziała. Przyglądnij się uważnie.
Go to the top of the page
+Quote Post
Rysh
post
Post #14





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


To prawda $_GET['plik'] zamist $_GET['file'] - mój błąd.
Kod się oczywiście nie wykona jeśli w $_SESSION['admin'] nie będzie wartości true.
Czyli jeśli nie jesteś adminem - proste.

Co do pierwszej części chciałem Ci udowodnić że tak samo łatwo zmienić $_POST jak i $_GET winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
moto0095
post
Post #15





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


Wielkie dzięki .
Ale taka mała uwaga w kodzie jaki podał mortus jest taki mały błą
Cytat(mortus @ 28.03.2010, 19:15:57 ) *
No to jeśli chodzi o nadawanie zawsze chmod 0666, to po co je w ogóle przekazywać?
  1. <?php
  2. if($handle = opendir('./galeria')) {
  3. while (($file = readdir($handle)) !== false) {
  4. if ($file != '.' && $file != '..') {
  5. echo '$file : <a href="chmod.php?filename="' . $file . '>Zmień prawa</a><br/>';
  6. }
  7. }
  8. }
  9. closedir($handle);
  10. ?>


W wierszu 5 powinno być
  1. echo ''.$file.' : <a href="chmod.php?filename="' . $file . '>Zmień prawa</a><br/>';
snitch.gif


nie niestety nie działają oba skrypty pokazuje się:
Warning: chmod() [function.chmod]: Operation not permitted in /home/a8963311/public_html/file/chmod.php on line 3
Go to the top of the page
+Quote Post
mortus
post
Post #16





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


To może jeszcze raz. Struktura katalogów:
Kod
projekt\
    galeria\
        photo001.jpg
        photo002.jpg
        ...
    index.php
    chmod.php
Niech plik index.php wyświetla listę plików, a obok odnośnik do zmiany praw dostępu. Zatem treść pliku index.php:
  1. <?php
  2. if($handle = opendir('./galeria')) {
  3. while (($file = readdir($handle)) !== false) {
  4. if ($file != '.' && $file != '..') {
  5. echo $file . ' : <a href="chmod.php?filename=' . $file . '">Zmień prawa</a><br/>';
  6. }
  7. }
  8. }
  9. closedir($handle);
  10. ?>
Plik chmod.php natomiast powinien wyglądać tak:
  1. <?php
  2. if(isset($_GET['filename']) && $_GET['filename'] != '') {
  3. if(chmod('galeria/' . $_GET['filename'], 0666)) {
  4. echo 'Prawa do pliku ' . $_GET['filename'] . ' zostały zmienione!<br/>';
  5. } else {
  6. echo 'Prawa do pliku ' . $_GET['filename'] . ' nie zostały zmienione!<br/>';
  7. }
  8. }
  9. ?>
  10. <a href="index.php">Powrót</a>
Przetestowałem i działa.
@moto0095 Ostrzeżenie mówi, że próbowałeś wykonać niedozwoloną operację. Możliwe, że wskazałeś na niewłaściwy plik albo pliku nie ma w tym katalogu.
Go to the top of the page
+Quote Post
moto0095
post
Post #17





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


Niestety cały czs to samo sadsmiley02.gif .

Ten post edytował moto0095 29.03.2010, 22:42:06
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 Aktualny czas: 20.08.2025 - 10:44