Tarih: 16 Ocak 2012 | Yazar: Hidayet Doğan | Konu: Genel | Etiketler: açıklar, cross-site request forgery, cross-site scripting, csrf, ezber kartları, güvenlik, php, sql injection, web, xsrf, xss | 1 Yorum »
PHP ve web güvenliği şimdiye kadar yapmış olduğum sunumlarda ve eğitimlerde üzerine sıklıkla durduğum bir konu. Gözlemlerim sonucunda genellikle PHP gibi, web programlama yönü güçlü olan bir betik dili öğrenirken bu konu göz ardı ediliyor veya öğrenme süreci içine dahil edilmiyor (kurslar ve çevirimiçi eğitim hazırlayanlara iğneleme olsun). Şimdiye kadar yaptığım iş alım görüşmelerinde de bu konuda ne kadar bilgi sahibi olduğumuz ortada (Tüyo: Benimle iş görüşmesi yapacaksanız bu konuya hazırlıklı gelin). Sonuç; durum vahim.
PHP dilinde orta veya kendini ileri seviye (veya uzman) hissedenler için ilerde daha detaylı bir yazı hazırlayabirim ama şimdilik bu işe yeni başlayan veya başlamak için kolları sıvamış arkadaşlarımıza basitçe birşeyler öğretelim diye düşündüm.
Web güvenliği, web açıkları ve PHP dilinde bunlarla baş etmek için neler kullanabileceğimizi, biraz da işin içine eğlence katarak (yeni başlayanlar için ferman gibi belgeler sıkıcı gelebilir) öğrenmek ve bu konuyu bize kolay bir yöntemle hatırlatması için minik bir ezber kartı serisi hazırladım. Genellikle yabancı dil öğrenirken kullanılan ezber kartları belki bu konuda da bir işe yarar. Üşenmeden çıktı alıp, kesip biçip, yapıştırıp masanızın üzerine serpiştirip veya abartıp cebinizde gezdirebilirsiniz. Buruşup bozulmaması için kalınca bir kağıda çıktı alabilirsiniz.
Ezber kartlarını PDF formatında indirmek için: http://hi.do/files/php-ve-web-guvenligi-ezber-kartlari.pdf
Belgenin kapak sayfasındaki açıklamayı okumayı unutmayın.
Tarih: 4 Ocak 2012 | Yazar: Hidayet Doğan | Konu: Genel | Etiketler: 2009, eğitim, inet-tr, istanbul bilgi üniversitesi, linux kullanıcıları derneği, lkd, makale, özgür yazılım günleri, php, seminer | Yorum yok »
12-13 Aralık 2009, İstanbul Bilgi Üniversitesi‘nde yapılan INET-TR – XIV. Türkiye’de İnternet Konferansı sırasında bir PHP mini semineri verilmişti (sadece iki sunum/konudan ibaret). Burada ben yine klasik sunumlarımdan biri olan “PHP’ye Giriş” isimli sunumu yapmıştım (iğneleme). İstanbul Bilgi Üniversitesi sağolsun, yetkilisiyle ve öğrencisiyle elele konferans ile çok ilgilenmişler (iğneleme). Üniversite içerisinde, konferansın yapıldığı binada bile bir tane afiş ile karşılaşmadım, bina dışında da hatırladığım kadarıyla bir afiş yoktu (gerçek). Konferansın düzenlendiği yer bile bu kadar ilgili olunca (iğneleme) tabiki katılımın çok olması beklenemez. PHP mini seminerine katılım 5 kişi ile kaldı (gerçek). Arkadaşlardan duyduğum kadarıyla diğer oturumlarda da katılım çok düşükmüş.
Herneyse, sonuç olarak katılım sayısı bizim için önemli değil, sadece İstanbul Bilgi Üniversitesi’nin ilgisizliği sinirlerimizi bozdu biraz. Bu sıralar Linux Kullanıcıları Derneği ile ortak Özgür Yazılım Günleri düzenliyorlar. 2009 veya 2010 yılında (tam hatırlamıyorum) Özgür Yazılım Günleri için PHP eğitimi isteğinde bulunmuşlardı ve üzülerek kabul etmemiştim. INET-TR 2009′dan sonra İstanbul Bilgi Üniversitesi kapsamında herhangi bir etkinlik, eğitim, seminer veya konferansa katılmama/desteklememe kararı aldığım için kendilerine başarılar diliyorum.
Konuya tekrar dönersek (esasında konunun yarısı birilerini iğnelemek ama olsun), INET-TR 2009 kitağçığında basılması için sunum ile ilgili küçük bir makale hazırlamıştım. PHP’yi kısaca ve basitçe anlatan bir makale ortaya çıktı. Kitapçık basıldı mı bilmiyorum ama buradan da indirebilir olması masa üstünde durmasından iyidir.
“PHP’ye Giriş” isimli makaleyi PDF formatında indiriniz.
Makaleyi kullanmak isterseniz aşağıdaki uyarıya dikkat edin:
“PHP’ye Giriş” başlıklı makale Creative Commons: Attribution-Noncommercial 3.0 Unported ile lisanslıdır. Detaylı bilgi: http://creativecommons.org/licenses/by-nc/3.0/
Tarih: 2 Ocak 2012 | Yazar: Hidayet Doğan | Konu: Genel | Etiketler: apache, appcelerator, cakephp, çatı, cocoa, firefox, framework, git, google chrome, ietester, ios, javascript, lighttpd, lithium framework, lucene, lynx, memcached, mongodb, mozilla, mysql, nano, nginx, nodejs, nosql, objective-c, php, pico, postgresql, ptyhon, redis, ruby, safari, sphinx, sublime text 2, subversion, svn, textmate, titanium, xcode, zend framework | Yorum yok »
Bazen arkadaş arasında “Bunun için ne kullanıyorsun?” diye sorular sorulabiliyor veya yeni birşey bulduğumuzda heyecanla bahsediyoruz. Güncel olarak ne için, nerede, ne kullandığımı derleyip toplamanın hem benim için hem de merak edenler (varsa) için iyi olacağını düşündüm.
Sunucu Yazılımları
İşletim sistemi olarak tabiki Linux (RedHat Enterprise, yoksa Debian). Web sunucu olarak da nginx ve yerine göre Apache HTTP Server. Daha önce LigHTTPD kullanma fırsatım oldu, statik dosyalar ve streaming medya için kullanmıştım, geliştirme süreci biraz yavaşladı diye hatırlıyorum. SQL sunucusu olarak MySQL ve gerekirse PostgreSQL kullanmayı tercih ederim. 2000 yılından itibaren PostgreSQL kullanan bir proje hazırlamadım fakat arada bir takip ediyorum. Günümüzde bolca ismi duyulan ve moda olan “NoSQL” kavramı ile MongoDB ve key-value (anahtar-değer) veritabanlarından Redis, disk üzerinde tutulacak bir veri gereksinimi olmadığında ise Memcache (özellikle oturum yönetimi veya önbellekleme/cache için). Memcached‘in verileri disk üzerine de yazan ve “sharding” kavramı getiren ve yönetim paneli gibi özellikleri olan Membase Server projesini de takip ediyorum (Redis’e rakip diyebiliriz). Tam metin arama da ise şimdiye kadar Sphinx ve Apache Lucene deneme fırsatım oldu, fakat Sphinx’in kullanımı daha hoşuma gitti, eğer Lucene’ı Zend Framework ile kullanacaksanız dikkatli olun. Zend Framework içinde gelen Lucene kütüphanesi kaynak kullanı konusunda biraz problemli.
İnternet Programlama
Yıllar önce Perl ile başlamıştım fakat şu anda tabiki PHP tercih ediyorum. Python ve Ruby dillerini uzun süredir inceliyorum fakat bir proje çıkartma fırsatım olmadı. (Sadece Python ile Linux üzerinde basit bir socket sunucu hazırlamıştım). Bunlar hariçinde JavaScript ile node.js platformu üzerinde birşeyler yapma planlarım var, bu yıl geçtiğimiz yıl içerisinde adından çokca bahsettirdi. İlerde kurcaladığımda bununla ilgili bir yazı yayınlamayı da düşünüyorum.
Mobil Programlama
Şimdiye kadar sadece iOS uygulamaları üzerine uğraşma fırsatım oldu. Çoklu platform desteği ile Appcelerator Titanium platformunu kullandım ve şimdiye kadar hazırladığım 4 tane uygulama yayınlandı (sadece iOS için). JavaScript bilenler için oldukça basit ve hızlı şekilde iOS ve Android platformları üzerinde uygulama geliştirme için bir platform. Belge olarak biraz eksik ama örneklerden ve API belgelerinden hızlıca öğrenebilirsiniz. Daha sonra biraz Xcode ile Objective-C denemelerim oldu fakat zaman darlığından devam edemedim. Objective-C’nin dil yazımı biraz garip gelebilir fakat çok zor değil, programlama bilgisi olanlar hızlıca çözebilir. Esas zorlayan kısım Xcode ve Cocoa Framework’e alışmanız. İlerde Appceleratir Titanium ve mobil programlama (muhtemelen Objective-C) ile ilgli birkaç yazı yazma planlarım var.
PHP Çatıları (Framework)
Çok fazla işim düşmese de uzun zamandır CakePHP projesini takip ediyorum ve deneme fırsatım oldu. Performans takıntınız yoksa ve hızlıca birşeyler üretmek istiyorsanız PHP çatıları arasında en basiti diyebiliriz. CakePHP projesinden ayrılıp daha sert kuralları olan, PHP 5.3 ve üst sürümleri destekleyen ve performans olarak daha iyi olan Lithium Framework güzel bir proje. Oldukça esnek olan Lithium Framework’ün halen kararlı sürümü yok fakat şu anda bazı startup projelerinde kullanılıyor. Yazımı ve kullanımı keyifli ve oldukça tertipli düzenli bir çatı. İlerde CakePHP ve Lithium Framework konusunda yazılar görebilirsiniz. Zend Framework‘ü ise her zaman uzaktan takip ediyorum. Symfony, Yii, CodeIgniter, Kohana, FuelPHP gibi çatıları tarzları ve yaklaşımları yüzünden hiç beğenemedim. (Aman dikkat, bu bundan hızlıdır, bu çatı bunu döver gibi bir söylemim yok, sadece tercih ve zevk meselesi.)
Kod Editörü
Linux üzerinde genellikle GNU nano veya Pico kullanıyorum. Microsoft Windows üzerinde ise Sublime Text 2, yoksa Notepad (plus plus değil, bildiğimiz düz Notepad). Mac üzerinde ise her zaman TextMate, fakat terminal üzerinde yine GNU nano kullanıyorum, genellikle elim terminale aşırı ve abartılı şekilde aşina olduğu için GNU nano kullanımım daha yüksek oranda.
Kaynak Kod / Sürüm Yönetimi
Tüm sistemler üzerinde Git veya Subversion (SVN), fakat Git daha çok hoşuma gidiyor.
Tarayıcı
Mac üzerinde Safari (neden Google Chrome kullanmadığımı bilmiyorum), Microsoft Windows üzerinde Google Chrome, fakat bir siteyi denemem gerekirse (ki uzun zamandır böyle bir gereksinimim olmadı) Mozilla Firefox ve IETester, Linux üzerinde ise Lynx metin tarayıcısını kullanıyorum.
Teknoloji / Sektör Takip
Twitter üzerinden arkadaşlar sağolsun birşeyleri “retweet” ediyorlar devamlı, günde sayını bilmediğim kere
TechCrunch, Read Write Web, Smashing Magazine, Webrazzi ve GitHub üzerinden projelerdeki yenilikleri takip ediyorum. Genelde günde bir defa MacRumors, 9To5Mac ve Culf of Mac bloglarını takip ediyorum. Hafta bir ve aklıma geldikçe de myNoSQL bloğunu takip ediyorum. Genelde RSS okuyucu kullanma alışkanlığım olmadığı için sitelere girip takip ediyorum.
Tarih: 29 Aralık 2011 | Yazar: Hidayet Doğan | Konu: Genel | Etiketler: isim uzayı, namespace, nesneye dayalı programlama, nesneye yönetlik programlama, object oriented programming, oop, php | Yorum yok »
PHP 5.3.0 ile birlikte gelen yenilikler ve eksiklikler arasında en çok ismini duyduğumuz şeylerden biriside “namespace”, Türkçesi (ve benim hoşuma giden, komik olanı) “isim uzayı”.
Esasında isminden de belli olduğu gibi içinde birşeylerin (isimlerin) döndüğü bir uzay olarak düşünebiliriz. Genelde içinde sabit değerler, fonksiyonlar ve sınıflar barındıran öbekler de diyebiliriz. Çok basit bir iki örnekle esasında bir mühendislik gizemi olmadığı anlaşılacak.
Örnek 1: (tavsan.php)
<?php
namespace Tavsan;
const TUY_RENGI = "beyaz";
function zipla($ileri = true) {
}
?>
Örnek 2: (kanguru.php)
<?php
namespace Kanguru;
const TUY_RENGI = "kahverengi";
function zipla($ileri = true) {
}
?>
Yukarıdaki iki farklı isim uzayında bulunan “TUY_RENGI” sabiti ve zipla isimli fonksiyon tanımlanmış. Normalde PHP’de bu tür bir kod çalıştırdığımızda bu fonksiyonun daha önce tanımlandığına dair bit hata mesajı alırız ve sabitimiz de en son atandığı değeri alır (yani “kahverengi” değerini alır). Fakat burada sabitimiz ve fonksiyonumuz iki farklı uzayda bulundugu için birbirinden tamamen bağımsız olarak ele alınmakta. Peki bunları nasıl kullanırız? Ya da kullandığımız sabitin hangi uzaya ait olduğunu nasıl söyleriz. Buyrun:
<?php
include("tavsan.php");
include("kanguru.php");
/* En son tanımlanmış isim uzayımız Kanguru (kanguru.php'yi en son dahil ettik) */
echo TUY_RENGI; /* Kanguru isim uzayına ait TUY_RENGI sabitini döner */
zipla(false); /* Kanguru'ya ait
/* Tavsan isim uzayına ait değerleri ve fonksiyonları çağırmak için */
echo Tavsan\TUY_RENGI;
Tavsan\zipla(true);
?>
Ek bir bilgi olarak isim uzaylarında PHP içinde tanımlanmış fonksiyonları ve sınıflar ile aynı isimde tanımlamalar yapabilirsiniz. Örneğin kendi isim uzayınızda mysql_connect isimli bir fonksiyon tanımlayabilir ve içini doldurabilirsiniz. Burada karşımıza şöyle bir problem çıkıyor: Peki ben gerçekten PHP içindeki mysql_connect fonksiyonunu çağırmak istersem? Cevabı: Global isim uzayı. Global isim uzayından birşeyler çağırmak için sadece başına \ eklememiz yeterli (isimsiz isim uzayı olarak düşünün.)
Örnek: Global isim uzayı.
<?php
namespace CokBuyukProgram;
function strlen($metin) {
return "Boyutunu ölçmek istemiyorum!";
}
$sahte_boyut = strlen("deneme");
$gercek_boyut = \strlen("deneme");
echo $sahte_boyut . "\n";
echo $gercek_boyut . "\n";
?>
Yukarıda bir isim uzayımız ve bu isim uzayı içinde “strlen” isimli bir fonksiyonumuz var. (PHP içinde de strlen isimli bir fonksiyon var bunu biliyoruz değil mi?) PHP’den ayrı olarak bu bize boyut ölçmek istemediğini söylüyor
Aşağıdaki satırda ise dikkat ederseniz “\strlen” olarak bir fonksiyon çağırılmış, iste bu da global isim uzayı yani PHP içindeki strlen fonksiyonunu tetikliyor.
Sanırım şimdilik bu bilgiler yeterli olur, umarım kafanız daha da karışmamıştır.
Yazı içindeki kodlar tamamen teorik olarak yazıldı. Herhangi bir deneme yapmadım. Eğer bir hata bulursanız yazıya yorum olarak gönderebilirsiniz.
Bu sayfadaki döküman Creative Commons: Attribution-Noncommercial 3.0 Unported ile lisanslıdır. Detaylı bilgi: http://creativecommons.org/licenses/by-nc/3.0/
Tarih: 28 Aralık 2011 | Yazar: Hidayet Doğan | Konu: Genel | Etiketler: mysql, mysqli, pdo, php, tavsiye | 1 Yorum »
“PHP ile MySQL’e nasıl bağlanırım?” sorusu şimdiye kadar aldığım (yaklaşık 10 yıldır sorulur) sorulardan en sık sorulanı. İşte bu sihirli sorunun gizemli cevabı:
1. Yöntem: “MySQL” eklentisini kullanarak.
<?php
$mysql_baglantisi = mysql_connect("adresi", "kullanici_adi", "sifre");
mysql_select_db("veritabani_adi", $mysql_baglantisi);
?>
2. Yöntem: “MySQLi” (MySQL Improved) eklentisini kullanarak.
<?php
$mysql_baglantisi = new mysqli("adres", "kullanici_adi", "sifre", "veritabani_adi");
?>
3. Yöntem: “PDO” eklentisini kullanarak.
<?php
$mysql_baglantisi = new PDO("mysql:dbname=veritabani_adi;host=adres", "kullanici_adi", "sifre");
?>
Örneklerde geçen “adres” MySQL sunucusunun çalıştığı internet adresi (IP adresi de olabilir) (örneğin: localhost), “kullanici_adi” olarak belirtilen MySQL sunucunuzun kullanıcı adı (örneğin: root), “şifre” olarak belirtilen yine MySQL sunucunuzun şifresi ve son olarak “veritabanı_adi” olarak belirtilen ise MySQL sunucusunda oluşturduğunuz veritabanı adı.
Bu eklentiler ve MySQL’e bağlandıktan sonra neler yapabileceğinizi öğrenmek için aşağıda verdiğim adresleri inceleyebilirsiniz.
Son (ve acı) söz
PHP veya başka bir programlama dilini öğrenmeye niyetlendiğimizde öncelikle birşeyi yapmak için öğrenmek yerine öğrenip birşeyi yapmak daha uygundur (doğal süreç). Programlama mantığını öğrenmeden bir programlama dilini öğrenmek ilerde sadece kendinizi progamlamadan anlamayan ama programlama yaptığını sanan bir yazılımcıya dönüştürür (yazılım uzmanı demeye dilim varmadı, esasında yazılımcı demek te yanlış, herneyse). Ek olarak alışkanlık haline getirmemiz gereken bir konu da başvuru kaynakları. Bir soruyu sormadan önce her zaman yaptığım şey: RTFM. Lütfen kimse alınmasın, kırılmasın, kızmasın, dost acı söyler diyelim.
Sürç-i lisan ettiysek affola.
Bu sayfadaki döküman Creative Commons: Attribution-Noncommercial 3.0 Unported ile lisanslıdır. Detaylı bilgi: http://creativecommons.org/licenses/by-nc/3.0/