Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dostęp do pliku - kod dostępu
Forum PHP.pl > Forum > Przedszkole
majer12345
Mam na serwerze pewne pliki. Chciałbym aby dostęp do nich był możliwy tylko po zweryfikowaniu kodu dostępu. Wykluczona musi być możliwość pobrania plików po wpisaniu bezpośredniego linka do pliku. Tylko i wyłącznie pobrać można jeśli zweryfikowany zostanie kod dostępu. HELP - kto pomoże?

Narazie zrobiłem weryfikację kodu dostępu taką jak poniżej.
1 - w formularzu wpisywany jest kod dostępu.
2- Kod porównywany jest z listą kodów
3- jeśli kod zostanie znaleziony to skrypt php includuje odpowiednią stronę z zawartością.

i teraz tak na tej stronie z zawartością mają być wyświetlone linki do .zip'ów
Trzeba to zabezpieczyć tak aby po wpisaniu bezpośredniego linku np. www.example.com/files/123.zip nie dało się pobrać tego pliku.
Powinien być mechanizm sprawdzania kodu.
Pobieranie zip'a powinno być możliwe tylko jeśli kod dostępu jest aktywny.
Jakieś pomysły?

może zamiast bezpośrednich linków dawać coś takiego
http://www.example.com/pobierz/123

i gdzieś w pliku tekstowym przypisać 123 ==> przykladowy.zip

questionmark.gif

ALBO

example.com/pobierz.php?plik=123&kod=KOD_DOSTEPU

i w pobierz.php sprawdzamy kod..

mch.frnc
Masz już jakiś swój kod? To pokaż, coś zaradzimy, z czym masz problem.
pzdr.
dublinka
No to ja nie kumam z czym problem bo wszystko masz juz zrobione praktycznie

Trzeba to zabezpieczyć tak aby po wpisaniu bezpośredniego linku np. www.example.com/files/123.zip nie dało się pobrać tego pliku.

'Nie bedzie skoro np wyslesz sesje z kodem'

Powinien być mechanizm sprawdzania kodu.

'to tez chyba nie takie trudne.Sprawdzisz sesje z tym co slesz w URL - mozesz poslac w URL kod i wtedy sprawdzic to co masz w URL i w sesji jesli ok to pobieranie jesli nie to wypad'

Pobieranie zip'a powinno być możliwe tylko jeśli kod dostępu jest aktywny.

'a tego to nie kumam.Jak aktywny questionmark.gif? to co wygasa questionmark.gif Jesli wygasa to tez nie jest to sztuka bo jesli wygasnie a w cache bedzie to i tak nie pobierze bo bedzie sprawdzone czy jest takie samo a nie bedzie.

majer12345
MAM TAKI KOD

  1.  
  2. <?php
  3.  
  4. //PLIK Z KODEM
  5. $filename="./xxTAJNExx/xxTAJNExx.TXT";
  6.  
  7. //ZMIENNA Z KODEM, KTÓRY DOSTAJEMY Z FORM'a
  8. $kod = $_GET["x"];
  9.  
  10.  
  11. // split the string up into an array
  12. $file_array = array();
  13.  
  14. $file = fopen($filename, 'rt');
  15. if($file)
  16. {
  17. while(!feof($file))
  18. {
  19. $val = fgets($file);
  20. if(is_string($val))
  21. array_push($file_array, $val);
  22. }
  23. fclose($file);
  24. }
  25.  
  26. //sprawdź kod
  27. $znalazlem_kod=0;
  28.  
  29. for($i = 0; $i < count($file_array); $i++)
  30. {
  31.  
  32.  
  33. if(strstr($file_array[$i], $kod)) //jeśli znajdziesz kod w pliku
  34. {
  35.  
  36. if($file_array[$i] == $kod . "\n") //jeśli znaleziony kod nie ma jeszcze timestamp na końcu
  37. {
  38. $znalazlem_kod = 1;
  39. //jeśli znajdziesz kod to dopisz do niego |timestamp();
  40. // echo $file_array[$i];
  41. $timestamp = time();
  42. $file_array[$i] = $kod . "|" . $timestamp . "\n";
  43. // echo $file_array[$i];
  44. }
  45.  
  46. if(strstr($file_array[$i], $kod . "|")) //jeśli znaleziony kod ma już na końcu timestamp
  47. {
  48. $znalazlem_kod=1;
  49.  
  50. $line = $file_array[$i];
  51. $kod_timestamp = explode("|", $line); //rozbij całą linię z pliku na kod i timestamp, znak rozdzielając to |
  52. // echo $kod_timestamp[0] ."<br>".$kod_timestamp[1];
  53.  
  54. if($kod_timestamp[1] < time() - (24 * 60 * 60)) //jeśli kod jest starszy niż 24 godziny
  55. {
  56. echo "kod za stary";
  57. }
  58. else //jeśli kod jest młodszy niż 24 godziny
  59. {
  60. // echo "kod ok";
  61. include("index2");
  62. }
  63. }
  64. }
  65. }
  66.  
  67. //jeśli sprawdziłeś wszystkie linie w pliku i nie znalazłeś kodu to zwróć error
  68. if($znalazlem_kod==0)
  69. {
  70. echo "brak kodu";
  71. }
  72.  
  73.  
  74.  
  75. // zapisanie kodu z timestamp'em do pliku.
  76. $file_write = fopen($filename, 'wt');
  77. if($file_write)
  78. {
  79. fwrite($file_write, implode("", $file_array));
  80. fclose($file_write);
  81. }
  82.  
  83.  
  84.  
  85. ?>
  86.  


i jeśli kod jest ok to includuje nam "index2" w którym to jest lista linków do .zip'ów
problem w tym że jeśli ten użytkownik, który się zautoryzował kodem skopiuje link do zipa i prześle go do swojego kumpla, to ten bez podania kodu będzie mógł pobrać zip'a, a właśnie przed tym chcę się zabezpieczyć.
dublinka
  1. <?
  2.  
  3. // załóżmy że każdy plik ma jakieś id, przekazywane
  4. // w zmiennej $id
  5. // <a HREF="download.php?id=1">plik nr 1</A>
  6.  
  7. if(!eregi("http://www.paczek-tlustyczwartek.pl/testy/maskowanie_url/", $_SERVER['HTTP_REFERER']))
  8. die("Bu! Nieładnie kraść!");
  9.  
  10. switch($_GET['id']){
  11. case 1:
  12. $name = '1.zip';
  13. break;
  14. case 2:
  15. $name = 'tajny_plik2.zip';
  16. break;
  17. default:
  18. die("Zły numer");
  19. }
  20.  
  21. header("Content-type: application/octet-stream");
  22. header("Content-Disposition: attachment; filename=$name");
  23. readfile("tajny_katalog/$name");
  24. ?>


Tylko ze trzebaby bylo najpierw przejsc na te strone z linku bo nie wiem jak sie bedzie zachowywac jesli includniesz.REFERER sprawdzi z jakiego adresu bylo wejscie.
Procz tego mozesz zarejestrowac sesje jakies i tez w tym pliku ja sprawdzic
nospor
Cytat
.REFERER sprawdzi z jakiego adresu bylo wejscie.
Na referer nie można liczyć. Raz, że niektóre firewalle go blokują, przez co uczciwy klient może zostać uznany za nieuczciwego, a dwa, że referer pochodzi od klienta i moża go łatwo modyfikować.
majer12345
Cytat(dublinka @ 22.09.2011, 11:56:55 ) *
  1. <?
  2.  
  3. // załóżmy że każdy plik ma jakieś id, przekazywane
  4. // w zmiennej $id
  5. // <a HREF="download.php?id=1">plik nr 1</A>
  6.  
  7. if(!eregi("http://www.paczek-tlustyczwartek.pl/testy/maskowanie_url/", $_SERVER['HTTP_REFERER']))
  8. die("Bu! Nieładnie kraść!");
  9.  
  10. switch($_GET['id']){
  11. case 1:
  12. $name = '1.zip';
  13. break;
  14. case 2:
  15. $name = 'tajny_plik2.zip';
  16. break;
  17. default:
  18. die("Zły numer");
  19. }
  20.  
  21. header("Content-type: application/octet-stream");
  22. header("Content-Disposition: attachment; filename=$name");
  23. readfile("tajny_katalog/$name");
  24. ?>


Tylko ze trzebaby bylo najpierw przejsc na te strone z linku bo nie wiem jak sie bedzie zachowywac jesli includniesz.REFERER sprawdzi z jakiego adresu bylo wejscie.
Procz tego mozesz zarejestrowac sesje jakies i tez w tym pliku ja sprawdzic



Dzięki wielkie - takie zabezpieczenie mi wystarczy.
Jak uruchomię serwis to przyślę Ci kod dostępu smile.gif

ok URUCHOMIŁEM
TYLKO DLA DOROSŁYCH

[zmoderowane]
nospor
skoro problem jest już rozwiązany i skoro strona zawiera treści erotyczne i skoro ciągle to odświeżasz, twój poprzedni post zostaje zmoderowany a temat zamknięty
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.