web-dev-qa-db-ja.com

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

これは、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にあります。

このファイルへの直接リクエストを許可するとセキュリティリスクが発生する可能性があることはわかっていますが、これをできるだけ早く実行する必要があり、後でセキュリティの問題に対処します。

通常、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に任せると簡単です)。ただし、ファイルが直接かどうかとは関係ありません。アクセスしたかどうか。

5
David Fritsch

代替ソリューション、

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

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

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

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

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

4
Jobin Jose