Ok, vì vậy chúng tôi có các yêu cầu sau cho đến nay
- Hãy để tải về người dùng trong/phiên của mình chỉ
- không sao chép & dán liên kết cho người khác
- Người dùng có để tải xuống từ trang web, ví dụ: không có hotlinking
- Tốc độ điều khiển
Hãy xem.Đây là không mã làm việc, nhưng nó phải làm việc cùng những dòng này:
<?php // download.php
session_start(); // start or resume a session
// always sanitize user input
$fileId = filter_input(INPUT_GET, 'fileId', FILTER_SANITIZE_NUMBER_INT);
$token = filter_input(INPUT_GET, 'token', FILTER_UNSAFE_RAW);
$referer = filter_input(INPUT_SERVER, 'HTTP_REFERER', FILTER_SANITIZE_URL);
$script = filter_input(INPUT_SERVER, 'SCRIPT_NAME', FILTER_SANITIZE_URL);
// mush session_id and fileId into an access token
$secret = 'i can haz salt?';
$expectedToken = md5($secret . session_id() . $fileId);
// check if request came from download.php and has the valid access token
if(($expectedToken === $token) && ($referer === $script)) {
$file = realpath('path/to/files/' . $fileId . '.zip');
if(is_readable($file)) {
session_destroy(); // optional
header(/* stuff */);
fpassthru($file);
exit;
}
}
// if no file was sent, send the page with the download link.
?>
<html ...
<?php printf('a href="/download.php?fileId=%s&token=%s',
$fileId, $expectedToken); ?>
...
</html>
Và đó là nó. Không yêu cầu cơ sở dữ liệu. Điều này cần bao gồm các yêu cầu 1-3. Bạn không thể kiểm soát tốc độ với PHP, nhưng nếu bạn không hủy phiên sau khi gửi một tệp, bạn có thể ghi một phiên truy cập vào phiên và giới hạn số lượng tệp mà người dùng sẽ được gửi trong phiên.
Tôi hết lòng đồng ý rằng điều này có thể được giải quyết một cách thanh lịch hơn nhiều so với bản hack dạng khỉ này, nhưng như là bằng chứng-khái niệm, nó phải là đủ.
Tệp sẽ được giữ trong bao lâu? – Ikke
Bạn có thể vui lòng cụ thể hơn về những gì bạn đang cố gắng đạt được không? Anti-Leeching DL Script là một chút mơ hồ. UseCase hoặc vấn đề mà kịch bản đang cố gắng giải quyết là gì? – Gordon
Xin chào lkke, Tôi chỉ muốn cho phép người dùng tải xuống trong phiên của anh ấy/cô ấy, chẳng hạn như anh ấy không thể sao chép và dán liên kết cho người khác Hi Gordon, Tôi muốn buộc người dùng tải xuống tệp từ trang web của tôi, kiểm soát tốc độ. Vì vậy, tôi nghĩ rằng để tạo một tập tin tạm thời trong một thư mục tạm thời trong tài liệu HTTP để người dùng có thể tải xuống và sau đó gỡ bỏ chúng (tự động) sau khi hết hạn – mrblue