Como permito que o acesso direto ao meu arquivo .php personalizado em um módulo Joomla seja consumido pelo AJAX?

8

Esta é minha primeira vez em PHP e minha primeira vez com o Joomla. Eu venho de um histórico pesado de C # / .Net.

Eu escrevi um módulo Joomla personalizado que interage com um WebService de terceiros via nuSoap.

Isso tudo funciona muito bem se eu apenas executar os arquivos .php no meu próprio ambiente PHP não-Joomla na minha máquina de desenvolvimento.

No entanto, se eu entendi corretamente, o Joomla bloqueia todos os pedidos para tudo index.php, exceto , isso está correto?

Como permito acesso direto ao meu próprio arquivo .php?

Este é um exemplo de como estou solicitando o JavaScript do lado do cliente usando o jQuery:

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

onde MyFile.php está atualmente localizado fisicamente em /htdocs/modules/mod_mymodule/MyFile.php

Eu sei que a permissão de solicitações diretas para esse arquivo pode representar um risco à segurança, no entanto, eu preciso executá-lo o mais rápido possível e cuidarei das preocupações de segurança posteriormente.

Federico Berasategui
fonte
Tente alterar o seu código paraurl: '/modules/mod_mymodule/MyFile.php',
TryHarder 19/10/2014

Respostas:

5

Normalmente, a única coisa que impede o acesso direto a um arquivo joomla é uma linha na parte superior do arquivo:

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

Se isso ainda não estiver na parte superior do arquivo, você não terá problemas em acessar o arquivo diretamente.

O redirecionamento de arquivo htaccess já possui condições para não redirecionar se o arquivo ou a pasta existir:

# 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

Caso contrário, você não poderá carregar nenhum arquivo javascript ou css!

Então, na verdade, tudo o que você precisa fazer é remover essa linha da parte superior do arquivo e você poderá acessar o arquivo diretamente.

A principal coisa a se notar é que nenhuma das classes do Joomla será carregada; portanto, você deve executar esse arquivo como um arquivo independente (o que você já está fazendo).

Tanto quanto sei, não deve haver risco de segurança inerente ao acessar diretamente um arquivo php, desde que esse seja o comportamento pretendido. Como a maioria dos arquivos no Joomla supõe que eles não serão acessados ​​diretamente, é melhor bloquear esse acesso direto. No seu caso, você pretende que esse código seja acessado diretamente, sem riscos inerentes. Você pode ter outros riscos de segurança aceitando os dados do POST e não os filtrando adequadamente (ou seja, mais fácil se você deixar o Joomla fazer isso por você), mas isso não tem relação com o fato de o arquivo ser acessado ou não diretamente.

David Fritsch
fonte
Obrigado pela sua resposta. Receio que minha solução não funcione nesse caso, pois precisarei integrar os recursos do usuário do Joomla e carregar outros dados específicos do Joomla. Eu tenho lido sobre, com_ajaxmas desde que eu sou totalmente novo no Joomla (e no PHP), eu queria uma saída rápida que não exigisse implementar coisas extras. Agora que você mencionou que none of the Joomla classes will be loadedsei que essa não é uma solução adequada para o meu problema. A menos que haja uma maneira de "carregar" manualmente a estrutura do Joomla sob demanda do meu próprio arquivo .php independente?
Federico Berasategui
Ótimo! obrigado! isso me permitirá, por exemplo, recuperar o perfil de usuário conectado atual?
Federico Berasategui
2
Qualquer chamada do Joomla deve funcionar. Portanto, $user = JFactory::getUser()deve trabalhar para obter as informações do usuário atual.
David Fritsch
4

Uma solução alternativa,

Se você desenvolveu o módulo na estrutura apropriada do Joomla , em vez de incluir a estrutura do Core Joomla no arquivo do módulo, você pode usar com_ajaxpara fazer uma ajaxchamada ao módulo ou plugin.

Se você trabalha com serviços da Web e planeja usá-lo em muitos sites, cria um módulo / plug-in Joomla simples que pode ser acessado via ajax e a instalação desse módulo / plug-in é bastante simples, como qualquer outra extensão do joomla.

Uma documentação detalhada pode ser encontrada aqui . Além disso, se você estiver usando uma versão mais antiga do Joomla, há um componente disponível para obter a interface Ajax. .

Esse recurso do Ajax está embutido na versão J3.2 e acima; portanto, a versão abaixo deve usar esses componentes.

Espero que faça sentido!

Jobin Jose
fonte