Защитите сгенерированное изображение с помощью php - PullRequest
1 голос
/ 15 июня 2011

У меня проблема здесь, и я думаю, что люди здесь могут помочь мне.

У меня есть файл, который генерирует изображение, ler.php, и файл, который загружает изображения через некоторое время, carregar.php.

Мне нужно заблокировать прямой доступ к изображениям, сгенерированным ler.php, попытался создать систему, подобную этой сессии:

carregar.php:

<?
$_session['a'] = 1;
while($a != 50) { echo "<img src='ler.php?imagem=$a'>"; $a++; }
$_session['a'] = 0;
?>

ler.php:

<? if($_session['a'] == 1) { //load image } ?>

В результате происходит загрузка только первого изображения.

Я пытаюсь теперь использовать $_SERVER ["PHP_SELF"], поместив IF в ler.phpчто происходит, если я загружаю его через <img src=''>, который она идентифицирует как carregar.php.

У кого есть лучшее решение?Я пробовал несколько способов с $_SESSION, и, похоже, он не работает.

Ответы [ 3 ]

0 голосов
/ 15 июня 2011

Мне трудно определить проблему, но использование сеанса приведет к неожиданным результатам:

Вы добавляете 50 (я думаю ...) тегов изображения на страницу, и справапосле добавления этих тегов вы устанавливаете переменную сеанса равной 0.

Браузер загружает только несколько файлов с одного и того же сервера одновременно , поэтому, когда сценарий выполнен ипервое изображение загружено, браузер будет запрашивать следующее изображение, но оно не будет выполнено, так как вы уже установили переменную сеанса на 0.

Единственный способ надежно установить переменную сеанса на 0 после всех изображенийзагружен, является ajax-запросом с вашей страницы, который проверяет и запускает после полной загрузки всех изображений.

0 голосов
/ 15 июня 2011

Хорошо! Мне удалось решить один путь и импровизировать без использования AJAX:

ler.php:

<?php
    if(isset($_SERVER["HTTP_REFERER"])) {
    $check2 = (strpos($_SERVER["HTTP_REFERER"], 'carregar.php') > 0) ? true : false;
    if(print_r($check2) != 11) {
// Blank
    }
    } else {          
    if(isset($_SERVER["HTTP_REFERER"]))
    {
// Load Image
    }
    if(!isset($_SERVER["HTTP_REFERER"]))
    {
// Blank
    }
?>

Итак, изображение можно загрузить только на мою страницу. Может быть ...

0 голосов
/ 15 июня 2011

Я мог бы предложить два пути:

  1. Простота реализации, меньшая защита: в ler.php проверьте, что $ _SERVER ["HTTP_REFERER"] ссылается на "carregar.php".

  2. Немного сложнее: в carregar.php сгенерируйте уникальный код для каждого изображения, которое вы собираетесь вывести, и сохраните его в $ _SESSION.Затем передайте код ler.php в качестве параметра GET.В ler.php проверьте, существует ли код в объекте $ _SESSION, затем сгенерируйте изображение и удалите код из $ _SESSION.

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