我正在銷售訂閱查看服務。一旦用戶付款,他們就可以通過電子郵件向他們發送唯一的URL。該鏈接設置爲在某段時間後過期,但我想只允許前三個IP地址在鏈接到期之前使用該鏈接來停止盜版。我這樣做是爲了避免另一個運行數千個登錄的數據庫。我假設我可以寫入一個目錄,並有一個文件名作爲鏈接的後綴(在這種情況下爲zFZpj4b2AkEFz%2B3O
),最多可以在文件中列出三個IP。高級PHP:只允許前三個IP點擊一個唯一的URL
這一切運作良好,到目前爲止禁止該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,如果它存在,拒絕訪問什麼?
你需要一些人的驗證,像搜索引擎工具欄和病毒程序會自動跟隨鏈接,並可能不必要地算作一個印象。 – Dunhamzzz
謝謝,但它是一個唯一的電子郵件只有一個到期。 –