Stahování souborů až po přihlášení

Petti

Re:Stahování souborů až po přihlášení
« Odpověď #15 kdy: 02. 11. 2012, 12:32:41 »
Děkuji za rady !
Už jsem to vyřešil.

Složka pro download je přejmenovaná na 20 náhodných znaků. V této složce je pak strčený "průzkumník.php", který má "./" jako kořenový adresář. Takže by nemělo být možné opustit tento root kořen.

Po přihlášení pomocí php a mysql se nahraje průzkumník a soubory se vesele zobrazují :o)
Běžné procházení adresáře je zakázáno, takže i kdyby se do složky někdo dostal bez přihlášení, stejně se nic nezobrazí.

Pokud, ale uživatel zkopíruje link na soubor a pošle ho tzn. "www.stranka.cz/sde593w5s7g7r8e8e49q/adr/archiv.rar"
tak i bez přihlášení lze soubor stáhnout. Ale to už mi tak nevadí, jde mi jenom o to, aby se cizí návštěvníci nedostali lehce k
souborům na serveru.

Tohle sice není "very secure", ale svým účelům to postačí.


Kit

Re:Stahování souborů až po přihlášení
« Odpověď #16 kdy: 02. 11. 2012, 13:11:16 »
Když ten skript uděláš stylem proxy, tak se nikdo skutečnou cestu k souboru nedozví.

alfi

  • ****
  • 339
    • Zobrazit profil
    • E-mail
Re:Stahování souborů až po přihlášení
« Odpověď #17 kdy: 16. 11. 2012, 13:18:17 »
Myslím, že postačí před jméno souboru vložit "./" (aby tam nikdo nestrčil "/" nebo nedejbože "http://") a nejpřijmout žádný text obsahující dvě tečky, nebo ještě lépe zakázat i lomítka. Tím se tam nedostanou žádné cesty.
já bych do toho nešel :-)
proč by se soubor nemohl jmenovat aa..txt? (divný název, ale může se stát)
a ona tečka je taky %2e, %2E, místo .. taky stačí na začátek přidat /etc/
možností je spousta. a na to, že - ani v budoucnu a/nebo v některém dalším kroku zpracování - nepůjde nějaký klikyhák přepsat na .. bych fakt nespoléhal. php prostě mimo svůj "root" nemá co pohledávat :)

Re:Stahování souborů až po přihlášení
« Odpověď #18 kdy: 16. 11. 2012, 14:45:20 »
Kód: [Vybrat]
<?php

//skontrolujeme ci je uzivatel prihlaseny
if(!$session->is_authenticated){
  
// ak nie posle ho niekam
  
header('HTTP/1.0 401 Unauthorized');
  
// a ukonci sa
  
die();
}else{
  
// ak je tak zistime mime typ suboru
  
$mime=finfo::file($filepath,FILEINFO_MIME);
  
// a posleme ho na vystup
  
header("Content-type: $mime");
  
header("Content-Disposition: filename=\"$filename\"");
  
header("Content-length: $filesize");
  
header("Cache-control: private");
  
readfile($filepath);
}

a do adresara kde mas ulozene subory prihodis .htaccess so obsahom:
Kód: [Vybrat]
deny from all

v tom kode nie su osetrene vynimky ani sposob ziskavia udajov o stahovanom subore - to si zriesis sam. Taktiez ak to budes testovat na widlach tak tam asi nebudes mat extension fileinfo - na linuxe je zvedsa standartne v distre.

A ak pouzijes cudzi kod tak nezabudni uviest aj autora  ;D