如何允许直接访问要从AJAX使用的Joomla模块中的自定义.php文件?


8

这是我第一次使用PHP,也是我第一次使用Joomla。我来自沉重的非Web C#/ .Net背景。

我编写了一个自定义的Joomla模块,该模块通过nuSoap与第三方WebService进行交互。

如果我只是在自己的开发机上的非Joomla PHP环境中运行.php文件,那么一切都很好。

但是,如果我理解正确,Joomla会阻止对除以外的所有内容的所有请求index.php,这是正确的吗?

如何允许直接访问自己的.php文件?

这是我如何使用jQuery从客户端javascript请求它的示例:

$.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 2014年

Answers:


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我意识到这不是解决我的问题的合适方法。除非有一种方法可以根据需要从我自己的独立.php文件中手动“加载” Joomla框架?
Federico Berasategui 2014年


大!谢谢!这将使我能够例如检索当前登录的用户配置文件吗?
Federico Berasategui 2014年

2
任何Joomla通话都应该有效。因此$user = JFactory::getUser()应该努力为您获取当前用户的信息。
David Fritsch 2014年

4

替代解决方案,

如果您以正确的Joomla结构开发了模块,则可以使用com_ajaxajax模块或插件的调用来代替在模块文件中包含Core Joomla框架。

如果您正在使用Web服务,并计划在许多站点中使用它,那么创建Joomla模块/插件非常简单,可以通过Ajax来访问它,并且与其他joomla扩展一样,此模块/插件的安装也非常简单。

此处可以找到详细的文档,此外,如果您使用的是Joomla的较早版本,则可以使用一个组件来实现Ajax界面。

此Ajax功能是J3.2及更高版本内置的,因此低于此版本的版本应使用此组件。

希望有道理!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.