Ciao a tutti,
causa forza maggiore il mio hosting mi ha vivamente consigliato l'installazione di questo script php che permetta di limitare il download proteggendo il sito da download di massa.
<?php
include "dload_cfg.php";
mysql_query("CREATE TABLE IF NOT EXISTS `downloaded` (
`ipadres` varchar(15) NOT NULL,
`last_access` datetime NOT NULL,
UNIQUE KEY `ipadres` (`ipadres`),
KEY `last_access` (`last_access`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
$path = addslashes($_SERVER['REQUEST_URI']);
$ip = addslashes($_SERVER['REMOTE_ADDR']);
$dl = false;
// set here time delay for each download
$delay = 10;
$sql = sprintf("SELECT UNIX_TIMESTAMP(last_access) last_time FROM downloaded WHERE ipadres = '%s' ORDER BY last_access DESC", $ip);
$res = mysql_query($sql);
if (mysql_num_rows($res) > 0) {
$last_xs = mysql_result($res, 0, 'last_time')+$delay;
if ($last_xs < time()) {
mysql_query(sprintf("REPLACE downloaded SET ipadres = '%s', last_access = NOW()", $ip));
$dl = true;
}
} else {
$sql = sprintf("REPLACE downloaded SET ipadres = '%s', last_access = NOW()", $ip);
mysql_query($sql);
$dl = true;
}
if ($dl) {
$fullPath = $_SERVER['DOCUMENT_ROOT'].$path;
if ($fd = fopen ($fullPath, "r")) {
$fname = basename($fullPath);
header('Content-type: application/octet-stream');
header('Content-Disposition: filename="'.$fname.'"');
header('Content-length: '.filesize($fullPath));
header('Cache-control: private');
while(!feof($fd)) {
$buffer = fread($fd, 2048);
echo $buffer;
}
fclose ($fd);
exit;
}
} else {
header('HTTP/1.0 503 Service Unavailable');
die('You have to wait 10 seconds from last download before you can download another file - Please press BACK in your browser');
}
?>
Chi per cortesia puo' aiutarmi a modificarlo in questo modo:
al momento lo script controlla la frequenza dei download per IP fissando come tempo minimo fra un download ed uno successivo un time delay di 10 sec.
La mia idea e' quella di implementare anche il controllo del numero dei download in un determinato arco di tempo (ad esempio 1 ora dato che la table del dbase viene droppata in automatico a mezzo di un cronojob del server)
Purtroppo non conosco il php se non a livello di base, idem MySQL
ma occorrerebbe aggiungere un nuovo field ( 'counter')
che viene incrementato ogni volta che un user esegue un download e quindi viene aggiornato anche l'orario nel record relativo al suo IP.
Con un IF si potrebbe controllare il valore di tale counter e se superiore a x fare terminare lo script con la frase "numero massimi di download raggiunto. attendere un'ora"
Grazie per il vostro aiuto.