Ini adalah pertama kalinya di PHP dan pertama kalinya di Joomla. Saya berasal dari latar belakang non-Web C # / .Net yang berat.
Saya telah menulis modul Joomla khusus yang berinteraksi dengan WebService pihak ketiga melalui nuSoap.
Ini semua berfungsi dengan baik jika saya hanya menjalankan file .php di lingkungan PHP non-Joomla saya sendiri di mesin dev saya.
Namun, saya jika mengerti benar, Joomla memblokir semua permintaan untuk semua kecuali index.php
, apakah ini benar?
Bagaimana cara saya mengizinkan akses langsung ke file .php saya sendiri?
ini adalah contoh bagaimana saya memintanya dari javascript sisi klien menggunakan jQuery:
$.ajax({
url: 'MyFile.php',
type: 'POST',
data: { ... },
success: function(data, status) {
....
di mana MyFile.php saat ini berlokasi secara fisik di /htdocs/modules/mod_mymodule/MyFile.php
Saya tahu bahwa mengizinkan permintaan langsung ke file ini dapat menimbulkan risiko keamanan, namun saya harus menjalankannya secepat mungkin dan saya akan mengurus masalah keamanan di lain waktu.
sumber
url: '/modules/mod_mymodule/MyFile.php',
Jawaban:
Biasanya satu-satunya hal yang mencegah akses langsung ke file joomla adalah baris di bagian atas file:
Jika itu belum ada di bagian atas file, maka Anda tidak akan kesulitan mengakses file secara langsung.
Redtaccess file htaccess sudah memiliki kondisi untuk tidak redirect jika file atau folder ada:
Jika tidak, Anda tidak akan dapat memuat file javascript atau css!
Jadi sebenarnya yang perlu Anda lakukan adalah menghapus baris itu dari atas file dan Anda harus dapat mengakses file secara langsung.
Hal terbesar yang perlu diperhatikan adalah tidak ada kelas Joomla yang akan dimuat, jadi Anda harus menjalankan file ini sebagai file yang berdiri sendiri (yang sudah Anda lakukan.)
Sejauh yang saya ketahui, seharusnya tidak ada risiko keamanan yang melekat dalam mengakses file php secara langsung, selama itu adalah perilaku yang dimaksud. Karena mayoritas file di Joomla berasumsi bahwa mereka tidak akan diakses secara langsung, yang terbaik adalah memblokir akses langsung itu. Dalam kasus Anda, Anda ingin kode itu diakses secara langsung, jadi tidak ada risiko yang melekat. Anda mungkin memiliki risiko keamanan lainnya dengan menerima data POST dan tidak memfilternya dengan benar atau semacamnya (yang lebih mudah jika Anda membiarkan Joomla melakukannya untuk Anda), tetapi itu tidak terkait dengan apakah file tersebut diakses langsung atau tidak.
sumber
com_ajax
tetapi karena saya benar-benar baru di Joomla (dan PHP sama sekali) saya ingin jalan keluar cepat yang tidak perlu menerapkan hal-hal tambahan. Sekarang Anda menyebutkan bahwanone of the Joomla classes will be loaded
saya menyadari itu bukan solusi yang tepat untuk masalah saya. Kecuali ada cara untuk "memuat" kerangka kerja Joomla secara manual berdasarkan permintaan dari file .php mandiri saya sendiri?$user = JFactory::getUser()
harus bekerja untuk memberi Anda informasi pengguna saat ini.Solusi alternatif,
Jika Anda mengembangkan modul dalam struktur Joomla yang tepat maka alih-alih menyertakan kerangka kerja Core Joomla ke file modul yang dapat Anda gunakan
com_ajax
untuk melakukanajax
panggilan ke modul atau plugin.Jika Anda bekerja dengan layanan Web dan berencana untuk menggunakannya di banyak situs, begitu sederhana membuat modul / Plugin Joomla dan yang dapat diakses melalui ajax dan pemasangan modul / plugin ini cukup sederhana seperti ekstensi joomla lainnya.
Dokumentasi terperinci dapat ditemukan di sini , Juga jika Anda menggunakan versi Joomla yang lebih lama ada komponen yang tersedia untuk mencapai antarmuka Ajax. .
Fitur Ajax ini adalah built-in dengan versi J3.2 dan di atas sehingga versi di bawah ini harus menggunakan komponen ini.
Semoga ini masuk akal!
sumber