Merhaba. Bu yazı başımdan geçen bir olayı anlatmaktadır. Amacım, ben bu olaydan nasıl ders çıkardıysam, sizlerin de umarım ders çıkarması ve yardımcı olması.
Olay şu şekilde oldu.
Ben bir firmada Full Stack Web Developer olarak çalışmaktayım. Bir Panel yazılımı yaparken sürekli nerdeyse bütün sayfalarda aynı yaptığımız bir işlem vardı. Alanı Pasif/Aktif olarak değiştirme.
Yani kullanıcı Panel ara yüzünden, tablonun alanını pasif/aktif olarak değiştirebiliyor. Bunu her sayfada yaptığımız için aklıma, bunu nasıl dinamik hale getirebilirim ve böylece bir iş yükünden kurtulabilirim ? Diye bir soru geldi. Hemen pasif/aktif sorgusunun TableName kısmını dinamik olarak yollamak geldi. Yaptığım en büyük hatalardan biriydi.
Sorguyu basitçe gösterirsem:
Kod:
UPDATE Users SET [Status] = @status WHERE id=@id
Burada id ve status yolluyorum, ancak tablo adı hep değişiyor. Yani her tablo için aynı sorguyu yazmam gerek. Bende tablo adını dışarıdan verebileceğim parametre şeklinde değiştirdim ve sistemi bu şekilde canlıya aldık. İşte sonrası ufak çaplı felaket.
Sistem canlıya alındıktan sonra server loglarında değişik istekler görmeye başladım. Test tablolarına atılan GET istekleri gibi. Aslında projede o tablolara istek atan bir method yok. Bende çok takmadım, başka bir yazılımcı test yapıyordur diye. Ama bir kaç saat sonra baktığımda ise projenin canlıya alındığı ip adresinden Users, ********s gibi önemli tablolara istek atıldığını ve hatta bir tablodan verinin değiştirildğini gördüm.
Bunu gördüğüm anda bir terslik olduğunu anladım ve sistemi down ettim. Hemen oturduk arkadaşlarla sorunu anlamaya çalıştık ki çok geçmeden anlaşıldı.
Bir kullanıcı benim iş yükünden kurtulmak için yaptğım metoda html tarafından TableName ksımını değiştirerek, örneğin:
Kod:
Update --
Evet şu gördüğünüz "--" çift tire işareti koyularak sistemde, bundan sonra gelen her kod yorum satırı yapılıyor ve bunun öncesine istenilen kod girilerek, execute ediliyor.
Bu method düzeltildi ve tekrar canlıya alınarak sorun büyümeden çözüldü.
Yani demem o ki, siz siz olun hep basit düşünün :D