Paralelny download, blokovanie, kontrola
Paralelny download, blokovanie, kontrola
Zdravim.
Chcem sa spytat na nasledovne:
- zo servera sa cez php skript stahuju subory
- ako zabezpecit aby ked niekto bude stahovat zo servera nejaky fajl - nedovolilo mu to paralelne stahovat iny, popripade ten isty viac-krat (download acceleratory) ?
Inak polozena otazka: Existuje nejaky sposob na strane PHP, ktorym zistim ci uz neprebieha z nejakeho pocitaca nejaky download?
Napr: rapidshare.com vo Free verzii nedovoluje paralelne stahovat subory. A server vie kedy subor stahujem a kedy naopak stahovanie prerusim... .
Vdaka za akukolvek radu, tips, info...
Chcem sa spytat na nasledovne:
- zo servera sa cez php skript stahuju subory
- ako zabezpecit aby ked niekto bude stahovat zo servera nejaky fajl - nedovolilo mu to paralelne stahovat iny, popripade ten isty viac-krat (download acceleratory) ?
Inak polozena otazka: Existuje nejaky sposob na strane PHP, ktorym zistim ci uz neprebieha z nejakeho pocitaca nejaky download?
Napr: rapidshare.com vo Free verzii nedovoluje paralelne stahovat subory. A server vie kedy subor stahujem a kedy naopak stahovanie prerusim... .
Vdaka za akukolvek radu, tips, info...
mna napada jedine to ze si budes zaznamenavat do databazy ktora IP co stahuje. a neskor si uz len pri stahovani budes overovat ci dana IP adresa nieco nestahuje. pripadne si pomoz s Cookies (aj ked neefektivne pokial ich niekto maze) a pri kliknuti na download vytvori cookie subor ktory bude obsahovat nejake udaje a podla nich sa bude tiez overovat ci uz nieco stiahol/stahuje dana IP
Ako?neppo napísal:a neskor si uz len pri stahovani budes overovat ci dana IP adresa nieco nestahuje
Ako viem zistit ci dana IP vobec este nieco stahuje?
Samozrejme, mozem nastavit obmedzenu zivotnost zaznamu v DB o stahovani. Ale co ak clovek este nieco BUDE stahovat a tymto mu prakticky povolim stahovanie dalsie?
www.stranka.sk/download.php?id=12[code]<?
...
$IP = getenv("REMOTE_ADDR");
$go = FALSE;
$db_connect = @mysql_connect($db_host, $db_user, $db_pass);
$db_select = @mysql_select_db($db_name);
//skontroluje ci dana IP nestahuje
$check_ip = mysql_query("select IP from download_restrict where IP = '".$IP."');
if (mysql_num_rows($check_ip) == 0) {
mysql_query("insert into download_restrict (IP) values ('".$IP."')");
$go = TRUE;
}
if ($go)
$dl = mysql_query("select file_name from download where id = '".$_GET['id']."');
$file = mysql_fetch_array($dl);
header("Location: ".$file['file_name']);
}
...
?>
[/code]za chyby sa ospravedlnujem, pisal som to z hlavy
...
$IP = getenv("REMOTE_ADDR");
$go = FALSE;
$db_connect = @mysql_connect($db_host, $db_user, $db_pass);
$db_select = @mysql_select_db($db_name);
//skontroluje ci dana IP nestahuje
$check_ip = mysql_query("select IP from download_restrict where IP = '".$IP."');
if (mysql_num_rows($check_ip) == 0) {
mysql_query("insert into download_restrict (IP) values ('".$IP."')");
$go = TRUE;
}
if ($go)
$dl = mysql_query("select file_name from download where id = '".$_GET['id']."');
$file = mysql_fetch_array($dl);
header("Location: ".$file['file_name']);
}
...
?>
[/code]za chyby sa ospravedlnujem, pisal som to z hlavy
Neppo: ak som spravne pochopil tvoj kod, tak akonahle raz nieco stiahne, uz nebude moct nikdy nic stiahnut. V tvojom kode totiz nikde data z tabulky download_restrict nemazes, co by sa malo, ked sa subor dostahuje, a to je zrejme to, co Shakal chce. 
Shakal: ja by som to riesil prostym obmedzenim "1 subor za trebars 120 minut", to uz spravis jednoducho.
Shakal: ja by som to riesil prostym obmedzenim "1 subor za trebars 120 minut", to uz spravis jednoducho.
[quote=""J""]Neppo: ak som spravne pochopil tvoj kod, tak akonahle raz nieco stiahne, uz nebude moct nikdy nic stiahnut. V tvojom kode totiz nikde data z tabulky download_restrict nemazes, co by sa malo, ked sa subor dostahuje, a to je zrejme to, co Shakal chce. 
Shakal: ja by som to riesil prostym obmedzenim "1 subor za trebars 120 minut", to uz spravis jednoducho.[/quote]staci ked si precitas jeho post co pisal nad tym kodom. on chcel vediet ze ako zisti ci niekto nieco stahuje a ze si to potom osetri
Shakal: ja by som to riesil prostym obmedzenim "1 subor za trebars 120 minut", to uz spravis jednoducho.[/quote]staci ked si precitas jeho post co pisal nad tym kodom. on chcel vediet ze ako zisti ci niekto nieco stahuje a ze si to potom osetri
Jasne toto chapem ale myslel som teraz tu kontrolu.
Predstav si, ze:
- zacnem tahat nejaky fajl za pomoci tohto skriptu
- do DB sa zanesie zaznam s mojou IP
- subor o velkosti cca 500MB ale nedostahujem. Prerusim stahovanie niekde za 5 MBajtom.
Otazka z toho plynuca:
Ako ten tvoj PHP skript (alebo aj iny) zisti, ze uz nic nestahujem? Aj ked zaznam v DB bude tvrdit nieco ine?
//autoeditácia príspevku ( 02 Jan 2009, 14:53 )
Uz som mozno prisiel na ciastocne riesenie.
Ale stale mi vrta v hlave ako zabranit viac-pocetnemu stahovaniu jedneho fajlu (zakazat web-download-akceleratory).
Uz som vyriesil aj to
Predstav si, ze:
- zacnem tahat nejaky fajl za pomoci tohto skriptu
- do DB sa zanesie zaznam s mojou IP
- subor o velkosti cca 500MB ale nedostahujem. Prerusim stahovanie niekde za 5 MBajtom.
Otazka z toho plynuca:
Ako ten tvoj PHP skript (alebo aj iny) zisti, ze uz nic nestahujem? Aj ked zaznam v DB bude tvrdit nieco ine?
//autoeditácia príspevku ( 02 Jan 2009, 14:53 )
Uz som mozno prisiel na ciastocne riesenie.
Ale stale mi vrta v hlave ako zabranit viac-pocetnemu stahovaniu jedneho fajlu (zakazat web-download-akceleratory).
Uz som vyriesil aj to
-
programator
Medium Star
- Príspevky: 475
- Registrovaný: 18 apr 2005, 8:31
- Bydlisko: Papua new Guinea
- Kontaktovať používateľa:
Myslim, ze riesenie by bolo pouzitim .htaccess suborov. Pricom ak sa bude pozadovat nejaky subor, pozries do DB, ak neexistuje dana IP, zapises ju. Horsie je to, ak uzivatel stahovanie prerusi. Myslim ze jedina moznost by bolo pernamentne napr. kazdych 30s kontrolovat, ci dana osoba urceny subor stahuje (myslim ze takto sa riesi aj status na forach, pokial uzivatel nebol aktivny po urcitu dobu, oznaci sa ako "odhlaseny").
Pomocou .htaccess suborov jednoducho dokazes poziadavku o nejaky subor presmerovat na php script, ktory vsetky tieto akcie obsluzi a vrati pozadovane data.
Pomocou .htaccess suborov jednoducho dokazes poziadavku o nejaky subor presmerovat na php script, ktory vsetky tieto akcie obsluzi a vrati pozadovane data.
-
mspeedo
Light Professional
- Príspevky: 943
- Registrovaný: 15 feb 2005, 14:10
- Bydlisko: Nitra
- Kontaktovať používateľa:
Tu to mas:
Kód: Vybrať všetko
<?php
#####################################
# download.php
#
# This File Does Not Need To Be Edited!
#####################################
session_start();
require_once "config.php";
require_once "functions.php";
$id=$_GET['id'];
if (ini_get('zlib.output_compression'))
{
ini_set('zlib.output_compression', 'Off');
}
if (!$id)
{
echo "No download file specified.";
exit;
}
$ip=getenv("REMOTE_ADDR");
$browser=getenv("HTTP_USER_AGENT");
$time=date("Y-m-d H:i:s");
mysql_connect("$dbhost", "$dbuser", "$dbpasswd") or die("Unable to connect to database.");
mysql_select_db("$dbname") or die("Unable to select database.");
$bots=mysql_query("SELECT d2 FROM cns_data WHERE type= '3'");
while ($r=mysql_fetch_array($bots))
{
if (stristr($browser,$r['d2']))
{
$bot = true;
}
}
$sql=mysql_query("SELECT addy FROM $tbl_files WHERE id = $id");
$r=mysql_fetch_array($sql);
$filename=$r['addy'];
$sql2=mysql_query("SELECT time FROM $tbl_stats WHERE id = $id AND ip = '$ip'");
$todaytime=strtotime($time);
while ($r=mysql_fetch_array($sql2))
{
$prevtime= strtotime($r["time"]);
$timediff=$todaytime - $prevtime;
if ($timediff<300)
$addtostats=1;
}
if ($bot == false && empty($addtostats))
{
$sql
=mysql_query(
"INSERT INTO $tbl_stats VALUES ('', '$id', '', '', '$ip', '$browser', '$time', '')");
if ($sql)
{
$update=mysql_query("UPDATE $tbl_files SET cnt = cnt+1 WHERE id = $id");
if ($update)
{
$file_extension=strtolower(substr(strrchr($filename, "."), 1));
switch ($file_extension)
{
case "pdf":
$ctype="application/pdf";
break;
case "exe":
$ctype="application/octet-stream";
break;
case "zip":
$ctype="application/zip";
break;
case "doc":
$ctype="application/msword";
break;
case "xls":
$ctype="application/vnd.ms-excel";
break;
case "ppt":
$ctype="application/vnd.ms-powerpoint";
break;
case "gif":
$ctype="image/gif";
break;
case "png":
$ctype="image/png";
break;
case "jpeg":
case "jpg":
$ctype="image/jpg";
break;
default:
$ctype="application/force-download";
}
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"" . basename($filename) . "\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($filename));
readfile("$filename");
exit();
}
else
{
echo mysql_error();
}
}
else
{
echo mysql_error();
}
}
else
{
$file_extension=strtolower(substr(strrchr($filename, "."), 1));
switch ($file_extension)
{
case "pdf":
$ctype="application/pdf";
break;
case "exe":
$ctype="application/octet-stream";
break;
case "zip":
$ctype="application/zip";
break;
case "doc":
$ctype="application/msword";
break;
case "xls":
$ctype="application/vnd.ms-excel";
break;
case "ppt":
$ctype="application/vnd.ms-powerpoint";
break;
case "gif":
$ctype="image/gif";
break;
case "png":
$ctype="image/png";
break;
case "jpeg":
case "jpg":
$ctype="image/jpg";
break;
default:
$ctype="application/force-download";
}
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"" . basename($filename) . "\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($filename));
readfile("$filename");
exit();
}
?>