Как разрешить прямой доступ к моему пользовательскому файлу .php в модуле Joomla для использования из AJAX?

8

Это мой первый раз в PHP и мой первый раз с Joomla. Я пришел из тяжелого не-Web C # /. Net фона.

Я написал собственный модуль Joomla, который взаимодействует со сторонним WebService через nuSoap.

Все это прекрасно работает, если я просто запускаю файлы .php в моей собственной не-Joomla PHP-среде на моем компьютере разработчика.

Тем не менее, если я правильно понимаю, Joomla блокирует все запросы ко всем, кроме index.php, это правильно?

Как мне разрешить прямой доступ к моему собственному файлу .php?

это пример того, как я запрашиваю его из клиентского JavaScript с помощью jQuery:

$.ajax({
     url: 'MyFile.php',
     type: 'POST',
     data: { ... },
     success: function(data, status) {
          ....

где MyFile.php в настоящее время физически находится на /htdocs/modules/mod_mymodule/MyFile.php

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

Федерико Берасатеги
источник
Попробуйте изменить код наurl: '/modules/mod_mymodule/MyFile.php',
TryHarder

Ответы:

5

Обычно единственное, что препятствует прямому доступу к файлу joomla, - это строка в верхней части файла:

defined('_JEXEC') or die('Restricted access');

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

Перенаправление файла htaccess уже имеет условия, чтобы не перенаправлять, если файл или папка существует:

# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d

Если этого не произойдет, вы не сможете загрузить файлы javascript или css!

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

Самое важное, на что следует обратить внимание, - это то, что ни один из классов Joomla не будет загружен, поэтому вы должны запустить этот файл как отдельный файл (что вы уже делаете).

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

Дэвид Фрич
источник
Спасибо за Ваш ответ. Я боюсь, что мое решение не будет работать в этом случае, так как мне нужно будет интегрировать пользовательские функции Joomla и загрузить другие специфические данные Joomla. Я читал об этом, com_ajaxно так как я совершенно новичок в Joomla (и вообще в PHP), я хотел быстрый выход, который не требовал реализации дополнительных вещей. Теперь, когда вы упомянули, что none of the Joomla classes will be loadedя понимаю, что это не правильное решение моей проблемы. Разве есть способ вручную «загрузить» фреймворк Joomla по требованию из моего отдельного файла .php?
Федерико Берасатеги
Большой! Спасибо! это позволит мне, например, получить текущий зарегистрированный в профиле пользователя?
Федерико Берасатеги
2
Любой звонок Joomla должен работать. Так что $user = JFactory::getUser()должно работать, чтобы получить информацию о текущем пользователе.
Дэвид Фрич
4

Альтернативное решение,

Если вы разработали модуль в правильной структуре Joomla, то вместо включения ядра Joomla в файл модуля вы можете использовать его com_ajaxдля ajaxвызова модуля или плагина.

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

Подробную документацию можно найти здесь. Также, если вы используете более старую версию Joomla, есть компонент, доступный для реализации интерфейса Ajax. ,

Эта функция Ajax встроена в версию J3.2 и выше, поэтому нижеприведенная версия должна использовать эти компоненты.

Надеюсь, это имеет смысл!

Джобин Хосе
источник