Php ile Proje Geliştirme Öncesi Bilinmesi Taktikler

Php ile web uygulamaları geliştirirken bir takım dikkat etmemiz gereken hususlar vardır. Php baz alınarak anlatılan bu yazıda aslında bir çok durum, genel web uygulamaları geliştirmede geçerli olan pratik bilgilerdir. Her geliştiricinin dikkat etmesi gereken pratik bilgilerin yer aldığı yazıyı inceleyelim.

1) Başarılı Bir POST İşleminden Sonra Sayfayı Yönlendirin

Sadece php için geçerli değildir. Web uygulamalarında kullanıcı form bilgilerini doldurup post eder. Post ile aynı sayfaya veriler gelir. Kullanıcı sayfayı yenilediğinde aynı formu aynı dataları tekrar sayfaya post eder. Sayfayı yenilediğinde bu uyarıyı yapan bir alert penceresi ekrana gelir zaten. Bu sorunu eminim bir çok kişi yaşamış veya başka uygulamalarda görmüştür diye düşünüyorum.
Hemen test etmeniz için aşağıdaki gibi bir php sayfası oluşturun. Örnek olarak index.php dosyasına aşağıdaki kodları ekleyip browser da test edin.

index.php:

Localhost dan ilgili sayfayı açıp sayfayı post ettiğinizde(Gönder butonuna bastığınızda) sayfanın post edildiğini aşağıda gelen dataların ekrana bastırıldığını göreceksiniz. Tekrar sayfayı yenilediğinde ise ekrana bir uyarı geleceki tamam dediğiniz takdirde aynı form bilgileriyle sayfa tekrar post edilecektir. Bu uygulamanıza göre sorun yaşatabilir ve istenmeyen bir durumdur. Örneğin kullanıcı bilgilerini güncellediğiniz veya kullanıcının mesaj gönderdiği form olarak düşünün, bilgiler sürekli insert veya update edilecektir.

Bunun için işlem sonucunda sayfayı yönlendirmeniz bu sorunu çözecektir.

2) Mysql_ * Fonksiyonlarını Kullanmaktan Vazgeçin

Php kendi sitesinde de duyurduğu üzere artık bu fonksiyonlara destek verilmeyecek PHP 5.5 de resmen kaldırıldığı ilan edilmiştir. http://tr1.php.net/manual/en/function.mysql-connect.php . Bu fonksiyonlar nedir

mysql_connect, mysql_query, mysql_fetch_array vb.

Bu eski emektar yapının köklü ve ihtiyaçlara uygun modern şekilde daha çok işimize yarayacak yapılarla tanışma vaktimizin geldiğini gösteriyor. Bunun için alternatiflerimiz: ezSQL, Mysqli (Mysql Improved Extension)

ezSQL ile tanışıp incelemenizi, devam etmenizi öneririm.

3) Php Etiketlerini Kapatmayın

Geliştiriciler genellikle php dosyalarının sonunda php etiketini kapatırlar. Bu bazen anlam veremediğimiz boşlukların olmasına sebebiyet verebiliyor.

Bunun yerine aşağıdaki gibi kullanmak tercih edilir.

4) XSS İçin Koruma

XSS (Cross Site Scripting) bir güvenlik açığıdır. İstemci tarafında javascript kodlarının çalıştırılmasını sağlar. Önemli bir konudur çok kullanılan ve zafiyet taramalarda ilk başvurulan yöntemlerdendir. Güvenli uygulama geliştirmeye özen gösterip tedbirler almak zorundayız. Daha fazla bilgi için wiki.

Bunu önlemek için kullanıcıdan gelen verileri filtreden geçirmemiz gerekiyor. Bunu her zaman yapmalıyız kullanıcılarımız her zaman iyi niyetli olmayabilir unutmayın. “htmlspecialchars” ile ekrana bastırılacak olan verinin işlevini kaybederek sadece yazı olarak gösterilmesini sağlar. Html etiketleri önceden tanımlanmış özel biçimlere dönüştürülür. Yani yazılacak data sadece metin olmuş olur, javascript, html komutlarını işlevsiz kılar.

5) Echo İle Tüm HTML Çıktılarınızı Basmayın

Bu benimde dikkat ettiğim kaçındığım ama gördüğüm kadarıyla çoğu zaman karşıma gelen bir durum. Yakın zamanda çalıştığım firmada yapılmış bir program üzerinde geliştirmeler yapmam gerekti. Html ile php birbirlerine girmiş havalarda uçuşan kodlar düşünün. Tüm sayfaların çıktılarının hatta projenin sırf echo ile yapıldığını hayal edin. Bu yine iyi bir seneryo peki ya o kodlar içinde hiç hata ayıklamayı aradığınızı hemen bulmayı düşündünüz mü? Bu çok sıkıcı ve vakit alıcı bir durum. IDE niz bile size çok yardımcı olamaz sağladığı özelliklerden yararlanamayabiliriz. Tasarımcı açısından da düşünün, php kodlarıyla çok uğraşmak zorunda da değil, içine girdiğinde aramakla 2 kat uğraşmakla işten çok çabuk sıkılması normal. Echo ile html basmayın demiyoruz, yerinde ve uygun şekillerde minimum düzeyde kullanmanız önerilir. MVC freamworkler kullanarak veya kendi yapılarınızı geliştirerek View dosyalarınızı ayrı tutmanız daha yararlı olacaktır.

6) Tekrar Etmeyen Kodlar Geliştirin

Uygulamanızı mümkün olduğunca mantıklı işlevsel parçalara ayırarak geliştirin. Aynı kodu bir çok kez yazmaktan kurtulun. Bunları include, class, function gibi yöntemleriyle halledebilirsiniz. Örneğin her defasında kullanıcı bilgilerinin kontrolünü sağlayan kodları yazmak yerine bir fonksiyon oluşturun, gerekli yerlerde bu fonksiyon sayesinde işleminizi rahatça yapabilirsiniz. Yarın bir gün abi kullanıcının seri no sunun kontrolünde şu bilgileri de ekleyelim dendiğinde tüm sayfalarda değişiklik yapmak zorunda kalmazsınız. Gider ilgili fonksiyonda değişikliği yapar kurtulursunuz.

7) Güvenlik Güvenlik ve Güvenlik

Uygulamanızda güvenlik göz ardı edilmemesi gereken en önemli konuların başında gelir. Bugün daha uygulama yeni gelişiyor çok büyük kullanıcı kitlemiz yok ilerde düşünürüz, kullanıcı profilimiz belli sorun olmaz, uygulamanın bu bölümünde güvenliğe bu kadar düşmemize gerek yok gibi göz ardı ettiğiniz şeyler gelecekte çok canınızı yakabilir.

Uygulama geliştirmede güvenliği hep düşünerek kod yazmak uygulamayı en baştan bu şekilde geliştirmek çok sağlıklı olacaktır.Bunu kendinize felsefe edinmenizi öneririm bu kendinizi de uygulamanızı da geliştirecektir.

Kullanıcılara güvenmeyerek uygulama geliştirmek gerekiyor. Bu kötü bir şey değil. Siz bütün kullanıcılarınıza tam güvenirsiniz ancak 1 kullanıcı gelir onu diğer kullanıcılarınızdan ayırt edemezsiniz ve çalışan sisteminizi de diğer kullanıcıları da üzebilir.

Tüm kullanıcı veri girişlerini, veri çıkışlarını filtrelemek, uygulamanızı itinayla bozmaya çalışmaktan denemeler yapmaktan güvenlik taramalarından ve gelişmeleri takip etmekten kaçınmayın.

8) Döngüler İçinde Sorgular Çalıştırmayın

Dögü içinde yaptığınız işemlere dikkat edin. Mümkün olduğunca optimize edin. Farkında olmadan yazdığınız kodlar sistemi gereğinden fazla yorar meşgul eder. Döngü içinde database işlemlerinden kaçınmaya çalışın.

9) Database Güvenli Veri Ekleme

Nasıl ki istemci tarafında kullanıcı verilerini XSS için etkisiz kılıyorsak aynı durumun veri tabanı versiyonu da var. Yani veri tabanına gelecek verilerinde kontrolden filtreden geçirerek SQL Injection saldırılarından korumamız gerekir. Bunun için alışagelmiş mysql_real_escape_string olsa da yeterli değil. Peki ya ne gerekiyor? EzSQL , Mysqli gibi yeni yapılar kendi güvenli yöntemlerini sunuyor.

Ayrıca kullandığımız hemen hemen tüm frameworkler güvenlik açıklarına karşı geliştirilip gerekli önlem mekanizmaları sağlamaktadır.

10) Her Olumsuz Durumda “die()” Kullanmayın

Bir çok geliştirmeler de olumsuz durumlar için die, exit gibi uygulamayı bitirici işlemlerle sonlandırırız. Bu iyi bir kullanım değildir, tabi uygulamanızın ve kodların yapısına göre değişebilir. Mümkün olduğunca hataları yakalamayı onları yönetmeyi bilmemiz gerekiyor. Hatalardan böyle kaçamayız. Hataları yakalayarak kontrol etmeyi, log tutma gibi, aynı zamanda uygulamanın çalışmasını sonlandırarak değil bunu uygun şekilde uygulama çalışmaya devam ederken işleyip gerekli bilgi mesajları vererek halletmemiz daha uygun olacaktır.

11) Doğrulama İşlemleri

İllaki her uygulamamızda doğrulama işlemlerine ihtiyaç duymuşuzdur. E-mail olsun, sayı ve metin gereken alanlar olsun. Bunlar için hemen devede pire aramayın. Her şey için regex kullanmaktan, internette aramaktan, kendiniz geliştirmekten vazgeçin. Bu maliyetli bir iştir. Hem kendiniz hem projeniz için. Hemen yanınızda duran var olan fonksiyonları inceleyin. Dile hakim olun. “filter_var” keşfedin. Örneğin email kontrolü için:

12) Php Kısa Etiketler

Benimde aslında sık kullandığım kısa etiket yapısı içinde bir uyarı var. Bazı sunucularda php kısa etiket kullanımı kapalı olabilir. Bunda ne var diyorsanız: sunucu bize ait değilse, veya yaptığımız uygulamayı dağıtmayı düşünüyorsak küçük görünen bu sorun büyük bir dert olabilir. Bunu düşünerek kaçınmamızda fayda var bende kendime alıştırcağım bunu 🙂 Yani:

kullanılmalı.

Php.ini de “Short Open Tag” satırını bularak “on” açık hale getirebiliriz.

13) Optimizasyonlar

Gözden kaçırdığınız yada bundan bir şey olmaz dediğiniz yapılar proje geliştikçe damlaya damlaya göl olur misali uygulamanıza zararı dokunur. Örneğin bir fonksiyonu aynı işlemi aynı değerlerle birden fazla çağırıp kullanacaksanız dönen değerini bir değişkende tutup onu kullanmanız, fonksiyonu tekrar çalıştırmaktan daha verimli olacağı çoğu zaman göz ardı ediliyor.Çok basit bir örnek:

Burada getUsers adında bir fonksiyon var. Buradan dönen kayıtların sayısı kadar çalışacak döngü hazırlanıyor.Buraya kadar güzel. Peki ilerleyen satırlarda bizim yine aynı kullanıcı bilgilerine (getUsers fonksiyonundan dönen değerlere) ihtiyacımız var ve kullanıyorsak? Örneğin:

İşte o zaman sorun. Çünkü getUsers fonksiyonu tekrar gidip çalışacak sonuç üretecek tekrar değerleri geri return edecek. En başta bir değişkene sonuç alınır bu değişken üzerinden işlemler gerçekleştirilirse daha performanslı ve uygun olacaktır. Çok büyük değer var değişken ile boşuna bellek kullanayım diyorsanız da unset ile bellekten silebilirsiniz değişken ile işiniz bitince

14) Veritabanı Normalizasyonu

Hemen hemen tüm uygulamalarımız veri tabanı gerektiriyor en azından çoğunluğu. Bu veri tabanıyla içli dışlı olmamızı gerektirir. Çünkü burada hazırlanan yapı, tasarım uygulamamızın tüm geleceğini etkileyecektir. Uygulamamız bu yapıya göre çalışacak, kontrollerimiz, sorgularımız buraya göre şekillenecektir. Doğal olarak verimliliği, performansı, işleyişi de derinden etkileyecektir. Gereksiz yapılar, datalar, yanlış tasarımlar hem uygulamanızı etkileyecek hemde maliyetlerinizi arttıracaktır.

15) Standartlarda Kod Geliştirin

Buda çoğu zaman gözden kaçan dikkat edilmeyen bir sorundur. Dikkat edildiğinde ise tadından yenmez. Benim içinde çok önemli olup uymayanların arkasını toplamak zorunda kalabiliyorsunuz. Kabul görmüş kod standartları vardır PSR-0, PSR-1, PSR-2 gibi.PSR(Php Standards Recommendation – Önerilen PHP Standrtları) Bu gibi kabul görmüş global standartlarda kod geliştirirseniz her yerde kolayca anlaşabilirsiniz. Dünyanın diğer ucundaki bir programcı da gelir kodlarınız anlar, sizde onların ne yapmak istediğini anlayıp anlaşabilirsiniz. Global olarak uygulama geliştirmiş olursunuz her kes tarafından anlaşılır kabul görmüş standartlarda ve kalitede.Kullandığımız frameworkler de yine bu standartlar doğrultusunda geliştirilir. Örneğin laravel psr kod standartlarını ve diğer bazı standartlar ile geliştirilmiştir.
En azından kendinizin bile standartları olmalı. Bu kod okunurluğundan birlikte grup çalışmalarına kadar faydası olacaktır. Hem kendinizin hem projenizin kalitesi artar.

 

Kaynak; tahsinyuksel.com

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


Günlük 1 İpucu

Metin editörlerinde bir işlemi geriye almak için CTRL + Z geri alma işlemini geri almak içinse CTRL + Y kısa yolları kullanılır.