'Programlama' kategorisi için arşiv

Bir sonbahar sabahı

 MAX ISR

Bir sonbahar sabahı, Interrupt Service Routine’de timing overflow var diyerek uyandın mı hiç?
Çılgın gibi kod yazsanda, her seferinde en başa döndün mü hiç?
Bir his dolup içine uçuyorum sandın mı hiç?

Sabah #ISR diye sayıklayarak uyandıktan sonra uydurduğum bu harika şiiri bugün blog dünyasına sıkı bir geri dönüş yapan dostum Fırat’a armağan ediyorum; http://log.penguenyuvasi.org/ :)

Code to live, live to code!

PHP’de XSS’e karşı sağlam bir işlev

XSS (Cross Site Scripting) son yılların moda saldırı tekniği… Mutlaka her web programcısı zamanının bir kısmını XSS saldırılarını önlemek için bir işlev yazmakla geçirmiştir sanıyorum. Geçen gün yabancı bir forumda bahsi geçtikten sonra Kallahar’ın sitesinde yayınladığı bir işleve rastladım; RemoveXSS

Yukarıdaki bağlantıda deneme yapmak için bir arabirim de var. Kendi yaptığım denemelerde işlevi geçmeyi başaramadım. Kallahar, işlev hakkında pek iddialı olmadığını, henüz geliştirmeye açık olduğunu söyledi, ama bence kod çok sıkı…

Zaman sandığımdan daha hızlı geçiyor!

Bilgisayarımda bahar temizliği yaparken farkettim, 2001 tarihinde devriye adlı bir program yazmaya başlamışım, programın amacı internete girdiğimde çalışması gereken yazılımları bir alanda toplayıp giriş anında hepsini sırayla çalıştırmakmış. Yazık ki bayağı da API’lerle uğraştırmış beni.. :D

Aradan 5 yıl geçti. 2006′dayız ve dial-up kullanımı neredeyse bitti.. :(

Başladığım çalışmaları zamanında bitirmem gerektiği konusunda iyi bir ders ve hatıra olarak kalması için bir ekran görüntüsü aldım; :)

Devriye

Üst düzey dilleri geliştirenlere selam olsun!

Bir kaç gündür üzerinde çalıştığım bir proje nedeniyle assembly kodluyorum. If’i While’ı o kadar özledim ki anlatamam. Visual Basic’te program yazdığım zamanlar C++ için “gereksiz tefferuatlarla uğraştırıp zaman kaybettiriyor” dediğim için kendimden utanıyorum.

Nasıl olur da assembly’de kod yazmadan böyle bir yargıda bulunurum :)

Bu arada, URAS projesini zaman ve maddi imkan yetersizliğinden dolayı askıya aldım. Okul bittikten sonra devam etmeyi planlıyorum. SAGUAR X5 çalışmaları son sürat devam ediyor, son olarak OTOKAR ile anlaşma sağladık ama halen ciddi bir kaynak gereksinimi mevcut, yoğun bir şekilde sponsor arayışındayız…

PHP programcılarına SQL Injection’a karşı 3 not

SQL Injection, web formlarında kullanılan metin kutularından ya da URL ile gönderilen değişkenler üzerinden SQL sorgu cümleciğine direkt olarak müdahale edilmesi ile gerçekleştirilen bir ‘deface’ yöntemidir. Bu yöntem lamer olarak adlandırılan kötü niyetli insanlar tarafından kullanılır.

Gerçek hayatta olduğu gibi, Internet ortamında da dünyaya karınağrısı yaratmak için gelmiş olan, ego tatmini ve adrenalinle beslenen bünyeler mevcuttur. Bu ezik insanlardan sitelerinizi korumanın yolu aslında çok basittir.

Önce bu sorunun nasıl oluştuğunu örnek üzerinde inceleyelim;

/* Gelen POST verilerine göre veritabanından belirtilen
kullanıcı adı ve parolaya sahip olan kullanıcı isteniyor */
$sorgu = “SELECT * FROM kullanicilar WHERE kullanici=’{$_POST[’kullanici’]}’ AND parola=’{$_POST[’parola’]}’”;
mysql_query($sorgu);
/* Yukarida $_POST[’parola’]'yı kontrol etmeyi ‘unuttuk’.
Bunu kodu inceleyerek ya da deneme yoluyla öğrenen bir lamer
Aşağıdakine benzer bir giriş yapacaktır. */
$_POST[’kullanici’] = ‘EAN’;
$_POST[’parola’] = “‘ OR ”=’”;

Burada yürüyecek sorgu şu olacaktır;

SELECT * FROM kullanicilar WHERE kullanici=’EAN’ AND parola=” OR ” = ”

Bunu önlemenin çeşitli yolları var, buna karşı sunucuda alınabilecek önlem; php.ini’yi düzenlerken magic-quotes değerini “on” yapmaktır.

İkinci önlem sunucudaki magic-quotes değerini dikkate almadan PHP’nin sihirli işlevlerinden mysql_real_escape_string() işlevini kullanmaktır.

Şöyle;

$sorgu = sprintf(”SELECT * FROM kullanicilar WHERE kullanici=%s AND parola=%s”,
mysql_real_escape_string($_POST[’kullanici’]),
mysql_real_escape_string($_POST[’parola’]));

Üçüncü ve kesin önlem, temizleyici bir işlev yazmak ve tüm uygulamalarda işlev kütüphanemizden bu işlevi çağırarak çalışmaktır.

Şimdi bunu görelim;

function duzelt($deger)
{
// /’ yerine ‘ bırakıyoruz.
if (get_magic_quotes_gpc()) {
$deger = stripslashes($deger);
}
// sayısal değer değilse mysql_real_escape_string() işlevini uyguluyoruz
if (!is_numeric($deger)) {
$deger = “‘” . mysql_real_escape_string($deger) . “‘”;
}
return $deger;
}
$sorgu = sprintf(”SELECT * FROM kullanicilar WHERE kullanici=%s AND parola=%s”,
duzelt($_POST[’kullanici’]),
duzelt($_POST[’parola’]));
mysql_query($sorgu); // temiz bir sorgu

Evet hepsi bu!