Puan ders bitince hesaba yazılır. Bu dersi tamamlayınca +55 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.
SQL enjeksiyonu
Bir giriş formu düşün. Uygulama kullanıcı adını alır ve sorgu metnine yapıştırır. Veritabanı gelen metni bir bütün olarak okur. Adın nerede bitip sorgunun nerede başladığını ayırt edemez.
İşte açığın kaynağı bu. Girdi veri olarak taşınmaz, kodun içine karışır. Kullanıcı tırnak yazarsa dizgiyi kapatır ve sonrasında yazdığı her şey sorgunun parçası olur.
# Zafiyetli q = "SELECT id FROM users WHERE name='" + ad + "' AND pw='" + pw + "'" db.execute(q) # Sağlam q = "SELECT id FROM users WHERE name=%s AND pw=%s" db.execute(q, (ad, pw))
Yukarıdaki iki sürüm aynı işi tarif eder ama farklı bir sözleşmeyle. Zafiyetli sürüm girdiyi doğrudan dizgeye ekler; sürücü ne okuduğunu bilmez, sadece metni birleştirir. Sağlam sürümde ise ad ve parola alanları yer tutucu olarak durur, sürücü onları ayrı birer değer gibi veritabanına iletir. Sorgu iskeleti hiç değişmez, yalnız doldurulan değerler değişir. Girdi içinde tırnak, noktalı virgül ya da yorum işareti olsa bile sürücü onu hâlâ tek bir değer olarak okur, sorgunun yapısını değiştiremez. Aşağıdaki fonksiyonda hangi satırın bu ayrımı bozduğunu bulacaksın.