Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyświetlenie obrazka z zabezpieczonego folderu
Forum PHP.pl > Forum > PHP
ktuvok
W jednym ze skryptów wyświetlam obrazek w sposób następujący:

  1. <?php
  2.  
  3. <img src="Obrazki/$NazwaObrazka">
  4. ";
  5.  
  6. ?>


Jednocześnie zabezpieczyłem katalog "Obrazki" na serwerze w taki sposób, aby juzer nie mógł sobie podejrzeć zdjęcia wpisując po prostu adres:

http://www.domena.pl/Obrazki/1234.jpg

Niestety, skoro zabezpieczyłem katalog, to nie mogę wyświetlić obrazka poprzez skrypt...

Co zrobić, aby skrypt miał dostęp do obrazków w zabezpieczonym katalogu?

Pozdrawiam,
K
bendi
Kod
<img src="img.php?i=bla.jpg">

img.jpg
  1. <?
  2. if( userIsAllowedToViewThisImage( $_GET['i'] ) ) {
  3. showImageToUser( $_GET['i'] );
  4. }
  5. else {
  6. doImage(" You're not allowed to view this image! " );
  7. }
  8. ?>

To tak w duzym skrocie.
Reszta implementacji zalezy od Ciebie!
ktuvok
Ehhh, chyba mnie nie zrozumiałeś, albo skrót jest zbyt duży...

Juzer zawsze ma być uprawiony do obejrzenia obrazka z poziomu skryptu! Inaczej mówiąc - nie jest potrzebna dodatkowa autoryzacja.

Zabezpieczenie katalogu jest po to, by juzer / gość / ktokolwiek nie mógł sobie obejrzeć obrazka nie wchodząc na odpowiednią stronę. Jak już wejdzie na stronę i odpali skrypt, który tworzę, to obrazek ma być mu wyświetlony.

Skrypt jest częścią systemu, który weryfikuje określone uprawnienia na każdym etapie, ale katalog musiałem jakoś zabezpieczyć i teraz nie wiem, jak to zabezpieczenie "zdjąć" dla juzerów, którzy uruchomili skrypt.

Będę wdzięczny za wszelkie sugestie.

Pozdrawiam,
K
pawel_k
nie wiem czy cos takiego ciebie zainteresuje ale przychodzi mi na mysl cos takiego:
- masz swoj katalog na serwerze, a w tym katalogu katalog public_html (czy jak tam admin ten katalog nazwal) na strone i katalog obrazki na obrazki winksmiley.jpg
- w katalogu obrazki masz obrazek obrazek.gif winksmiley.jpg
- w katalogu public_html jakis plik html a w srodku <img src="../obrazki/obrazek.gif" alt="obrazek" />

szczerze to nie wiem czy nie mozna do takiego obrazka jakos sie dostac ale na tan temat nie sie wypowie ktos lepiej obeznany winksmiley.jpg
cube
Cytat(ktuvok @ 2005-08-12 14:12:40)
Jednocześnie zabezpieczyłem katalog "Obrazki" na serwerze w taki sposób, aby juzer nie mógł sobie podejrzeć zdjęcia wpisując po prostu adres:

Na czym polega to zabezpieczenie (htaccess, skrypt php)?
ktuvok
.htaccess
orson
witam ...

zabezpiecz katalog dla wszystkich poza lokalnymi użytkownikami a obrazki wyświetlaj przez skrypt wysyłający nagłówek a potem readfile (proces serwera działa jako lokalny więc może czytać) ... odpowiedni nagłówek znajdziesz na stronie mana php ... ale chyba powinno być content-type: image/jpeg content-disposition: inline ...ale nie jestem pewien ...

pozdrawiam
number0
Witaj

Najpierw zabezpiecz zdjęcia:
Jeśli twój serwer www to Apache zrób plik . htaccess w katalogu ze zdjeciami.
W pliku umieść wpis „deny from all” to zabezpieczy pliki przed dostępnem z internetu wiecej o Apache i . htaccess na stronie: http://webdeveloper.pl/
Teraz mamy zabezpieczone zdjęcia przed niepowołanym dostępem.

Inny sposób zabezpieczenia to przeniesienie zdjęc z katalog dokumentów www serwera do jakiegoś bardziej bezpiecznego miejsca

Udostępnij zdjęcia za pomocą skryptu
Niech udostępnianiem zdjęć zajmie się skrypt php np. o nazwie image.php
Skrypt bedzie dział na zasadzie "bramki" odbiera żądanie, sprawdza użytkownika i odsyła plik

a obrazki wstawiasz:
  1. <img src="image.php?img=xxxx" alt=" obrazek "/>

xxx-nazwa pliku znajdującego się w bezpiecznym katalogu

Przykład

  1. <?php
  2. /*****************************************************************
  3.  Copyright (C) 2005 Sebastian Siennicki 
  4.  
  5.  Contact:
  6. email: kontakt [at] number0.info
  7. www: http://number0.info/
  8.  
  9.  This program is free software; you can redistribute it and/or
  10.  modify it under the terms of the GNU General Public License
  11.  as published by the Free Software Foundation; either version 2
  12.  of the License, or (at your option) any later version.
  13.  
  14.  More Info About The Licence At http://www.gnu.org/copyleft/gpl.html
  15. ******************************************************************/
  16.  
  17. // domyślny katalog z plikami
  18. define('IMAGE_DIR', './img/');
  19.  
  20. // domyślne obrazki z komunikatami
  21. define('IMAGE_NOT_FOUND', 'not_found.png');
  22. define('IMAGE_UNAUTHORIZED', 'unauthorized.png');
  23. define('IMAGE_DEFAULT', 'default.png');
  24.  
  25. // tabelka mime types
  26. $ext = array( 'image/gif' => 'gif',
  27. 'image/jpeg' => 'jpg',
  28. 'image/png' => 'png'
  29. );
  30.  
  31. // sprawdzamy obecność domyślnych plików
  32. if(! (file_exists(IMAGE_DIR.IMAGE_NOT_FOUND) and
  33. file_exists(IMAGE_DIR.IMAGE_UNAUTHORIZED) and
  34. file_exists(IMAGE_DIR.IMAGE_DEFAULT))
  35.  )
  36. {
  37. echo 'Blad!';
  38. exit();
  39. }
  40.  
  41. // Funkcja wysyłająca wskazany plik
  42. // z katalogu IMAGE_DIR
  43. function sendFile($image)
  44. {
  45. // sprawdzamy czy plik istnieje
  46. if(! file_exists(IMAGE_DIR.$image))
  47. {
  48. // Brak żądanego pliku
  49. sendFile(IMAGE_NOT_FOUND);
  50. }
  51.  
  52. // sprawdzanie typu pliku
  53. $type = array_search(end(explode(".",$image)), $GLOBALS["ext"]);
  54. if( $type == FALSE)
  55. {
  56. // brak zdefiniwenego typu mime
  57. sendFile(IMAGE_DEFAULT);
  58. }
  59.  
  60. // wysyłanie nagłówków http
  61. header("Content-Type: $type");
  62. header("Content-Disposition: inline; filename=$image");
  63.  
  64. // wysyłanie wskazanego pliku z IMAGE_DIR
  65. @readfile (IMAGE_DIR . $image);
  66. }
  67.  
  68. // tu wstawiamy mechanizm autoryzacji użytkownika
  69. $auth = TRUE;
  70.  
  71. // ustawianie nazwy żądanego pliku
  72. // trzeba dodać sprawdzanie poprawności
  73. $image = $_GET['img'];
  74. if ($image =='')
  75. {
  76. // nie zdefiniowano pliku
  77. sendFile(IMAGE_DEFAULT);
  78. }
  79.  
  80.  
  81. // sprawdzanie dostępu użytkownika
  82. if ($auth == TRUE)
  83. {
  84. // użytkownik posiada prawa
  85. sendFile($image);
  86. }
  87. else
  88. {
  89. // brak dostępu do pliku
  90. sendFile(IMAGE_UNAUTHORIZED);
  91. }
  92. ?>
Liko
bendi już dawno pisał o tym w drugim poście. exclamation.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.