Autor Zpráva
AriasCZC
Profil *
Dobrý den,
měl bych dotaz existuje i jiné řešení než je písmený prefix, zakládám uploadovací server a potřebuju zabezpečit to tak aby lidi se nemohli dostat k odkazu na soubor proto mi jeden z lidí na fóru poradil na tady ten prefix ale jiní lidi říkají že je to blbost co vy na to ? mohli by jste prosím napsat konktétní řešení ? moc prosím o odpoved. Toto je kód s kterým jsem pracoval až doted.


index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">;
    <title>DOWNLOAD</title>
  </head>
  <body>
  <form action="index.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fupload">
    <input type="submit" value="Nahrát">
  </form>
  <?php
  define("PREFIX", "awdefr_");  //7pismeny prefix
  function pekne_url($nadpisek) {
    $url = $nadpisek;
    $url = preg_replace('~[^\\pL0-9_]+~u', '-', $url);
    $url = trim($url, "-");
    $url = iconv("utf-8", "us-ascii//TRANSLIT", $url);
    $url = strtolower($url);
    $url = preg_replace('~[^-a-z0-9_]+~', '', $url);
    return $url;
  }
  function utf2ascii($text)   
    { 
        $return = Str_Replace( 
                        Array("á","č","ď","é","ě","í","ľ","ň","ó","ř","š","ť","ú","ů","ý ","ž","Á","Č","Ď","É","Ě","Í","Ľ","Ň","Ó","Ř","Š","Ť","Ú","Ů","Ý","Ž") ,

                        Array("a","c","d","e","e","i","l","n","o","r","s","t","u","u","y ","z","A","C","D","E","E","I","L","N","O","R","S","T","U","U","Y","Z") ,                        
                        $text); 
        $return = StrToLower($return); //velká písmena nahradí malými. 
        return $return;  
    }
  if (isset($_FILES['fupload']))
  {
    $slozka = "upload"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)
    $nazev = PREFIX.date("Ymd").date("Hi").pekne_url(utf2ascii($_FILES['fupload']['name'])).".".strtolower(pathinfo($_FILES['fupload']['name'], PATHINFO_EXTENSION)); 
    $cil = $slozka . "/" .$nazev; // Toto je promìnná $cil, která obsahuje adresáø, kde se má soubor uploadovat a taky název souboru.
    $nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí doèastné umístìní souboru
    $copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z doèastného umístìní do cílového souboru a složky
      or die ("Přenesený soubor nelze zkopírovat ".PREFIX.$_FILES['fupload']['tmp_name'].date("Ymd").date("Hi")); // A pokud se nepovede, tak vypíše tuto hlášku
    chmod ($cil, 0644); // Ještì na soubor vyhodíme funkci chmod, která zmìní jeho práva na maximum, pokud by soubor psal chybu zmìòte 0644 na 0777
    if($copy == true){ // Pokud se kopírování provede úspìšnì
      echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.<br /> Stáhnout: <a href='download.php?soubor=".substr($nazev, 7)."' title='Stáhnout'>".substr($nazev, 19)."</a><br />";
    }else{
      echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
    }
  }
?>
 


a download.php

<?php
define("PREFIX", "awdefr_");  
if(isset($_GET["stahni"])){
if(file_exists("upload/".PREFIX.$_GET["stahni"])){
header("Content-Disposition: attachment; filename=".substr($_GET["stahni"], 12));   
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
header("Content-Length: " . filesize("upload/".PREFIX.$_GET["stahni"]));
readfile("upload/".PREFIX.$_GET["stahni"]);
}
else {echo "Soubor nenalezen.";}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">;
  <?php 
  if(isset($_GET["soubor"])){
  echo '<meta http-equiv="refresh" content="3;URL=?stahni='.$_GET["soubor"].'">';
  }
  ?>
  <title>DOWNLOAD</title>
  </head>
  <body>
  <?php 
  if(isset($_GET["soubor"])){
  echo "zobrazení reklamy";
  }
  ?>
  </body>
</html>
Miloš
Profil
Jestli se má k souborům dostat jen ten, kdo je tam uploadoval, pak mi celá tahle sranda připadá jako drbání se pravou nohou za levým uchem – přitom řešení je, hádám, jednoduché – adresa souboru by byla volána přes PHP (lhostejno zda přes ?blbl=blbl nebo pomocí mode rewrite) a bez autorizace by soubor nešel stáhnout.
A komu patří který soubor, to by bylo uloženo nejlépe v databázi.
WertriK
Profil
Miloš:
potřebuju zabezpečit to tak aby lidi se nemohli dostat k odkazu na soubor

AriasCZC:
Když si zapamatuji odkaz download.php?stahni=NejakySoubor tak se dostanu rovnou k downloadu toho souboru a vyhnu se tak reklamě - pokud se nepletu. Předpokládám, že to nechceš.
Já bych to s dovolením řešil jinak. Když se mrkneš na ty upload servery, tak soubor je dostupný na nějaké url - kde je reklama - potom se vygeneruje jedinečná url pro stáhnutí souboru.
Zapojil bych do toho i databázi, kde bys mohl snadněji spravovat údaje o souborech - poslední stáhnutí, datum uploadu, počet stáhnutí atd.
File systém by mohl být jako nějaká "tajná složka" kam se budou soubory nahrávat. Těch složek bych možná použil i více a v každé měl třeba 1000 souborů.

Každému uživateli by skript vygeneroval jedinečný kód k souboru, tento kód by se uložil s nějakým id do DB, kde by bylo ještě datum vložení (ID, KOD, DATUM). To id bych uložil návštěvníkovi do cookie a při každé návštěvě kontroloval, zda to id tam nemá - pokud ano -> načtu data z DB a zkontroluju datum - starší 20min je neplatné a reklamu si musí vytrpět znovu.
Pokud cookie má a datum menší než 20 min, přesměruji ho na další stránku, kde v url by byl ten kód
http://neco.cz/kod/soubor . Na tu samou stránku by vedl odkaz po vytrpění reklamy.
Na ošetření použiješ mod_rewrite, na této stránce bych porovnal id v cookie a id na řádku s kódem z url - pokud je to ok - stáhnu soubor pokud ne - přesměruji zpět. Až nabídnu soubor na stáhnutí vymažu záznam z DB, smažu cookie a uložím si statistické údaje.

A při každé návštěvě můžeš třeba záznamy z DB s kódama starší 20min rovnou mazat.
Miloš
Profil
WertriK:
Když neproběhne autorizace, odkaz nepovede na soubor. V čem je problém? Nebo uvažuji špatně?
WertriK
Profil
Miloš:
Nevím, možná tě špatně chápu, ale řekl bych, že AriasCZC chce, aby byl soubor dostupný všem - ale s podmínkou zobrazení reklamy. A nebylo možné tu reklamu obejít. Na upload serverech, ti po vytrpění reklamy vyskočí většinou link typu http://něco.cz/gfjgfkjg2dgdg67853/soubor/download a na této stránce si můžeš tento soubor uložil. Ale jen jednou nebo do nějakého času, potom musíš znovu čekat na reklamě.
Proto, kdyby se jednou uživateli ukázal link, který by sice přímo neodkazoval na soubor, ale bylo by možno ho využít několikrát, bylo by to špatně.

Jestli se má k souborům dostat jen ten, kdo je tam uploadoval,
Ne mají se tam dostat všichni, ale až po reklamě.
AriasCZC
Profil *
Myslel jsem to tak jak to má uživatel Wertrik soubor je dostupný všem pod podmínkou reklamy. Jenomže já sem vždy pracoval poute s skoro dokenčenýma kódama a nikdy jsem nepsal si vlastní kód protože na to ještě nemam. Tak jsem vás chtěl poprosit jestli by jste někdo byl tak hodný a zkusil mi nějaký takový kód napsat. Pokuď se server rozjede jako že na to prostředky máme nabízím uživatele doživotí prémium a klidně ho napíšu jako autora webu :D. A myslíte že by do toho kódu k uploadu by se dalo dát upload meter jako je tento (první od zhora)?
WertriK
Profil
AriasCZC:
Kód by nebyl nijak obzvlášť těžký, klidně bych ti to napsal. Ale já jsem teď docela zaneprázdněn, takže bych na to neměl čas - nevím jak to pospíchá.
Ten uploader (progress bar) bych spíš udělal ve flashy.
Joker0CZ
Profil *
no že by to nějak spěchalo chceme to mýt do týdne protože do této doby už nebude platit nabídka na neomezenou kapacitu akce končí 21.8. Kdyby se to nějak stihhlo bylo by to super !! Somozřejmě zadarmo nic nechci nabízím nějaké ty procenta z výdělku reklamy podle toho kolik nám to vydělá ale jestli se to dostane na nějakou úroveň tak by to mohl být dost slušnej výdělek ale tohle by vám mohlo hodně pomoct uploadify.com já sem to zkoušel tady a celkem to fungovalo až na ty soubory že se tam nenahrávali :D ale je tam i ten upload progress meter. klidně jestli by jste mi dal icq nebo skype by jsme se mohli domluvit

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0