Продаю услугу просмотра подписки. После того, как люди заплатили, они получают уникальный URL по электронной почте. Срок действия ссылки истекает через определенное время, но я бы хотел, чтобы только первые три IP-адреса использовали ссылку до истечения срока действия, чтобы остановить пиратство. Я делаю это так, чтобы избежать запуска еще одной базы данных, содержащей тысячи логинов. Я предполагаю, что могу записать в каталог и иметь имя файла в качестве суффикса ссылки (zFZpj4b2AkEFz%2B3O
в этом случае) с указанием до трех IP-адресов в файле.
Пока все работает хорошо, за исключением подсчета IP-адресов и уникальной ссылки, по которой электронная почта выглядит так:
http://www.blah.com/download.php?file=zFZpj4b2AkEFz%2B3O
Файл download.php выглядит так:
<?
$time = time();
include('settings.php');
class RC4Crypt {
/**
* Encrypt the data.
* @param string private key.
* @param string data to be encrypted.
* @return string encrypted string.
*/
function encrypt ($pwd, $data)
{
$key[] = '';
$box[] = '';
$pwd_length = strlen($pwd);
$data_length = strlen($data);
for ($i = 0; $i < 256; $i++)
{
$key[$i] = ord($pwd[$i % $pwd_length]);
$box[$i] = $i;
}
for ($j = $i = 0; $i < 256; $i++)
{
$j = ($j + $box[$i] + $key[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
$cipher = '';
for ($a = $j = $i = 0; $i < $data_length; $i++)
{
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$k = $box[(($box[$a] + $box[$j]) % 256)];
$cipher .= chr(ord($data[$i]) ^ $k);
}
return ($cipher);
}
/**
* Decrypt the data.
* @param string private key.
* @param string cipher text (encrypted text).
* @return string plain text.
*/
function decrypt ($pwd, $data)
{
return RC4Crypt::encrypt($pwd, ($data));
}
}
if(!isset($_GET['file']) || empty($_GET['file'])) {
echo 'Invalid Request';
return;
}
$data = $_GET['file'];
$id_time = RC4Crypt::decrypt($secret,base64_decode(rawurldecode($data)));
list($product_id,$timestamp) = explode('|',$id_time);
if(!isset($products[$product_id])) {
echo 'Invalid Request';
return;
}
if ($timestamp < $time - ($download_life * 60 )) {
echo 'Link Expired';
return;
}
if(isset($products[$product_id])) {
print ("<html><head><meta http-equiv=Refresh content=\"0;URL=http://www.blah.com/view/\"></head><body></html>");
return;
}
?>
Может ли какая-нибудь добрая душа сжалиться над тем, кто слишком долго смотрел на это, пожалуйста? :) Большое спасибо.
- РЕДАКТИРОВАТЬ -
Мысль: забыть 3 IP-адреса, как насчет хранения cookie-файла на стороне сервера при первом нажатии ссылки и запрета доступа, если он существует?