PHP, MySQL, Javascript, CSS Cheat Sheets

Cheat Sheet dediği şey belli bir konuyla alakalı çok sık kullanılan ve genelde ezberlenmesine gerek olmayan hatta hatırlatma amacıyla da kullanılabilen çizelgelerdir. Tam olarak Türkçe karşılığının olmaması (ya da benim bulamamam) üzücü. Aşağıda PHP, Javascript, MySQL, CSS, ActionScript, Apache mod_rewrite ve Renk çizelgeleri yer alıyor.

Cheat Sheet dediği şey belli bir konuyla alakalı çok sık kullanılan ve genelde ezberlenmesine gerek olmayan hatta hatırlatma amacıyla da kullanılabilen çizelgelerdir. Tam olarak Türkçe karşılığının olmaması (ya da benim bulamamam) üzücü. Aşağıda PHP, Javascript, MySQL, CSS, ActionScript, Apache mod_rewrite ve Renk çizelgeleri yer alıyor.

Okumaya devam et “PHP, MySQL, Javascript, CSS Cheat Sheets”

Yazdırılamayan ve ekran görüntüsü alınamayan sayfa yapmak

Yazıcıdan yazdırılamayan ve ekran görüntüsü alınamayan sayfalar yapmak için bir parça kod. Çok güvenilir bir koruma sağlamadığnı söyleyeyim. Bu işlerden biraz anlayan birisi altından girip üstünden çıkabilir.

SQL için ayrılmış kelime kontrolü

SQL dili her nekadar bir standartta olsa da MySQL, Oracle ve MSSQL gibi farklı veritabanı sunucularında geçerli olabilecek programcı tanımlamaları farklılıklar göstermektedir. Bir kelimenin tablo, alan veya indeks isimleri gibi kullanıcı tanımlı girdilerde kullanılıp kullanılamaycağını bilmek gerekir. Bu sayfadan bir kelimenin en çok kullanılan veritabanı sunucularında kullanılıp kullanılmadığı sorgulanabiliyor.

FakeAP: Fake Access Point

Fake AP wardriving’i zorlaştırmak için kullanılan bir yazılım. Yazılım binlerce sahte erişim noktasını taklit ederek, olası bir wardriving’te karşı tarafın binlerce sahte erişim noktası (access point) görmesini sağlıyor. Yazılım hem kalabalıkta gizlenme hem de saldırı tespiti için honeypot uygulamalarında kullanılıyor.

Dosya yöneticileri

PHP ile sunucu tarafındaki dosya ve dizinleri düzenlemeye yarayan script’ler.

http://www.litoweb.net/pfn2/
http://pfn.sourceforge.net/?lg=ing
http://www.phpxplorer.org/phpXplorer/webIndex.php
http://ecosmear.com/relay/demo/relay.html
http://ecosmear.com/relay/
http://www.eblah.com/e-dir/
http://cjgexplorerpro.com.ar//cjgexplorerpro/
http://www.szewo.com/php/commander/eng/
http://www.blueshoes.org/examples/fileManager/index.php
http://fsguide.sourceforge.net/
http://sweetphp.com/nuke/modules.php?name=Script_Preview&script=7
http://www.josh.ch/joshch/php-tools/phpmywebmin,overview.html
http://www.bitfolge.de/snif-en.html
http://www.siteeditplus.com/index.php?page=demo
http://www.bmitt.com/index.php?PageID=44&dir=webauthoring/php

Bluesnarfing

Bluesnarfing, Bluetooth bağlantısını kullanarak telsiz bir aygıttan bilgi çalmanın literatür adı. Şaşırmaya gerek yok bu tür yeni şeylerin literatüre girmesi için fazla bir zaman geçmesine gerek olmuyor. Farklı bir ifadeyle çoğunlukla telefonlar, dizüstü ve el bilgisayarları gibi cihazlardan telsiz bağlantısı kullanılarak bilgi sızdırmada kullanılan, yöntem ve teknikler topluluğuna verilen isim diyebiliriz. Bu yöntemlerle aygıtın ajandasına, kontak listesine ve kayıtlı mesajlarına erişiliyor. Saldırganın aygıtlara bu yöntemle erişilebilmesi için Bluetooth bağlantısının açık ve discoverable (sınırlar içindeki diğer Bluetooth cihazları tarafından bulunabilmesi) özelliğinin aktif olması gerekiyor. Bu özellik kapalı olsa bile saldırganın kaba kuvvetle cihazı tanımlaması mümkün. Bluejacking ise yakındaki Bluetooth cihazlara isim alanında mesaj yer alan reklamlar göndermek olarak tanımlanmış ikinci jargon. Canlı bir bluesnarfing gösterisini izlemek için buradan buyrun.

Ajax ile güvenli veri aktarımı

XML yada AJAX ile sunucu tarafına güvenli bir şekilde veri göndermek gerektiğinde bazı özel durumları da düşünmek ve kodda ekstra bazı eklemeler yapmak gerekiyor. Kullanmış olanlar bilirler, XMLHTTP nesnesi kullanıldığında, gönderilecek veri open üye fonksiyonuna parametre olarak verilir. Örneğin:

http.open(‘POST’, VERI, true);

veya

http.open(‘GET’, VERI, true);

Yukarıdaki veri değişkeni her iki gönderim metodunda da (GET ve POST) aynı şekilde ve formatta kullanılır. Veri isimli değişkenin formatı şu şekildedir:

degisken1=veri1&degisken2=veri2&degisken3=veri3

Aslında güvenli aktarımdaki bir sıkıntı da tam burada oluşuyor. Verilerden birinin muhteviyatında &, n veya + (ve özel amaçlı yazdırılamaz karakterler) karekterleri bulunduğunda, veriler sunucu tarafındaki script’te düzgün olarak ayrıştırılamıyor veya aktarılamıyor . Bu sorunun üstesinden gelmek için veri kısmıdaki zararlı karakterklerin ayıklanarak URL’i bozmayacak şekilde kodlanması gerekiyor. Base64, veriyi kendi karakter tablosunu kullanarak (64 adet karakterden oluşur) kodlayan bir algoritma. Web’de base64 encoder ve decoder olarak birçok javascript fonksiyonu bulmanız mümkün. Ancak bunların hepsi PHP’nin (sunucu tarafında php script kullanıldığını varsaydım) base64_decoder fonksiyonuyla uyumlu çalışmıyor. Webtoolkit sitesindeki kodlayıcı ve çözücü fonksiyonlar php.net sitesinde de belirtildiği gibi PHP’nin base64 kodlama ve kod çözme fonksiyonlarıyla uyumlu çalışıyor.

Gönderilecek veriyi base64 ile kodlamak ve karşı tarafta çözmek tek başına sağlam bir veri aktarımı yapmak için yeterli değil. Base64 esasında ikili veriyi yazdırılabilir formattaki karakterlere çevirmeye yarıyor. Bu sayede içerisinde veri taşıyıcısını etkileme ihtimali olan zararlı karakterler güvenli bir formata çevrilmiş oluyor. Base64 algoritması içerisinde (A-Za-z0-9+/) karakterlerinin yer aldığı 64 adet karakteri kullanarak kodlanmış çıktıyı oluştururuyor . (Base64 algoritmasının çalışmasını çok güzel bir şekilde açıklayan bir PDF dosyasını buradan indirip okuyabilirsiniz. ~46KB)

Sanırım çıktı karakter kümesinde yer alan + ve / karakterleri dikkatinizi çekmiştir. Bu karakterlerin XMLHTTP
nesnesine verilen veri isimli parametrede yer alması aktarım açısından sorun oluşturmuyor. Benim farkettiğim tek sorun + karakterinin Apache+PHP ikilsinin çalıştığı sunucu tarafında otomatik olarak boşluk karakterine çevrilmesi.Yani + karakterleri boşluk olarak aktarılıyor. + işaretinin yok olması (yani boşluk karakterine çevrilmesi)  base64 verisinin orjinalliğini bozduğu için base64_decoder’ın ürettiği çözülmüş veri de bambaşka birşey olarak çıkıyor. Bu nedenle base64 ile kodlanmış veriyi göndermeden önce içerisindeki + karakterini bir javascript fonksiyonu olan encodeURIComponent ile kodlamak gerekiyor. Bu kodlamadan sonra + karakteri %3B URL koduna çevriliyor. PHP tarafında base64_decode’dan önce encodeURIComponent’in yaptığının tersini yapacak bir kod kullanmaya gerek yok. Nitekim, web sunucu URL karatker kodlarıyla gelen %20, %FB ve %3B gibi verileri otomatik olarak orjinal haline zaten çeviriyor. Yani %3B olan kod +’ya istek PHP ye ulaşmadan çevrilmiş oluyor.

Hazır bol bol karakter kodlamaya dalmışken son bir gerekli kodlamadan ve gerekliliğinden de bahsetmek istiyorum. Latin karakter kümesi dışında bir veri girişi söz konusu olduğunda muhtemelen sunucu tarafında yada veri tabanında karakter kodlama sorunları yaşayacaksınız. Bu sorun esasında verinin sunucu veya istemci tarafında ele alınış şeklindeki farklılıktan kaynaklanır. Verinin sahip olduğu mutlak sayısal değerler farklı kodlama tablolarında farklı karakterler ile yorumlanırlar. Gönderilen veride yer alan karakterler, kullanmakta olduğunuz tabloda yer alıyorsa ve sunucu tarafında da (katar ve veritabanı işlemlerinde) aynı karakter tablosunua göre ele alınıyorsa hiçbir sorun yaşamazsınız. Özet olarak istemci ve sunucu tarafında aynı kodlama standardının kullanılması gereklidir. Burada tüm karakter kodlama tablolarını içeren ve destekleyen UTF kodlamasının kullanılması gerekiyor. UTF 2 byte’lık unicode adı verilen karakterleden oluşur. Latin alfabesi dışında arapça, çince veya japonca gibi dillerde kullanılan karakterleri de kapsar ve destekler. Verimizi XMLHTTP nesnesi ile göndermeden önce, UTF olarak kodlamamızda, verinin selameti açısından büyük fayda var.

Buraya kadar anlattıklarımı özetleyen kod parçası aslında şöyle:

function encode(input) {
 input = WebToolKit.utf8.encode(input);
 input = WebToolKit.base64.encode(input);
 return encodeURIComponent(input);
}

Dilerseniz kodun tamamını buradan indirebilirsiniz. ~4KB

Yazan: Tankado

ZK: Ajax but no Javascript

ZK, javascript bilgisi gerektirmeden birazcık programlama bilgisiyle zengin kullanıcı arabirimli web uygulamaları gerçekleştirmeyi sağlayan açık kaynak kodlu bir ajax web kütüphanesidir. Olay tetiklemeli zengin bileşenleri ile geliştirme çok daha basitleşiyor. İşaretleme diliyle tasarım yapmak HTML yazmak kadar basit. Bilşenler kullanılarak yapılmış demo sayfasını görmek için tıklayın. Framework’ü indirmek için tıklayın.

SMSrc:SMS remote control

Bu devre ile bir cep telefonunundan özel bir sms mesajı göndererek 8 adet elektronik aygıtı kontrol edebiliyorsunuz. Devre Ericson T10s telefonunun iletişim bağlantı noktasını bağlanmış. Devreye enerji verildiğinde telefonun ilk bellek konumundaki mesajı okumaya calışıyor (1- AT+CPMS="ME", 2- AT+CMGR=1). Eğer hiç mesaj yoksa bu işlem sürekli olarak tekrarlanıyor.

Cihaz kontrolü için gönderilen mesaj ikili formatta yazılmış olmalı. Toplam 8 cihaz kontrol edileceği için gönderilen mesaj 8 bitten oluşuyor. Örn: 10000011 şeklinde gönderilen bir mesaj 1.,2. ve 8. cihazların aktive edilmesini (ilgili roleleri çektirerek) diğerlerinin (3,4,5,6,7) ise kapatılmasını sağlıyor.Ayrıntılı bilgi için projenin şema ve AT komut dosyalarını inceleyebirsiniz.

Autodialer: Robotic Brute Forcer

Hemen herkes bir kere olsun şifresini unutmuştur. Word dökümanının şifresi, e-posta hesabının şifresi hatta işletim sisteminin giriş şifresini bile. Bunların hepsi için şifreyi kaldırma veya kurtarma şansınız vardır.

Dökümanınız için kaba kuvvet (brute force) kurtarmayı kullanmaktan başka şansınız yok (MS Ofis 97 ve öncesini kullanmıyorsanız), bu tür programlar olası bütün şifreleri bilgisayar hızını kullanarak deneme yanılma yöntemiyle bulmaya çalışırlar. Şifrenin kurtarılıp kurtarılamayacağı veya ne kadar zamanda kurtarılacağı tamamen şifrenizin uzunluğuna ve içerisindeki karakterlerin çeşidine bağlı.

E-posta hesabınızın şifrenizi unuttuysanız hemen hemen tüm ciddi e-posta hizmeti veren sitelerde var olan "Parolamı unuttum" fonksiyonunu kullanabilirsiniz. Bunu kullandığınızda, hesabınızı oluştururken tanımladığınız gizli sorunuz veya diğer bazı bilgileri sorulacaktır. Doğru cevapladığınız takdir parolanızı sıfırlamanıza izin verilecektir. Bu açıdan e-posta hesabı oluştururken hangi bilgileri girdiğinizi hatırlamanız önemli. Eğer bu aşamayı gerçekleştirmeyi başaramazsanız bile site yönetimi veya destek servisi ile iletişime geçme şansınız var..

Yukarıda açıkladığım word dökümanlarında olduğu gibi arşivlerin de (örn: rar, ace, zip) şifresini kaldırmak mümkün değil. Burada da deneme yanılma yöntemini kullanmak zorundasınız.

İşletim sisteminizde ise durum biraz daha farklıdır (Windows veya Linux için) isterseniz şifrenizi kurtarmayı, dilerseniz  de şifrenizi sıfırlamayı tercih edebilirsiniz. Bu iş için Hiren Boot CD içerisindeki programlar oldukça yararlı.

Bu kadar ek bilgiden sonra gelelim asıl konumuza. Ya unuttuğunuz şifre değerli eşyalarınızı veya paranızı sakladığınız çellik bir kasaya aitse. Ne yaparsınız ? Bir ihtimal şifrenizi hatırlamaya gayret ederek, çeşitli denemelerde bulunabilirsiniz. Ama sonuç değişmeyecek bir türlü kasınızın şifresini hatırlayamıyorsunuz. Sanırım bu durumda bir çilingir çağırmayı kasanızın kilit mekanizmasını feda etmek uğrana da olsa düşüneceksiniz. MIT’den iki öğrencinin başlarına böyle birşey gelmiş olacak ki bu projeyi gerçekleştirmişler.

Bu çalışma unutulan kasa şifrelerini deneme yanılma yoluyla bulmaya calışan ufak bir robottan ibaret. Olası şifreler veya belirli bir sırada tüm şifre kombinasyonları denenerek, kasa kapağının açılıp açılmadığı test ediliyor. Çevirmeli kiilit kolunun üzerine tutturulan çevirici mekanizma bir diz üstü bilgisayardaki yazılım tarafından yönetiliyor.

Yazan: Tankado

Google Trends

Google Trends internette ençok aranan ve heberlerde ençok geçen anahtar kelimelerin trend grafiğini oluşturan bir hizmet. Yaklaşık 3 yıllık bir zamanı kapsayan grafiklerde internet haber sitelerinden ve google’un kendi arama istatistiklerinden derlediği iki ayrı grafik veriliyor. İlk denediğim kelimelerden biri de google. Grafikten gördüğüm kadarıyla 2 yılda kullanım oranı 2 kat artmış, fakat haber kaynaklarındaki haber oranı için aynı şeyi söyleyemeyeceğim. Son zamanlarda yahoo‘nun arama motoru da oldukça başarılı sonuçlar veriyor. Onu da bir kenara not etmekte fayda var.

AttackAPI

AttackAPI javascript ve diğer bağlantılı olduğu istemci (ve sunucu) teknolojileri ile programlanabilr web arayüzleri üzerinden basit ve sezgisel saldırılar düzenlemeye yarıyor. Şuanki versiyonu birçok tarayıcı temelli (Örn:IE, FF, NC) saldırı tekniğini kullanmaya imkan tanıyor.

API kütüphanesinin birbirinden bağımsız bileşenleri şu adreslerden indirilebilir:

Kütüphanenin yeteneklerinin sınandığı tanıtımlar da kısaca şöyle:

NetworkSweeper: Daha önce de benzer bir örneğini verdiğim ip aralığı servis tarayıcısı. Yaptığım denemede ağda çalışan servisler (http) olmasına rağmen tespit edemedi. Bu API’yi başarılı olarak görmüyorum.
http://www.gnucitizen.org/projects/attackapi/build/inf/interfaces/NetworkSweeper.htm

JavascriptShell: Bir tür komut kabuğu içerisinde javascript kodlarının incelenip çalıştırılmasını sağlıyor, javascript’te hata ayıklama işlerinde kullanılabilir. http://www.gnucitizen.org/projects/attackapi/build/inf/interfaces/JavaScriptShell.htm

PortScanner: Basit bir javascript port tarayıcısı daha. Bu yukarıdakinden biraz daha başarılı.
http://www.gnucitizen.org/projects/attackapi/build/inf/interfaces/PortScanner.htm

HistoryDumper: Bu kod normalde yapamaması gereken birşeyi yaparak kullanıcın bir URL adresini daha önceden ziyaret edip etmediğini tespit edebiliyor.
http://www.gnucitizen.org/projects/attackapi/build/inf/interfaces/HistoryDumper.htm

ExtensionScanner: Web developer, Google tool bar ve Greasemonkey gibi tarayıcı eklentilerinin yüklü olup olmadığını tespit edebilen bu API sadece Mozilla tarayıcılarda çalışıyor. Örneğin ziyaret ettiğiniz bir web sayfası greasemonkey veya herhangi bir zayıflık içerek eklentinin yüklü olduğunu testpit ettiğinde sisteme arka kapı yükleyebilir.
http://www.gnucitizen.org/projects/attackapi/build/inf/interfaces/ExtensionScanner.htm

Son olarak dinamik web sitelerinde ençok XSS ve çeşitli Injection açıklarına rastlanıyor. Bu kütühane ve XSS teknikleri kullanılarak daha kompleks saldırılar gerçekleştirmek mümkün olabilir.

Yazan: Tankado

Demographics Prediction

Microsoft adCenter Labs‘ın bu sayfasından istediğiniz web sitesinin ziyaretçilerinin yaş ve cinsiyet dağılımlarını görebiliyorsunuz. MSN arama sitesinin elde ettiği tarayıcı bilgileri sayesinde verilen(sitenin kendisi söylüyor) bu hizmeti herhangi bir kelimeyi aratan kişilerin demografik istatistiklerini görmek için de kullanabiliyorsunuz.

Open Source as Alternative

Açık kaynak kod seven birisi olarak yeni keşfettiğim www.osalt.com sitesini bilmeyenlere tanıtmak istiyorum. Başlıkta da yazdığı gibi Open Source as Alternative kelimelerinin kısaltması olan osalt sitesinde gündelik hayatta kullandığımız ve ücretli kullanım lisanslarına sahip yazılımlara alternatif olabiliecek yazılımlar listeleniyor. Örneğin Windows, visio, photoshop gibi yazılımların yerine ücretsiz olarak kullanabileceğimiz yazılımlar kategorize bir şekilde osalt sitesinde görmek mümkün ve bu liste sıklıkla genişlemeye devam ediyor.

Zeki Türk Kadını

Başlığa bakarak bu yazının ne yazılım ile ne de .NET ile ilgili olmadığını düşünebilirsiniz. Fakat yanılıyorsunuz.

Biz Türk erkekleri genellikle, kadınlarımızın teknolojiye ve bilişime [affınıza sığınarak söylüyorum] kafasının basmadığını düşünürüz. Oysa Türk kadınları, pratik zekası ve hızlı düşünme yeteneği sayesinde bilişimde o kadar başarılı olabilirler ki, emin olun batı toplumları ağzı açık bir şekilde Türk kadınının başarısını seyreder durumuna düşebilir.

Peki neden böyle birşey gerçekleşmiyor? Neden kadınlarımız bırakın bilişimi, iş dünyasında bile başarılı olamıyor?

Belki güleceksiniz ama; bunun sebebi bana göre “televizyon dizileri”. Biz kadınlarımızı tv dizleri ile [yine affınıza sığınarak söylüyorum] mallaştırırken, Çin ve Hindistan gibi ülkeler seri bir şekilde kadın mühendis yetiştiriyor. Oysa Türk kadınının zeka seviyesi, emin olun onlardan çok daha yüksek.

Başlığa bakarak bu yazının ne yazılım ile ne de .NET ile ilgili olmadığını düşünebilirsiniz. Fakat yanılıyorsunuz.

Biz Türk erkekleri genellikle, kadınlarımızın teknolojiye ve bilişime [affınıza sığınarak söylüyorum] kafasının basmadığını düşünürüz. Oysa Türk kadınları, pratik zekası ve hızlı düşünme yeteneği sayesinde bilişimde o kadar başarılı olabilirler ki, emin olun batı toplumları ağzı açık bir şekilde Türk kadınının başarısını seyreder durumuna düşebilir.

Peki neden böyle birşey gerçekleşmiyor? Neden kadınlarımız bırakın bilişimi, iş dünyasında bile başarılı olamıyor?

Belki güleceksiniz ama; bunun sebebi bana göre “televizyon dizileri”. Biz kadınlarımızı tv dizleri ile [yine affınıza sığınarak söylüyorum] mallaştırırken, Çin ve Hindistan gibi ülkeler seri bir şekilde kadın mühendis yetiştiriyor. Oysa Türk kadınının zeka seviyesi, emin olun onlardan çok daha yüksek.

Okumaya devam et “Zeki Türk Kadını”

Extract URLs in text data with Javascript

Daha önce sitede duyurduğum bağlantı (link) arşivi projesi için hazırladığım kullanışlı javascript programcığı. readClipboardData(), parseURL() ve pasteFromClipboard() fonksiyonlarından oluşan programcık panodaki metin verisi içerisinde yer alan URL’leri tespit edip ayıklıyor ve tamamını string olarak geri döndürüyor. Ana fonksiyon olan pasteFromClipboard() ilkönce panodaki  metin verisini readClipboardData() fonksiyonu yardımıyla okuyor (IE ve FF farketmiyor) ardından parseURL() içindeki regex (Regular Expression) cümlesi yardımıyla özyinelemeli (Recursive) olarak teker teker elde ettikten sonra string olarak ana fonksiyona aktarıyor.  pasteFromClipboard() fonksiyonu ise son olarak URL’ler arasına newline (\n) yerleştirerek string formunda tekrar geri döndürüyor. Kodları buradan test edip indirebilirsiniz.