+380(66)433-69-36 | |
+380(66)433-69-36 | |
+380(66)433-69-36 |
- BitLocker с GUI под linux
- Ищем вирус elTest
- Работаем с бесплатным SSL сертификатом Letsencrypt с помощью certbot
- Синхронизация ресурсов с удаленного сервера локально
- Применение нестандартного SEO и статус 404
- MySQL синхронизируем права с разных серверов
- IPSec VPN соединение между офисами.
- "Зеркало" сайта на стороне. Донастраиваем nginx
- Дефрагментация таблиц всех баз MySQL
- Месяц в родительном падеже strftime PHP
- INIT скрипт для Dropbox
- osCommerce VAM Edition 226. Ошибки
- PositiveSSL порядок сертификатов
- osCommerce. Создаем модуль доставки
- Восстановление mySQL баз данных
- osCommerce.Перенос магазина в другой домен
- osCommerce.Прячем адмику
- osCommerce. Продление жизни сессий
- osCommerce. Создаем платежный модуль
- 10 причин выбрать нас
- GRUB2 восстановление
- osCommerce не пересчитывает общую сумму заказа
- Список потенциально опасных скриптов
- Отправка файлов из Dropbox по e-mail
- "Черный список" почтовых доменов
- Боремся с назойливыми иностранцами
- Яндекс-Диск, и стоит ли им пользоваться.
- Обновление модуля Интеркассы для osCommerce
- Веб-почта на сайте хостинга
- Подключение Outlook Express к хостингу
Joomla. Защищаем картинки
Перед тем, как перейти к рассмотрению вопроса о защите изображений в Joomla давайте определимся, что защищаем и от кого защищаем. Итак, что защищаем - защищаем картинки, видео и аналогичный контент, как правило размещенный в каталоге /images или в любом другом каталоге. От кого защищаем: от роботов и посетителей.
Необходимо сделать таким образом, чтобы картинки и видео с сайта могли смотреть ТОЛЬКО зарегистрированные пользователи. Безусловно, в каждой компоненте работающей с графическими или видео файлами предусмотрена защита от "не зарегистрированных" пользователей, однако, как правило такая защита оперирует минимальными мерами: Вошел в систему - вот тебе ссылка, не вошел - ссылка на изображение и само изображение не отобразится в "стандартном" окне вывода. Однако, компоненты не скрывают контент от прямых ссылок - они только маскируют прямые ссылки от посетителей. Что же нужно сделать для того, чтобы все-таки сделать "честную" защиту? Сделать на самом деле нужно не так и много:
1. Перенаправить "прямую" ссылку на изображение на файл скрипта, который собственно и будет определять - что кому и как отображать
2. Написать скрипт или компоненту, которая позволит это сделать.
Итак выполняем задачу номер 1. Организовываем перенаправление.
Для этого нужно во-первых перенести каталог с картинками, которые нужно защитить в любой каталог вне прямого доступа с сайта или перенести в другой каталог сайта и выставить в файле .htaccess защиту от прямых ссылок, например так: "Deny from All".
В самой папке, которую мы перенесли необходимо создать файл .htaccess примерно такого содержания:
RewriteEngine On
RewriteBase /images/phocagallery/
RewriteRule ^(.+)$ /components/com_imagesecure/imagesecure.php [NC]
В данном случае рассматривается пример для фотогалереи Phoca.
Что собственно произойдет, когда посетитель попробует применить прямую ссылку? Он будет неявно перенаправлен на компоненту imagesecure которую рассмотрим ниже. Этот скрипт проверит права посетителя на просмотр файла и если все хорошо - отобразит требуемое изображение или видео.
Возвращаемся к задаче №2. Теперь собственно упрощенный код самой компоненты:
<?php
$JPath=dirname(__FILE__).'/../../';
define( '_JEXEC', 1 );
define('JPATH_BASE', $JPath);
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$session=&JFactory::getSession();
$user=& JFactory::getUser();
$base='путь по которому находится каталог
с оригинальніми файлами/protected';
$name=htmlspecialchars($_SERVER['REDIRECT_URL'],ENT_QUOTES);
$name=preg_replace('/\.\./','',$name);
$real_file=$base.$name;
if ($user->guest)
{
$real_file=$JPath.'/components/com_imagesecure/blank.png';
}
if (file_exists($real_file)){
header('content-type: '.mime_content_type($real_file));
$fr=fopen($real_file,'rb');
while ($data=fread($fr,2048)){echo $data;}
if (isset($fr)){fclose($fr);}
}
?>
Собственно - все. Для корректной работы компоненты необходимо только поменять путь к каталогу, где находятся оригинальные файлы.
Обратите внимание, что путь не заканчивается слешем '/'.
Что собственно делает скрипт? Во-первых инициализирует среду Joomla чтобы определить полномочия посетителя. Если посетитель - гость, то возвращается "пустая" картинка - меняем картинку, и получаем изображение в стиле "вас здесь не ждали". Если посетитель прошел корректную регистрацию на сайте - тогда из параметров среды выбирается строка рефферал и из нее достается имя изображения, которое должно отображаться, ну и в завершение производится отображение этого изображения.
Вобщем-то все в самом простейшем виде. Остальные "меры" и эффекты добавляются по желанию.