Joomla! 1.5 Kodlarına Giriş (Bölüm 2)

CaptainSalvador

Adanmış Üye
17 Eki 2014
6,073
15
Teşkilat
Joomla! 1.5 serisine ait dosyaları incelemeye devam edelim.

Bir önceki yazımızda Joomla! 1.5 kodlarına girmiş ve index.php'nin kodlarını incelemiştik. Şimdi ise index.php içerisinde bahsettiğimiz iki dosyayı; defines.php ve framework.php dosyalarını inceleyeceğiz. Bu iki dosya includes klasörü içerisindedir. Bazı tanımlamalar ve kontroller yapar. Şimdi hızlıca defines.php dosyasına bakalım.

defines.php:

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


Bir önceki yazımızda da belirttiğimiz gibi artık bakacağımız veya hazırlayacağımız tüm php dosyalarının ilk satırına bu kodu koymak zorundayız. Böylece bu php dosyaları sadece index.php içerisinden çağırıldığında çalışacaktır. Bu oldukça etkili ve basit bir güvenlik önlemidir.

$parts = explode( DS, JPATH_BASE );


Gene hatırlayacağınız gibi index.php içerisinde iki tanımlama yapmıştık. Şimdi bunları kullanmaya başlıyoruz.


define( 'JPATH_ROOT', implode( DS, $parts ) );

define( 'JPATH_SITE', JPATH_ROOT );
define( 'JPATH_CONFIGURATION', JPATH_ROOT );
define( 'JPATH_ADMINISTRATOR', JPATH_ROOT.DS.'administrator' );
define( 'JPATH_XMLRPC', JPATH_ROOT.DS.'xmlrpc' );
define( 'JPATH_LIBRARIES', JPATH_ROOT.DS.'libraries' );
define( 'JPATH_PLUGINS', JPATH_ROOT.DS.'plugins' );
define( 'JPATH_INSTALLATION', JPATH_ROOT.DS.'installation' );
define( 'JPATH_THEMES' , JPATH_BASE.DS.'templates' );
define( 'JPATH_CACHE', JPATH_BASE.DS.'cache');


defines.php dosyasında isminden de anlaşılacağı üzere bazı dizinlerimizi tanımlıyoruz. Bunlar ilerleyen yazılarda bu dizinleri sıkça ve kolayca kullanmamızı sağlayan tanımlamalardır.

Şimdi de framework.php dosyamızı yazı editörümüz ile açalım ve içerisindeki kodlara bir bakalım.

framework.php:

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


Direkt olarak erişimi engelledik.

@set_magic_quotes_runtime( 0 );
@ini_set('zend.ze1_compatibility_mode', '0');


Magic quotes desteği açıksa bunu kapatıyoruz.

if (!file_exists( JPATH_CONFIGURATION . DS . 'configuration.php' ) || (filesize( JPATH_CONFIGURATION . DS . 'configuration.php' ) < 10) || file_exists( JPATH_INSTALLATION . DS . 'index.php' )) {
if( file_exists( JPATH_INSTALLATION . DS . 'index.php' ) ) {
header( '********: installation/index.php' );
exit();
} else {
echo 'No configuration file found and no installation code available. Exiting...';
exit();
}
}


configuration.php dosyasının ve kurulum klasörünün olup olmadığına bakıyoruz. Eğer configuration.php yoksa, 10 byte boyutundan az ise ve kurulum klasörü (installation) bulunuyorsa kurulum sayfasına gidiyoruz. Eğer durum daha farklıysa çıkış yapıyoruz.

require_once( JPATH_LIBRARIES .DS.'joomla'.DS.'import.php');


Bu kod ile ilerleyen yazılarda detaylı olarak anlatacağım bir sınıfı (jimport) içeren import.php dosyasını alıyoruz. Bu dosya ile kütüphanemizdeki (libraries klasörü içerisindeki) birçok sınıfı kolaylıkla dosyalarımıza dahil edeceğiz.

require_once( JPATH_CONFIGURATION .DS.'configuration.php' );

configuration.php dosyamızı alıyoruz.
$CONFIG = new JConfig();


configuration.php içerisindeki JConfig sınıfımızı $CONFIG değeri üzerine yazdırıyoruz.

if (@$CONFIG->error_reporting === 0) {
error_reporting( 0 );
} else if (@$CONFIG->error_reporting > 0) {
error_reporting( $CONFIG->error_reporting );
ini_set( 'display_errors', 1 );
}

define( 'JDEBUG', $CONFIG->debug );

unset( $CONFIG );


Bu kodlar configuration.php içerisinde tanımlanmış olan $CONFIG->error_reporting değeri ile hata gösterimini kapatıp açmamızı sağlar. En son satırda da $CONFIG değerimizi unset komutuyla yokediyoruz.

require_once(JPATH_SITE.DS.'libraries'.DS.'joomla'.DS.'utilities'.DS.'compat'.DS.'compat.php');


Bu kod ile Joomla! nın PHP 5.0.x mi yoksa PHP 5.1.x ile mi çalışacağını belirleyen compat.php dosyamızı alıyoruz.

if (JDEBUG) {
jimport( 'joomla.error.profiler' );
$_PROFILER =& JProfiler::getInstance( 'Application' );
}


Bu kod ile JProfiler sınıfının getInstance fonksiyonu ile sistemimiz için bir uygulama profili oluşturuyoruz. Bu profil index.php içerisinde tetikleyici tanımlamalarında kullanılacak.

// Joomla! library imports;
jimport( 'joomla.application.menu' );
jimport( 'joomla.user.user');
jimport( 'joomla.environment.uri' );
jimport( 'joomla.html.html' );
jimport( 'joomla.utilities.utility' );
jimport( 'joomla.event.event');
jimport( 'joomla.event.dispatcher');
jimport( 'joomla.language.language');
jimport( 'joomla.utilities.string' );


Bu kod satırları ile import.php ile dahil ettiğimiz jimport fonksiyonunu kullanarak kütüphanemizden birçok özelliği dahil ediyoruz.

ALINTI
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.