CodeIgniter - Güvenlik

XSS Önleme

XSS, siteler arası komut dosyası anlamına gelir. CodeIgniter, XSS filtreleme güvenliğiyle birlikte gelir. Bu filtre, herhangi bir kötü amaçlı JavaScript kodunu veya çerezi ele geçirmeye ve kötü niyetli faaliyetler gerçekleştirmeye çalışan diğer kodları engeller. Verileri XSS filtresi aracılığıyla filtrelemek için,xss_clean() yöntemi aşağıda gösterildiği gibi.

$data = $this->security->xss_clean($data);

Bu işlevi yalnızca veri gönderirken kullanmalısınız. İsteğe bağlı ikinci Boolean parametresi, XSS saldırısı için görüntü dosyasını kontrol etmek için de kullanılabilir. Bu, dosya yükleme tesisi için kullanışlıdır. Değeri doğruysa, görüntünün güvenli olduğu ve başka türlü olmadığı anlamına gelir.

SQL Enjeksiyon Önleme

SQL enjeksiyonu, veritabanı sorgusuna yapılan bir saldırıdır. PHP'de kullanıyoruzmysql_real_escape_string() diğer tekniklerle birlikte bunu önlemek için işlev görür, ancak CodeIgniter bunu önlemek için dahili işlevler ve kitaplıklar sağlar.

CodeIgniter'da SQL Enjeksiyonunu aşağıdaki üç yolla önleyebiliriz:

  • Kaçan Sorgular
  • Sorgu Teklifi
  • Aktif Kayıt Sınıfı

Kaçan Sorgular

<?php
   $username = $this->input->post('username');
   $query = 'SELECT * FROM subscribers_tbl WHERE user_name = '.
      $this->db->escape($email);
   $this->db->query($query);
?>

$this->db->escape() işlev, verilerin etrafına otomatik olarak tek tırnak işaretleri ekler ve yalnızca dize verilerinden çıkabilmesi için veri türünü belirler.

Sorgu Teklifi

<?php
   $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
   $this->db->query($sql, array(3, 'live', 'Rick'));
?>

Yukarıdaki örnekte, sorgu () işlevinin ikinci parametresinde soru işareti (?), Dizi ile değiştirilecektir. Sorguyu bu şekilde oluşturmanın temel avantajı, değerlerin otomatik olarak önlenerek güvenli sorgular üretmesidir. CodeIgniter motoru bunu sizin için otomatik olarak yapar, böylece hatırlamak zorunda kalmazsınız.

Aktif Kayıt Sınıfı

<?php
   $this->db->get_where('subscribers_tbl',array
      ('status'=> active','email' => '[email protected]'));
?>

Etkin kayıtlar kullanılarak, sorgu sözdizimi her veritabanı bağdaştırıcısı tarafından oluşturulur. Değerler otomatik olarak çıktığı için daha güvenli sorgulara da izin verir.

PHP Hatalarını Gizleme

Üretim ortamında, genellikle kullanıcılara herhangi bir hata mesajı göstermek istemiyoruz. Hata ayıklama amacıyla geliştirme ortamında etkinleştirilmiş olması iyidir. Bu hata mesajları, güvenlik nedeniyle site kullanıcılarına göstermememiz gereken bazı bilgiler içerebilir.

Hatalarla ilgili üç CodeIgniter dosyası vardır.

PHP Hata Raporlama Düzeyi

Farklı ortamlar, farklı hata raporlama seviyeleri gerektirir. Varsayılan olarak, geliştirme hataları gösterir ancak test ve canlı yayın bunları gizler. Adlı bir dosya varindex.phpCodeIgniter'ın bu amaçla kullanılan kök dizininde. Argüman olarak sıfırı geçirirsekerror_reporting() fonksiyon sonra tüm hataları gizleyecektir.

Veri tabanı hatası

PHP hatalarını kapatmış olsanız bile, MySQL hataları hala açıktır. Bunu şuradan kapatabilirsinapplication/config/database.php. Yı kurdb_debug seçeneği $db dizi FALSE Aşağıda gösterildiği gibi.

$db['default']['db_debug'] = FALSE;

Hata günlüğü

Diğer bir yol da hataları günlük dosyalarına aktarmaktır. Bu nedenle sitede kullanıcılara gösterilmeyecektir. Basitçe,log_threshold değer $config dizi 1 inç application/cofig/config.php dosya aşağıda gösterildiği gibi.

$config['log_threshold'] = 1;

CSRF Önleme

CSRF, siteler arası istek sahteciliği anlamına gelir. Bu saldırıyı şuradan etkinleştirerek önleyebilirsiniz:application/config/config.php dosya aşağıda gösterildiği gibi.

$config['csrf_protection'] = TRUE;

Kullanarak form oluştururken form_open()işlevi, otomatik olarak bir CSRF'yi gizli alan olarak ekleyecektir. CSRF'yi manuel olarak da ekleyebilirsiniz.get_csrf_token_name() ve get_csrf_hash()işlevi. get_csrf_token_name() işlevi CSRF'nin adını döndürecektir ve get_csrf_hash() CSRF'nin karma değerini döndürür.

CSRF jetonu, gönderim için her seferinde yeniden oluşturulabilir veya CSRF çerezinin ömrü boyunca aynı kalmasını da sağlayabilirsiniz. Değeri ayarlayarakTRUE, anahtar ile yapılandırma dizisinde ‘csrf_regenerate’ jetonu aşağıda gösterildiği gibi yeniden oluşturacaktır.

$config['csrf_regenerate'] = TRUE;

CSRF korumasından URL'leri beyaz listeye eklemek için, anahtarını kullanarak yapılandırma dizisinde ayarlayarak ‘csrf_exclude_uris’Aşağıda gösterildiği gibi. Normal ifadeyi de kullanabilirsiniz.

$config['csrf_exclude_uris'] = array('api/person/add');

Parola İşleme

Birçok geliştirici, web uygulamalarında şifreyi nasıl kullanacağını bilmiyor, bu yüzden muhtemelen birçok bilgisayar korsanı sistemlere girmeyi çok kolay buluyor. Şifreleri ele alırken aşağıdaki noktaları akılda tutmak gerekir -

  • Parolaları düz metin biçiminde SAKLAMAYIN.

  • Her zaman şifrelerinize hashing uygulayın.

  • Parolaları saklamak için Base64 veya benzeri bir kodlama KULLANMAYIN.

  • MD5 veya SHA1 gibi zayıf veya bozuk karma algoritmaları KULLANMAYIN. Yalnızca, PHP'nin kendi Parola Karma işlevlerinde kullanılan BCrypt gibi güçlü parola karma algoritmaları kullanın.

  • Bir parolayı hiçbir zaman düz metin biçiminde GÖSTERMEYİN veya GÖNDERMEYİN.

  • Kullanıcılarınızın parolalarına gereksiz sınırlamalar KOYMAYIN.