'Programlama' için etiket arşivi

Code to live, live to code!

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!

Vizeler bitti, yazılım geliştirme modundayım

Bu aralar SAÜ Mezun Bilgi Sistemi üzerinde yoğun olarak çalışıyorum. Öyle ki geçen gün yoğun kod yazımından dolayı klavyemin hararet yaptığını fark ettim ve gecenin bir yarısı dışarıda yağmur yağarken pencereyi açtım. :)

Evet, yeni MBS bitti bitecek gibi. Bu sefer yazdığım kodlar da görsel tasarımda içime sindi diyebilirim.

Ama yayından önce bir dizi ciddi güvenlik testinden geçirilmesi gerekiyor. Bunun için Fırat Hocamla bağlantıya geçmeye niyetlenip site adresini tıklayınca tasarımın değişmiş olduğunu gördüm; site yenilenmiş ve adresi değişmiş; (mikropyuvasi.org), bununla birlikte open source fikre ama closed mind akla sahip b2evo geliştiricilerinden desteğini çekmiş sitede yazdıklarına göre.. :)

Mikrodenetleyici Programlama

Dostum Kadir Tamkaya’nın verdiği gaz ile PIC Programlama işine hafiften dalış yapmış bulunuyorum. Oldukça zevkli, başında saatler geçiriyorum sanırım neredeyse web tasarım yapmak kadar zevkli bir iş.

Bu arada normal led’ler dışında yandaki şekilde onaltılık sayıları sıralarken gördüğünüz 7 segmentli led’lerle de oyuncaklar yapmaya çalışıyorum.