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

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

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

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

Однако, если я правильно понимаю, 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

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

8 голосов | спросил Federico Berasategui 19 +04002014-10-19T06:30:03+04:00312014bEurope/MoscowSun, 19 Oct 2014 06:30:03 +0400 2014, 06:30:03

2 ответа


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 сделать это за вас), но это не связано с тем, имеет ли файл прямой доступ или нет.

ответил David Fritsch 19 +04002014-10-19T20:10:09+04:00312014bEurope/MoscowSun, 19 Oct 2014 20:10:09 +0400 2014, 20:10:09
4

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

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

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

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

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

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

ответил Jobin Jose 20 +04002014-10-20T14:49:41+04:00312014bEurope/MoscowMon, 20 Oct 2014 14:49:41 +0400 2014, 14:49:41

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132