Заблокируйте прямой доступ из pdf, но разрешите серверу запрашивать его для pdfjs

Я знаю, что есть много вопросов по этому поводу, но, к сожалению, любой из них работает для меня.

Я пытаюсь заблокировать pdf от прямого доступа, но пусть сервер показывает его в PDFJS.

Вот что я могу получить при просмотре PDF в PDFJS: файл отсутствует, 403 запрещен, неожиданный ответ сервера

Что я пробовал и не получилось:

  • Запретить все (.htaccess)
  • RewriteRule:
    RewriteEngine on rewriteRule
    ^path/to/folder? index.php [L]
  • Доступ к файлу из корневого каталога сервера, когда в htaccess есть «Запретить все»
  • Запретить всем с помощью «allow from 127.0.0.1» / «allow from localhost»

Вот код php-файла, который выполняет все проверки

    <?php

// Loading Joomla User core Files
define( '_JEXEC', 1 );
define('JPATH_BASE', '../');
require_once ( '../includes/defines.php' );
require_once ( '../includes/framework.php' );

// Create the Application
$app = JFactory::getApplication('site');

echo "<!DOCTYPE html><html dir='ltr' mozdisallowselectionprint moznomarginboxes><head><link rel='stylesheet' href='web/style/style.css'></head>";

// Error Messages
$error1 = "Veuillez vous connecter."; // You need to Log-in
$error2 = "Votre compte n'est pas abonné au journal électronique. <br /> <span style='font-size: 0.6em;'>Merci de visiter la <a href='' target='_blank'>page d'abonnement</a> si vous souhaiter vous y inscrire.</span>"; // Your account isn't subscribed to our web newspaper
$error3 = "Une erreur s'est produite durant votre requête. <br /> <span>Merci de réessayer. Si cette erreur persiste, merci de nous en faire part à travers le <a href='' target='_blank'>formulaire du support technique</a>.</span>"; // You encountered an error during your request. Plese refresh the page
$error4 = "Le lien ne dirige vers aucun pdf. <br /> <span style='font-size: 0.6em;'> Merci d'utiliser un lien correcte."; // You link doesn't lead to any pdf. Please use a correct link
$error5 = "Le fichier pdf est introuvable. <br /> <span style='font-size: 0.6em;'>Il s'aggit soit d'une erreur du lien URL ou bien le fichier pdf demandé n'existe plus. Veuillez vous refferrez à nos archives si vous souhaitez retrouver une ancienne édition.</span>"; // There's an error in your link.

if(empty($_GET["page"])) {
$page = "";
} else {
$page = htmlspecialchars($_GET["page"]);
}

// Get pdf
$file = "./pdf/" . $page . ".pdf";

// Get account
$user = JFactory::getUser();

// Define user id
$userId = $user->id;

// Connect to databases
$link = mysqli_connect("localhost", "root", "", "dbName");

// Define query to execute if page isn't empty and file exists
$resultabo = mysqli_query($link, "SELECT * FROM tableName WHERE user_id='$userId' ORDER BY id DESC LIMIT 1");

// STARTING FILES REQUEST
if(empty($page)) {
// If nothing is entered in the page, display error
header("HTTP/1.0 404 Not Found");
echo "<p id='errorMsg'>" . $error4 . "</p>";
exit(0);

} elseif(file_exists($file)) {

// If file is existing, continu php

// Check wether the user is a visitor or a registered member
if($userId == 0) {

header('HTTP/1.0 403 Forbidden');
echo "<p id='errorMsg'>" . $error1 . "</p>";
exit(0);

} else {

// Controling wether the user is logged-in in a subscribed account
while($row = $resultabo->fetch_assoc()) {

// Getting account type for checking if subcribed
$abo = $row["account_id"];

if($abo == 1) {

// Note : 1 is a registered member but not subscribed

// echo message : Your account is not subscribed to our website, please go on WebsiteName to subscribe.
header('HTTP/1.0 403 Forbidden');
echo "<p id='errorMsg'>" . $error2 . "</p>";
exit(0);

} else {

// Note : All $abo between 6 and 7 are "subscribed"// SUCCESS, PDF IS BEING SHOWED

// Viewer.html
echo 'PDFJS html code from viewer.html (code example)';

}

}
}

} else {

// Cannot find file, give an error.
header("HTTP/1.0 404 Not Found");
echo "<p id='errorMsg'>" . $error5 . "</p>";
exit(0);
}

echo "</head></html>";

exit(0);

?>

Не удалось вставить весь код средства просмотра html, но он такой же, как пример, приведенный в качестве демонстрации на их веб-сайте. Для отображения файла я изменил DEFAULT_URL с моим $ file.

Спасибо

0

Решение

Лучшее решение — поместить файлы вне папки проекта, примерно так:

-joomla folder
--administrator
--components
--...
-pdf

Таким образом, ваши PDF-файлы не могут быть доступны из URL, но остаются доступными из скрипта:

$file = JPATH_ROOT."/../pdf/" . $page . ".pdf";
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector