Повторять/печатать jpg-изображение с php для безопасности?

Можно сделать это. Создайте основной шаблон. Заставьте его иметь только Частных конструкторов. Тогда создайте специализации для каждого случая, который Вы хотите позволить (или сделать противоположное, если запрещенный список является значительно уменьшенным, чем позволенный список).

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

Этот пример только позволяют инстанцирование с интервалом и плавание.

template<class t> class FOO { private: FOO(){}};

template<> class FOO<int>{public: FOO(){}};

template<> class FOO<float>{public: FOO(){}};

не короткий и изящный способ сделать его, но его возможное.

5
задан Johan 14 September 2009 в 16:07
поделиться

3 ответа

Прежде всего, вместо того, чтобы читать файл с file_get_contents и только потом повторять его содержимое, вы можете использовать readfile : он выполнит обе операции за один вызов, что, вероятно, будет самым быстрым и будет использовать меньше памяти, чем:

  • загрузить полный файл в память с помощью file_get_only
  • и , только затем отправьте этот контент на outout


. Затем, если вы хотите, чтобы идентифицировали только для доступа к изображениям, у вас нет особого выбора: если ваш механизм идентификации основан на PHP, у вас будет передать PHP для ограничения доступа к файлу - что, да,будет немного медленнее, чем при использовании Apache напрямую для обслуживания контента.


Также: здесь вы говорите:

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

Читая это, я полагаю, что к вашим изображениям можно получить доступ напрямую через Apache, минуя ваш PHP-скрипт, если кто-то знает их URL; безопасность посредством неизвестности - это плохо.

Лучшим решением, если вы не хотите, чтобы ваши изображения обслуживались Apache, было бы поместить их в каталог, из которого Apache ничего не будет обслуживать:

  • либо под- каталог вашего корневого документа, защищенный файлом .htaccess, содержащим « Запретить всем »
  • , или каталог, который не находится в корневом каталоге вашего документа, и поэтому никогда не будет обслуживаться Apache .

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


Другая идея, касающаяся проблемы с производительностью, может заключаться в том, чтобы указать браузеру, что он может кэшировать ваши изображения - по крайней мере,

10
ответ дан 13 December 2019 в 05:38
поделиться

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

<?php

if($_SESSION['user']){

    $result = mysql_query("SELECT src FROM Media WHERE id = '"
    . mysql_real_escape_string($_GET['id']) ."'");

    $data = mysql_fetch_assoc($resultat);

    // Output the image
    header('Content-Type: image/jpeg');
    readfile("media/". $data['src']));
}
2
ответ дан 13 December 2019 в 05:38
поделиться

Паскаль МАРТИН прав, что readfile по существу совпадает с echo и file_get_contents . Я сомневаюсь, что есть какая-то значительная разница в производительности, но проще использовать readfile .

Что касается разрешения просмотра изображений только зарегистрированным пользователям, поместите изображения за пределы вашего веб-каталога. Используя readfile , вы можете получить файл из другого каталога. Таким образом, они не смогут получить к нему доступ, даже если они угадывают URL.

0
ответ дан 13 December 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: