Joomlaモジュールのカスタム.phpファイルへの直接アクセスをAJAXから利用できるようにするにはどうすればよいですか?


8

これはPHPで初めて、Joomlaで初めてです。私はWeb以外のC#/ .Netの重いバックグラウンドを持っています。

nuSoapを介してサードパーティのWebServiceとやり取りするカスタムJoomlaモジュールを作成しました。

開発マシンの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

回答:


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年


すごい!ありがとう!これにより、たとえば、現在ログインしているユーザープロファイルを取得できますか?
フェデリコベラサテギ2014年

2
Joomlaの呼び出しはすべて機能するはずです。だから、$user = JFactory::getUser()あなたの現在のユーザーの情報を取得するために動作するはずです。
David Fritsch 2014年

4

代替ソリューション、

あなたは適切でモジュールを開発している場合はJoomlaの構造に使用できるモジュールファイルへのコアJoomlaのフレームワークを含め、その後の代わりにcom_ajax行うためのajaxモジュールやプラグインへの呼び出しを。

Webサービスを使用していて、多くのサイトで使用することを計画している場合は、Joomlaモジュール/プラグインを非常に簡単に作成できます。これは、ajaxを介してアクセスでき、このモジュール/プラグインのインストールは、他のjoomla拡張機能と同様に非常に簡単です。

詳細なドキュメントはこちらにあります。また、古いバージョンのJoomlaを使用している場合は、Ajaxインターフェースを実現するために使用できるコンポーネントがあります。

このAjax機能はJ3.2バージョン以降に組み込まれているため、以下のバージョンではこのコンポーネントを使用する必要があります。

それが理にかなっていることを願っています!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.