CodeIgniter 3’te güvenlik önlemleri, uygulamanızın çeşitli saldırılara karşı korunmasını sağlamak için bir dizi yöntem ve en iyi uygulama içerir. İşte bazı önemli güvenlik önlemleri:
1. CSRF Koruması
CSRF (Cross-Site Request Forgery) saldırılarına karşı koruma sağlamak için CodeIgniter 3, yerleşik bir CSRF koruma özelliği sunar. Bunu etkinleştirmek için `application/config/config.php` dosyasını düzenleyin:
$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();
2. XSS (Cross-Site Scripting) Koruması
Kullanıcı girdilerini XSS saldırılarına karşı filtrelemek için `xss_clean` fonksiyonunu kullanabilirsiniz. Form verilerini alırken ya da veritabanına yazarken bu fonksiyonu kullanabilirsiniz:
$this->input->post('field_name', TRUE); // TRUE parametresi XSS temizliğini etkinleştirir
3. SQL Enjeksiyonu Önleme
CodeIgniter’ın Veritabanı Sınıfı, veritabanı sorgularında otomatik olarak SQL enjeksiyonunu önleyen bağlanmış parametreleri kullanır. Örneğin:
$this->db->where('id', $this->input->post('id', TRUE));
$query = $this->db->get('my_table');
Alternatif olarak, manuel olarak sorgu yazarken `query bindings` kullanabilirsiniz:
$sql = "SELECT * FROM my_table WHERE id = ?";
$query = $this->db->query($sql, array($this->input->post('id', TRUE)));
4. Şifreleme
Kullanıcı şifreleri gibi hassas verileri şifrelemek için PHP’nin `password_hash` ve `password_verify` fonksiyonlarını kullanabilirsiniz:
// Şifre oluşturma
$hashed_password = password_hash($this->input->post('password'), PASSWORD_BCRYPT);
// Şifre doğrulama
if (password_verify($this->input->post(‘password’), $hashed_password)) {
// Şifre doğru
}
5. Dosya Yükleme Güvenliği
Dosya yüklemelerinde güvenlik sağlamak için CodeIgniter’ın dosya yükleme sınıfını kullanabilirsiniz. Bu sınıf, dosya türü, dosya boyutu ve dosya adı gibi kontrolleri yapmanıza olanak tanır:
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 2048;
$config['max_width'] = 1024;
$config['max_height'] = 768;
$this->load->library('upload', $config);
if (!$this->upload->do_upload('userfile')) {
$error = array('error' => $this->upload->display_errors());
} else {
$data = array('upload_data' => $this->upload->data());
}
6. Output Filtering (Çıktı Filtreleme)
XSS saldırılarına karşı koruma sağlamak için çıktı verilerini `htmlspecialchars` veya CodeIgniter’ın `html_escape` fonksiyonu ile filtreleyin:
echo html_escape($data);
7. Güvenlik Konfigürasyonları
`application/config/config.php` dosyasındaki bazı önemli güvenlik ayarları:
$config['global_xss_filtering'] = TRUE;
$config['encryption_key'] = 'your-encryption-key';
8. HTTP Güvenliği
* **HTTPS kullanımı**: Mümkünse uygulamanızı HTTPS üzerinden çalıştırın.
* **HTTP Güvenlik Başlıkları**: Güvenlik başlıkları ekleyerek uygulamanızı güçlendirin. Örneğin, `Content-Security-Policy`, `X-Content-Type-Options`, `X-Frame-Options`, ve `X-XSS-Protection` başlıklarını kullanabilirsiniz.
$this->output->set_header("Content-Security-Policy: default-src 'self';");
$this->output->set_header('X-Content-Type-Options: nosniff');
$this->output->set_header('X-Frame-Options: DENY');
$this->output->set_header('X-XSS-Protection: 1; mode=block');
Bu yöntemler ve konfigürasyonlarla CodeIgniter 3 uygulamanızı daha güvenli hale getirebilirsiniz. Güvenlik sürekli bir süreçtir, bu nedenle düzenli olarak güvenlik güncellemelerini takip etmeli ve uygulamanızı test etmelisiniz.