Блокировка доступа к файлам PDF по прямой ссылке - PullRequest
0 голосов
/ 27 августа 2018

Привет, хочу разместить 1 файл PDF для каждого пользователя на моем сайте. Этот файл имеет идентификатор пользователя .pdf и генерируется phc. Это около 1500 PDF, и они открыты для каждого пользователя по его ID. Проблема в том, что если другой пользователь, сменивший ссылку на другое имя, может увидеть другие PDF-файлы, ему просто необходим правильный идентификационный номер.

Как вы ограничиваете доступ?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Проблема в том, что вы идентифицируете ресурсы таким образом, что можете перечислять их, изменяя URL-адрес. Даже крупные компании попали под эти «взломы», поэтому хорошо, что вы знаете об этой проблеме и хотите ее избежать.

Есть два способа справиться с этим.

  1. Убедитесь, что у каждого ресурса есть случайный идентификатор , то есть он никак не связан с идентификатором пользователя. Для этого должно быть достаточно UUID, случайной строки из 12 букв или более или случайного числа из 20 цифр. Они должны быть сгенерированы заранее и сохранены в базе данных, иначе вы потеряете учет, кому принадлежит какой файл.
  2. Используйте детерминированный хеш для генерации идентификатора, такого как SHA2-256, на основе идентификатора пользователя плюс некоторый другой секретный фактор, такой как секретный ключ, чтобы их нельзя было угадать. 6B86B273FF3...B7875B4B может показаться случайным, но это всего лишь хэш SHA2-256, равный 1, и злоумышленники узнают об этом. Преимущество детерминированного хэша в том, что вы можете вычислить это по своему желанию, вам не нужно нигде его сохранять. Вам, вероятно, не нужен весь хеш, 50-70% длины, безусловно, достаточно уникальны, так как столкновения с ним спроектированы так, чтобы быть математически почти невозможными.

В любом случае вам нужно будет называть файлы по вашей схеме, а не по идентификатору пользователя.

0 голосов
/ 27 августа 2018

Как-то так должно помочь:

Я определил $current_user как 123. Очевидно, измените этот код, чтобы вы точно установили значение этой переменной на основе того, как вы в настоящее время обрабатываете аутентификацию.

Следующим шагом является перемещение всех файлов PDF в недоступный для Интернета каталог. Это означает, что невозможно получить доступ к PDF, просто введя URL-адрес в адресную строку.

Как только это будет сделано, определите путь $pdf_path к каталогу, содержащему файлы PDF.

Затем вы можете перейти к script.php?user=123. Если значение user совпадает с $current_user, тогда код PHP извлечет соответствующий файл PDF и затем выведет его пользователю. Если вы попытаетесь указать другое значение user, чем то, в которое вы вошли, то вы увидите сообщение об ошибке. Удачи ..

<?php

$current_user = 123;
$pdf_path = '/home/pdfs/' . $current_user . '.pdf';

if($current_user == $_GET['user']) {

    header('Content-Type: application/pdf');
    header("Content-Transfer-Encoding: Binary");
    header("Content-disposition: attachment; filename=".$current_user.".pdf");
    readfile($pdf_path);
    exit;

} else {

    echo "You do not have permission to access this file";

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...