Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Ukrywanie linków
Forum PHP.pl > Forum > Przedszkole
neotorrent
Witam.
Mam takie małe pytanko. Chciałbym ukryć link przed nieproszonymi oczyma smile.gif Jak skutecznie to zrobić?
Podam na przykładzie:
Mam jakiś tam przycisk Pobierz no i gdy na niego kliknę to wyskakuje mi ścieżka skąd pobierany jest ten plik np. http://example.com/plik.zip
Chciałbym tak zrobić żeby nikt nie mógł sprawdzić tej ścieżki gdzie dokładnie leży ten plik.

Szukałem w manualu dokopałem się do Urlencode tylko jakoś nie umiem tego ugryźć ;/
Macie może jakiś sposób na to?

Pozdrawiam
xxdrago
header
  1. <?php
  2. // We'll be outputting a PDF
  3. header('Content-type: application/pdf');
  4.  
  5. // It will be called downloaded.pdf
  6. header('Content-Disposition: attachment; filename="downloaded.pdf"');
  7.  
  8. // The PDF source is in original.pdf
  9. readfile('original.pdf');
  10. ?>
by_ikar
Generalnie tej ścieżki nie ukryjesz, możesz ją "zaciemnić" poprzez wyżej podany sposób (tak zwany force download), ale tak czy inaczej ścieżka do pobieranego pliku musi być. Bo niby skąd program do pobierania będzie wiedział jaki jest docelowy adres pliku który ma pobrać? Z kosmosu tych danych sobie nie weźmie, telepatą pewnie też nie jest. Tak więc adresu do jakiego kolwiek pliku który chcesz żeby była możliwość pobrania, nie ukryjesz.

Jedyną skuteczną metodą ukrycia takiego adresu, jest nie danie możliwości pobrania danego pliku. Wówczas nikt danego pliku nie pobierze, bo nikt adresu znać nie będzie.
thek
@by_ikar: zaciemnienie poprzez plik pośredniczący, a dodatkowo katalog z plikami zabezpieczony htaccessem przed wpisaniem bezpośrediej ściezki i walący wtedy 403 forbidden smile.gif A by było weselej to ów plik pośredniczący dotyczy tylko zalogowanych oraz masz system kontroli dostępu (jakiś ACL, choćby prosty). Ja w ten sposób często limituję userom dostęp do wrażliwszych rzeczy. ostatnim razem użyłem tego w systemie faktur. Każdy user może ściągać faktury nim, ale tylko swoje. Nawet jeśli zna dokładną ścieżkę do katalogu innego usera oraz nazwę pliku to dostanie 403. No i skrypt jest tak napisany, że każdy user ma swój "katalog domowy", a skrypt wykrywa próby "łażenia" poza swoim home.
Rysh
A nie może dodatkowo trzymać tych plików poza public_html ?
neotorrent
thek mógłbyś wstawić przykład takiego pliku htaccess który nie pozwoli na bezpośrednie ściąganie z linku?
by_ikar
Cytat(neotorrent @ 13.03.2012, 13:46:05 ) *
thek mógłbyś wstawić przykład takiego pliku htaccess który nie pozwoli na bezpośrednie ściąganie z linku?


Kod
deny from all


Ok, @thek, rozumiem sytuacje, ale tutaj autor tak to napisał jakby chciał całkowicie ukryć link, nawet ten zaciemniony (force download). A to że można do takiego force download dorzucić jakiś acl, to w sumie żadna specjalna nowość wink.gif
neotorrent
Chyba troszkę nie możecie mnie zrozumieć haha.gif
Dajmy na to:
Mam system pobierania tapet za sms.
Użytkownik wpisuje kod potwierdza kod działa wszystko jest okej.
I w Tym momencie wyskakuje mu przycisk pobierz klika na niego i sciaga tapete.
Ale równie dobrze może skopiować bezpośredni odnośnik i wysłać koledze lub bóg wie komu by sobie ściągnął a nie zapłacił.
I teraz chodzi mi o to jak się przed Tym zabezpieczyć bo htaccess owszem zablokuje pobieranie plików z tego folderu jednak wcale go nie można pobrać nawet przez przycisk pobierz tongue.gif.
Macie jakieś porady dla mnie jak to zrobić ?
lobopol
No w pierwszej odpowiedzi masz odpowiedź.
neotorrent
Jestem jakiś ciemny i nie za bardzo wiem jak to użyć ;/
Jakiś przykład wytłumaczony?
lobopol
  1. if(!isset($_SESSION['mozna-sciagac'])) {
  2. die('nie ściągniesz');
  3. }
  4. // to ma być ustawione na typ pliku
  5. header('Content-type: application/pdf');
  6.  
  7. // nazwa pliku wyświetlana przy ściąganiu
  8. header('Content-Disposition: attachment; filename="downloaded.pdf"');
  9.  
  10. // adres pliku który ma być ściągany
  11. readfile('pliki/original.pdf');

i w pliki plik .htaccess
Kod
deny from all
neotorrent
I wtedy
  1. <a href="downloaded.pdf"> Pobierz </a>
?
xxdrago
Nie, wystarczy , że wywołasz tą stronę a plik zacznie się pobierać.
neotorrent
A da się zrobić żeby było wywoływane przez przycisk ?

//EDIT

down.php
  1. <?php
  2. $_SESSION['mozna-sciagac'] = 1;
  3. echo '<a href="header.php">Sciągnij</a>';
  4. ?>


header.php
  1. <?
  2. if(!isset($_SESSION['mozna-sciagac'])) {
  3. die('nie ściągniesz');
  4. }
  5. // to ma być ustawione na typ pliku
  6. header('Content-type: application/zip');
  7.  
  8. // nazwa pliku wyświetlana przy ściąganiu
  9. header('Content-Disposition: attachment; filename="Dyna.zip"');
  10.  
  11. // adres pliku który ma być ściągany
  12. readfile('pliki/DynamicPage.zip');
  13. ?>


w katalogu pliki jest pliki jest DynamicPage.zip i htaccess

Gdy kliknę w ściągni rzuca mi krzakami typu
  1. PK =<&#65533; DynamicPage/UX z &#65533;K&#65533; &#65533;K&#65533;PK&#65533;=&#65533;<&#65533;DynamicPage/.DS_StoreUX &#65533; &#65533;K&#65533; &#65533;K&#65533;&#65533;&#65533;A &#65533;0E&#65533;&#65533;. n&#65533;t&#65533;+x&#65533; z/ &#65533;+)tQ&#65533;w&#65533;&#65533;<&#65533;&#65533;|&#65533;&#65533;E&#65533;&#65533;&#65533;Ax&#65533;&#820;&#65533;&&#65533; [&#65533;&#65533;9&#65533;H&#65533;O)8&#65533;z&#65533;&#65533;&#65533;&#65533;&#65533;6Mm&#65533;&#65533;&#65533;&#65533;&#65533; J&#65533;h&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;B&#65533;&#65533;&#65533;&#65533;ZL&#65533;&#65533; !&#65533;&#65533;O&#65533;K6&#65533;gt&#65533;&#65533;q&#65533;&#65533;&#65533;%&#65533;2:&#65533; &#65533;&#1118;t&#65533;&#65533;M&#65533;&#65533;a&#65533;l&#65533;P&#65533;&#1118;o-Y&#65533;&#65533;a&#65533;&#65533;b&#65533;_a&#65533;&#65533;B&#65533;0&#65533;/&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;0&#65533;xI8d&#65533;&#65533;p&#65533;[&#65533;&#65533;&#65533;%&#65533;0 &#65533;&#65533;PK= ""&#65533;PK &#65533;=&#65533;<&#65533; __MACOSX/UX &#65533; &#65533;K&#65533; &#65533;K&#65533;PK &#65533;=&#65533;<&#65533;__MACOSX/DynamicPage/UX &#65533; &#65533;K&#65533; &#65533;K&#65533;PK&#65533;=&#65533;<&#65533; __MACOSX/DynamicPage/._.DS_StoreUX &#65533; &#65533;K&#65533; &#65533;K&#65533;c`cg`b`&#65533;MLV&#65533;V&#65533;P&#65533;&#65533;'���A H��;PKܑ��(RPK�=�<�DynamicPage/about.htmlUX � �K� �K��U�n�F}��b���$2Z��)���}h��N�"��j9��� ����=�%e5A� ���9g��첽�������w��F������E�:?k G���/�)����v6����C�����"?�&_�� 8.�������0�*j^��0Jҭ�2�Eo�.Ŷ){��V��<�e�As�1NJ"�FBE;ϛe�e3xՃq$�X,> ����꜆_W}���rk��R.�Ծ�:��,]g���M��>��!VmS `{��m6��xp���؋bj$y g5ZC��������qYeCy���!4]���ڟ��M��yvM��IYS_Wu=8��a����7;k;'-gu�ɋ~6%œ���c��Td^ qI��"��l]ʘ�ְ�ժ��3e;~s{f���@e���m ��?cl 9E]��/��&���f,m^Tȯ�eT��b<6C&#65533;G=&#65533;)&#65533;&#1611;<&#65533;&#65533;S&#65533;X&#65533;&#65533;&#42421;F,&#65533;&#65533;&#65533;ZEa#&#65533;&#1482;&#65533;W!&#65533;&#65533;&#1538;4&#65533;H&#65533;&#453;8QIt&#65533;6&#65533;p !)&&#65533;)$&#65533;r&#65533;"���j�t2�ǟ��0s�p�*i:�SҠ����8�Ȧ�oP�� r��n� N��f����D�\M�!���Y�l� ���_DBy�k!�#֬68�����{R�"G &#65533;&#65533;&#65533;NgP-&#65533;tD&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;?&#65533; ?&#65533;&#65533;&#65533;&#65533;R&#46337;&#65533;0&#65533;&#65533;&#65533;&#1529;&#65533;x&#65533;-N&#65533;&#65533;a&#65533;&#65533;7&#65533;K&#65533;&#65533;% D&#65533;Ju &#65533;:&#65533;&#65533;w&#65533;T@&#65533;nl&#65533; &#65533;&#1578;Ql&#65533;&#65533;C&#633;&#65533;V&#65533;&#1843;.&#65533;IZ&#65533;&#65533;&#65533;&#65533;N&#65533;&#65533;&#65533;&#65533;+$&#65533;K&#65533;&#65533;&#65533;&#65533;>"-


Czemu to nie działa ? ;/
xxdrago
Da się.
  1. if ($_POST['przycisk'])
  2. {
  3. $plik = 'nazwapliku.pdf'; // Nazwa naszego pliku...
  4.  
  5. header('Content-type: application/pdf'); // Typ "aplikacji" czyli np. pdf czy zip
  6. header('Content-Disposition: attachment; filename="nazwa-pliku-po-zmianie.pdf"'); //
  7. readfile($plik); // A tak naprawie to plik inny, w naszym przypadku nazwapliku.pdf
  8. }
neotorrent
Takim sposobem też krzaczy ;/
  1. <?php
  2. if ($_POST['przycisk'])
  3. {
  4. $plik = 'pliki/DynamicPage.zip'; // Nazwa naszego pliku...
  5.  
  6. header('Content-type: application/zip'); // Typ "aplikacji" czyli np. pdf czy zip
  7. header('Content-Disposition: attachment; filename="nazwa-pliku-po-zmianie.zip"'); //
  8. readfile($plik); // A tak naprawie to plik inny, w naszym przypadku nazwapliku.pdf
  9. }
  10. else {
  11. echo '<form action="" method="post">';
  12. echo '<input type="hidden" name="przycisk" value="1">';
  13. echo '<input type="submit" value="Pobierz">';
  14. echo '</form>';
  15. }
  16. ?>
xxdrago
Nie kopiuj bezmyślnie smile.gif zerknij do tego:

http://www.faqs.org/rfcs/rfc2183.html

Mi osobiście smiga ten skrypt...

zobacz to :

Kod
filename="nazwa-pliku-po-zmianie.zip"


Musisz jeszcze dodać:
Kod
header("Content-Length: ".filesize($plik));

Wielkość pliku...

Taki mały kod który coś ci podpowie...
  1. $nazw_plik = $_GET["plik"];
  2. $plik = 'plikacze/'.$nazw_plik.'';
  3. header("Content-Type: applicaton/save");
  4. header('Content-Disposition: attachment; filename="'.$plik.'"');
  5. header("Content-Length: ".filesize($plik));
  6. readfile("$plik");
neotorrent
Przykład prosto z manuala: Link
  1. <?php
  2. $file = 'pliki/DynamicPage.zip';
  3. if ($_POST['przycisk'])
  4. {
  5. header('Content-Description: File Transfer');
  6. header('Content-Type: application/octet-stream');
  7. header('Content-Disposition: attachment; filename='.basename($file));
  8. header('Content-Transfer-Encoding: binary');
  9. header('Expires: 0');
  10. header('Cache-Control: must-revalidate');
  11. header('Pragma: public');
  12. header('Content-Length: ' . filesize($file));
  13. flush();
  14. readfile($file);
  15. }
  16. else {
  17. echo '<form action="" method="post">';
  18. echo '<input type="hidden" name="przycisk" value="1">';
  19. echo '<input type="submit" value="Pobierz">';
  20. echo '</form>';
  21. }
  22. ?>


I nadal krzaczy ;/
Można looknąć na Link


//EDIT

Ja myślę że zawala tu funkcja readfile która w zamyśle odczytuje pliki no i w sumie też to robi u mnie bo jak dobrze wczytać się w te krzaki to widać nazwy klików wewnątrz zipa
Dokopałem się do Link Być może coś jest z moimi ustawieniami PHP ?
by_ikar
Nie nadpisują się nagłówki, cały czas mam "text/html". readfile musi tam być, aczkolwiek tylko w przypadku jeżeli wiesz że pliki nie będą za duże. Odpal sobie firebuga, czy inną wtyczkę w ff, ewentualnie chrome/opera f12 i tam będziesz mógł obserwować swoje nagłówki.

Niedawno na planeta.php.pl pojawił się taki wpis: http://blog.kamilbrenk.pl/limit-predkosci-pobierania-plikow/
neotorrent
Haa mam ! haha.gif w sumie każdy z was dawał dobre rady smile.gif ale winowajcą był BOM. by_ikar gdy wypowiedziałeś to magiczne słowo: nagłówki to od razu zapaliła mi się żarówka smile.gif No i mamy sprawce smile.gif Dziękuje wszystkim problem rozwiązany. Rozdaje pomógł Tym co wrzucili coś wartościowego smile.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.